<?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>225771</bug_id>
          
          <creation_ts>2021-05-13 10:46:17 -0700</creation_ts>
          <short_desc>Implement Baseline JIT property access slow paths using JIT thunks.</short_desc>
          <delta_ts>2021-05-14 11:37:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1759739</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-13 10:46:17 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759774</commentid>
    <comment_count>1</comment_count>
      <attachid>428543</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-13 12:07:48 -0700</bug_when>
    <thetext>Created attachment 428543
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759795</commentid>
    <comment_count>2</comment_count>
      <attachid>428543</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-05-13 12:58:31 -0700</bug_when>
    <thetext>Comment on attachment 428543
proposed patch.

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

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:128
&gt; +{

Let&apos;s add a comment that this works only in Baseline and ensure that this is only used in Baseline. It is getting JSGlobalObject from CodeBlock in CallFrame. This is valid only in Baseline and LLInt since this JSGlobalObject is different from the expected one in DFG / FTL if inlining happens.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:150
&gt; +    jit.prepareCallOperation(vm);
&gt; +

Now, it is already set up the arguments. So how about tail-call to the operation function from this thunk instead of returning to the caller?

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:252
&gt; +MacroAssemblerCodeRef&lt;JITThunkPtrTag&gt; JIT::slow_op_xxx_private_name_prepareCallGenerator(VM&amp; vm)
&gt; +{
&gt; +    JIT jit(vm);
&gt; +
&gt; +    jit.tagReturnAddress();
&gt; +
&gt; +    constexpr GPRReg bytecodeOffsetReg = argumentGPR3;
&gt; +    jit.store32(bytecodeOffsetReg, tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt; +
&gt; +    // arg3 now set to regT1 (argumentGPR1 on ARM64 &amp; X86_64). argumentGPR1 is now free.
&gt; +    jit.move(argumentGPR1, argumentGPR3);
&gt; +    // arg1 is now set to stubInfo. argumentGPR2 is now free.
&gt; +    jit.move(argumentGPR2, argumentGPR1);
&gt; +    // arg2 is now set to regT0.
&gt; +    // - ARM64: regT0 is argumentGPR0: argumentGPR0 is now free.
&gt; +    // - X86_64: regT0 is not an argument GPR. So, don&apos;t care.
&gt; +    jit.move(regT0, argumentGPR2);
&gt; +    // arg0 is now set to globalObject.
&gt; +    jit.loadPtr(addressFor(CallFrameSlot::codeBlock), argumentGPR0);
&gt; +    jit.loadPtr(Address(argumentGPR0, CodeBlock::offsetOfGlobalObject()), argumentGPR0);
&gt; +
&gt; +    jit.prepareCallOperation(vm);
&gt; +    jit.ret();
&gt; +
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
&gt; +    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, &quot;Baseline: slow_op_xxx_private_name_prepareCall&quot;);
&gt; +}
&gt; +#endif // ENABLE(EXTRA_CTI_THUNKS)

Ditto

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:633
&gt; +MacroAssemblerCodeRef&lt;JITThunkPtrTag&gt; JIT::slow_op_put_xxx_prepareCallGenerator(VM&amp; vm)
&gt; +{
&gt; +    JIT jit(vm);
&gt; +
&gt; +    jit.tagReturnAddress();
&gt; +
&gt; +    constexpr GPRReg bytecodeOffsetReg = argumentGPR0;
&gt; +    jit.store32(bytecodeOffsetReg, tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt; +
&gt; +    jit.loadPtr(JIT::addressFor(CallFrameSlot::codeBlock), JIT::argumentGPR0);
&gt; +    jit.loadPtr(JIT::Address(argumentGPR0, CodeBlock::offsetOfGlobalObject()), JIT::argumentGPR0);
&gt; +
&gt; +    jit.prepareCallOperation(vm);
&gt; +    jit.ret();
&gt; +
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
&gt; +    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, &quot;Baseline: slow_op_put_xxx_prepareCall&quot;);
&gt; +}
&gt; +#endif // ENABLE(EXTRA_CTI_THUNKS)

Ditto.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:838
&gt; +#if ENABLE(EXTRA_CTI_THUNKS)
&gt; +MacroAssemblerCodeRef&lt;JITThunkPtrTag&gt; JIT::slow_op_del_by_xxx_prepareCallGenerator(VM&amp; vm)
&gt; +{
&gt; +    JIT jit(vm);
&gt; +
&gt; +    jit.tagReturnAddress();
&gt; +
&gt; +    constexpr GPRReg bytecodeOffsetReg = argumentGPR0;
&gt; +    jit.store32(bytecodeOffsetReg, tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt; +
&gt; +    // arg4 already has ecmaMode.
&gt; +    // arg3 already has CacheableIdentifier / property.
&gt; +    // arg2 already has base.
&gt; +    // arg1 already has stubInfo.
&gt; +    // arg0 is now set to globalObject.
&gt; +    jit.loadPtr(JIT::addressFor(CallFrameSlot::codeBlock), JIT::argumentGPR0);
&gt; +    jit.loadPtr(JIT::Address(argumentGPR0, CodeBlock::offsetOfGlobalObject()), JIT::argumentGPR0);
&gt; +
&gt; +    jit.prepareCallOperation(vm);
&gt; +    jit.ret();
&gt; +
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
&gt; +    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, &quot;Baseline: slow_op_del_by_id_prepareCall&quot;);
&gt; +}
&gt; +#endif // ENABLE(EXTRA_CTI_THUNKS)

Ditto.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1157
&gt; +#if ENABLE(EXTRA_CTI_THUNKS)
&gt; +MacroAssemblerCodeRef&lt;JITThunkPtrTag&gt; JIT::slow_op_get_by_id_prepareCallGenerator(VM&amp; vm)
&gt; +{
&gt; +    JIT jit(vm);
&gt; +
&gt; +    jit.tagReturnAddress();
&gt; +
&gt; +    constexpr GPRReg bytecodeOffsetReg = argumentGPR2;
&gt; +    jit.store32(bytecodeOffsetReg, tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt; +
&gt; +    // arg3 already has CacheableIdentifier.
&gt; +    // arg2 is now set to regT0.
&gt; +    // - ARM64: regT0 is argumentGPR0: argumentGPR0 is now free.
&gt; +    // - X86_64: regT0 is not an argument GPR. So, don&apos;t care.
&gt; +    jit.move(regT0, argumentGPR2);
&gt; +    // arg1 already has stubInfo.
&gt; +    // arg0 is now set to globalObject.
&gt; +    jit.loadPtr(JIT::addressFor(CallFrameSlot::codeBlock), JIT::argumentGPR0);
&gt; +    jit.loadPtr(JIT::Address(argumentGPR0, CodeBlock::offsetOfGlobalObject()), JIT::argumentGPR0);
&gt; +
&gt; +    jit.prepareCallOperation(vm);
&gt; +    jit.ret();
&gt; +
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
&gt; +    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, &quot;Baseline: slow_op_get_by_id_prepareCall&quot;);
&gt; +}
&gt; +#endif // ENABLE(EXTRA_CTI_THUNKS)

Ditto.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1228
&gt; +#if ENABLE(EXTRA_CTI_THUNKS)
&gt; +MacroAssemblerCodeRef&lt;JITThunkPtrTag&gt; JIT::slow_op_get_by_id_with_this_prepareCallGenerator(VM&amp; vm)
&gt; +{
&gt; +    JIT jit(vm);
&gt; +
&gt; +    jit.tagReturnAddress();
&gt; +
&gt; +    constexpr GPRReg bytecodeOffsetReg = argumentGPR3;
&gt; +    jit.store32(bytecodeOffsetReg, tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt; +
&gt; +    // arg4 already has CacheableIdentifier.
&gt; +    // arg3 is now set to regT1.
&gt; +    // - ARM64 &amp; X86_64: regT1 is argumentGPR1: argumentGPR1 is now free.
&gt; +    jit.move(regT1, argumentGPR3);
&gt; +    // arg1 is now set to stubInfo. argumentGPR2 is now free.
&gt; +    jit.move(argumentGPR2, argumentGPR1);
&gt; +    // arg2 is now regT0.
&gt; +    // - ARM64: regT0 is argumentGPR0: argumentGPR0 is now free.
&gt; +    // - X86_64: regT0 is not an argument GPR. So, don&apos;t care.
&gt; +    jit.move(regT0, argumentGPR2);
&gt; +    // arg0 is now set to globalObject.
&gt; +    jit.loadPtr(JIT::addressFor(CallFrameSlot::codeBlock), JIT::argumentGPR0);
&gt; +    jit.loadPtr(JIT::Address(argumentGPR0, CodeBlock::offsetOfGlobalObject()), JIT::argumentGPR0);
&gt; +
&gt; +    jit.prepareCallOperation(vm);
&gt; +    jit.ret();
&gt; +
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
&gt; +    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, &quot;Baseline: slow_op_get_by_id_with_this_prepareCall&quot;);
&gt; +}
&gt; +#endif // ENABLE(EXTRA_CTI_THUNKS)

Ditto.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1326
&gt; +#if ENABLE(EXTRA_CTI_THUNKS)
&gt; +MacroAssemblerCodeRef&lt;JITThunkPtrTag&gt; JIT::slow_op_put_by_id_prepareCallGenerator(VM&amp; vm)
&gt; +{
&gt; +    JIT jit(vm);
&gt; +
&gt; +    jit.tagReturnAddress();
&gt; +
&gt; +    constexpr GPRReg bytecodeOffsetReg = argumentGPR2;
&gt; +    jit.store32(bytecodeOffsetReg, tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt; +
&gt; +    // arg4 already has CacheableIdentifier.
&gt; +    // arg2 is now set to regT1.
&gt; +    // - ARM64 &amp; X86_64: regT1 is argumentGPR1: argumentGPR1 is now free.
&gt; +    jit.move(regT1, argumentGPR2);
&gt; +    // arg1 is now set to stubInfo. argumentGPR3 is now free.
&gt; +    jit.move(argumentGPR3, argumentGPR1);
&gt; +    // arg3 is now regT0.
&gt; +    // - ARM64: regT0 is argumentGPR0: argumentGPR0 is now free.
&gt; +    // - X86_64: regT0 is not an argument GPR. So, don&apos;t care.
&gt; +    jit.move(regT0, argumentGPR3);
&gt; +    // arg0 is now set to globalObject.
&gt; +    jit.loadPtr(JIT::addressFor(CallFrameSlot::codeBlock), JIT::argumentGPR0);
&gt; +    jit.loadPtr(JIT::Address(argumentGPR0, CodeBlock::offsetOfGlobalObject()), JIT::argumentGPR0);
&gt; +
&gt; +    jit.prepareCallOperation(vm);
&gt; +    jit.ret();
&gt; +
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
&gt; +    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, &quot;Baseline: slow_op_put_by_id_prepareCall&quot;);
&gt; +}
&gt; +#endif // ENABLE(EXTRA_CTI_THUNKS)

Ditto.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1715
&gt; +#if ENABLE(EXTRA_CTI_THUNKS)
&gt; +MacroAssemblerCodeRef&lt;JITThunkPtrTag&gt; JIT::slow_op_get_from_scopeGenerator(VM&amp; vm)
&gt; +{
&gt; +    JIT jit(vm);
&gt; +
&gt; +#if CPU(X86_64)
&gt; +    jit.push(X86Registers::ebp);
&gt; +#elif CPU(ARM64)
&gt; +    jit.tagReturnAddress();
&gt; +    jit.pushPair(framePointerRegister, linkRegister);
&gt; +#endif
&gt; +
&gt; +    constexpr GPRReg bytecodeOffsetReg = argumentGPR2;
&gt; +    jit.store32(bytecodeOffsetReg, tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt; +
&gt; +    jit.loadPtr(addressFor(CallFrameSlot::codeBlock), argumentGPR3);
&gt; +    jit.loadPtr(Address(argumentGPR3, CodeBlock::offsetOfGlobalObject()), argumentGPR0);
&gt; +    jit.loadPtr(Address(argumentGPR3, CodeBlock::offsetOfInstructionsRawPointer()), argumentGPR1);
&gt; +    jit.addPtr(bytecodeOffsetReg, argumentGPR1);
&gt; +
&gt; +    jit.prepareCallOperation(vm);
&gt; +    CCallHelpers::Call operation = jit.call(OperationPtrTag);
&gt; +    CCallHelpers::Jump exceptionCheck = jit.emitExceptionCheck(vm);
&gt; +
&gt; +#if CPU(X86_64)
&gt; +    jit.pop(X86Registers::ebp);
&gt; +#elif CPU(ARM64)
&gt; +    jit.popPair(framePointerRegister, linkRegister);
&gt; +#endif
&gt; +    jit.ret();
&gt; +
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
&gt; +    patchBuffer.link(operation, FunctionPtr&lt;OperationPtrTag&gt;(operationGetFromScope));
&gt; +    auto handler = vm.jitStubs-&gt;existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary);
&gt; +    patchBuffer.link(exceptionCheck, CodeLocationLabel(handler.retaggedCode&lt;NoPtrTag&gt;()));
&gt; +    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, &quot;Baseline: slow_op_get_from_scope&quot;);
&gt;  }
&gt; +#endif // ENABLE(EXTRA_CTI_THUNKS)

Ditto.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1928
&gt; +#if ENABLE(EXTRA_CTI_THUNKS)
&gt; +MacroAssemblerCodeRef&lt;JITThunkPtrTag&gt; JIT::slow_op_put_to_scopeGenerator(VM&amp; vm)
&gt; +{
&gt; +    JIT jit(vm);
&gt; +
&gt; +#if CPU(X86_64)
&gt; +    jit.push(X86Registers::ebp);
&gt; +#elif CPU(ARM64)
&gt; +    jit.tagReturnAddress();
&gt; +    jit.pushPair(framePointerRegister, linkRegister);
&gt; +#endif
&gt; +
&gt; +    constexpr GPRReg bytecodeOffsetReg = argumentGPR2;
&gt; +    jit.store32(bytecodeOffsetReg, tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt; +
&gt; +    jit.loadPtr(addressFor(CallFrameSlot::codeBlock), argumentGPR3);
&gt; +    jit.loadPtr(Address(argumentGPR3, CodeBlock::offsetOfGlobalObject()), argumentGPR0);
&gt; +    jit.loadPtr(Address(argumentGPR3, CodeBlock::offsetOfInstructionsRawPointer()), argumentGPR1);
&gt; +    jit.addPtr(bytecodeOffsetReg, argumentGPR1);
&gt; +
&gt; +    jit.prepareCallOperation(vm);
&gt; +    CCallHelpers::Call operation = jit.call(OperationPtrTag);
&gt; +    CCallHelpers::Jump exceptionCheck = jit.emitExceptionCheck(vm);
&gt; +
&gt; +#if CPU(X86_64)
&gt; +    jit.pop(X86Registers::ebp);
&gt; +#elif CPU(ARM64)
&gt; +    jit.popPair(framePointerRegister, linkRegister);
&gt; +#endif
&gt; +    jit.ret();
&gt; +
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
&gt; +    patchBuffer.link(operation, FunctionPtr&lt;OperationPtrTag&gt;(operationPutToScope));
&gt; +    auto handler = vm.jitStubs-&gt;existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary);
&gt; +    patchBuffer.link(exceptionCheck, CodeLocationLabel(handler.retaggedCode&lt;NoPtrTag&gt;()));
&gt; +    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, &quot;Baseline: slow_op_put_to_scope&quot;);
&gt;  }
&gt; +#endif

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759798</commentid>
    <comment_count>3</comment_count>
      <attachid>428543</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-13 13:06:12 -0700</bug_when>
    <thetext>Comment on attachment 428543
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:128
&gt;&gt; +{
&gt; 
&gt; Let&apos;s add a comment that this works only in Baseline and ensure that this is only used in Baseline. It is getting JSGlobalObject from CodeBlock in CallFrame. This is valid only in Baseline and LLInt since this JSGlobalObject is different from the expected one in DFG / FTL if inlining happens.

Good point.  I should just rename all these thunks to baseline_... to make their purpose clear.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:150
&gt;&gt; +
&gt; 
&gt; Now, it is already set up the arguments. So how about tail-call to the operation function from this thunk instead of returning to the caller?

The call target is patchable.  So, in order to tail call there, we&apos;ll need to pass the target in a register.  That will either increase the emitted code side, or complicate the patchable call instruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759801</commentid>
    <comment_count>4</comment_count>
      <attachid>428543</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-13 13:09:19 -0700</bug_when>
    <thetext>Comment on attachment 428543
proposed patch.

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

LGTM, just a few structural questions

&gt; Source/JavaScriptCore/jit/JIT.h:787
&gt; +        static MacroAssemblerCodeRef&lt;JITThunkPtrTag&gt; slow_op_put_xxx_prepareCallGenerator(VM&amp;);

the key here is that we&apos;re put_by_val. If you didn&apos;t know that, this name is a bit confusing. Maybe ...put_by_val_xxx...?

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:113
&gt; +        // ARM64: argumentGPR0 amd argumentGPR1 already taken by incoming regT0 and regT1.
&gt; +        // X86_64: argumentGPR1 already taken by incoming regT1.
&gt; +        move(TrustedImmPtr(gen.stubInfo()), argumentGPR3);
&gt; +        move(TrustedImmPtr(profile), argumentGPR2);
&gt; +        emitNakedNearCall(vm.getCTIStub(slow_op_get_by_val_prepareCallGenerator).retaggedCode&lt;NoPtrTag&gt;());

can we define these as constants somewhere more canonical and give them a name?

Also, &quot;amd&quot; -&gt; &quot;and&quot;

Also, it&apos;s confusing to refer to things as regTX in the comment and then use argument gprs.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:210
&gt; +    // ARM64: argumentGPR0 amd argumentGPR1 already taken by incoming regT0 and regT1.
&gt; +    // X86_64: argumentGPR1 already taken by incoming regT1.

ditto

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:234
&gt; +    // arg3 now set to regT1 (argumentGPR1 on ARM64 &amp; X86_64). argumentGPR1 is now free.

asserts are better than comments

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:239
&gt; +    // - ARM64: regT0 is argumentGPR0: argumentGPR0 is now free.

asserts are better than comments

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:240
&gt; +    // - X86_64: regT0 is not an argument GPR. So, don&apos;t care.

asserts are better than comments

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:241
&gt; +    jit.move(regT0, argumentGPR2);

Do we really need all this manual arguments shuffling code? We already have code that handles that with setupArguments, right? Why can&apos;t we just use that everywhere?

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:300
&gt; +    // ARM64: argumentGPR0 amd argumentGPR1 already taken by incoming regT0 and regT1.

asserts are better than comments

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:342
&gt; +#else

same comments apply as before

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:836
&gt; +    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, &quot;Baseline: slow_op_del_by_id_prepareCall&quot;);

wrong name for &quot;slow_op_del_by_id_prepareCall&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759806</commentid>
    <comment_count>5</comment_count>
      <attachid>428543</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-13 13:18:40 -0700</bug_when>
    <thetext>Comment on attachment 428543
proposed patch.

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

&gt;&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:128
&gt;&gt;&gt; +{
&gt;&gt; 
&gt;&gt; Let&apos;s add a comment that this works only in Baseline and ensure that this is only used in Baseline. It is getting JSGlobalObject from CodeBlock in CallFrame. This is valid only in Baseline and LLInt since this JSGlobalObject is different from the expected one in DFG / FTL if inlining happens.
&gt; 
&gt; Good point.  I should just rename all these thunks to baseline_... to make their purpose clear.

Wait a minute ... these are all Baseline JIT methods (e.g. JIT::slow_op_get_by_val_prepareCallGenerator).  So, it should be implied that they only work with the Baseline JIT and not upper tier JITs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759876</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-13 16:17:52 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #5)
&gt; Comment on attachment 428543 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428543&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:128
&gt; &gt;&gt;&gt; +{
&gt; &gt;&gt; 
&gt; &gt;&gt; Let&apos;s add a comment that this works only in Baseline and ensure that this is only used in Baseline. It is getting JSGlobalObject from CodeBlock in CallFrame. This is valid only in Baseline and LLInt since this JSGlobalObject is different from the expected one in DFG / FTL if inlining happens.
&gt; &gt; 
&gt; &gt; Good point.  I should just rename all these thunks to baseline_... to make their purpose clear.
&gt; 
&gt; Wait a minute ... these are all Baseline JIT methods (e.g.
&gt; JIT::slow_op_get_by_val_prepareCallGenerator).  So, it should be implied
&gt; that they only work with the Baseline JIT and not upper tier JITs.

Talked to Yusuke offline.  I&apos;ll add the comment as documentation in case these thunks get refactored out of the Baseline JIT later and the relationship becomes less obvious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759990</commentid>
    <comment_count>7</comment_count>
      <attachid>428595</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-13 20:48:51 -0700</bug_when>
    <thetext>Created attachment 428595
proposed patch.

Addressed Yusuke and Saam&apos;s feedback, and also should have fixed the Debug EWS failures.  Let&apos;s try this on the EWS first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759992</commentid>
    <comment_count>8</comment_count>
      <attachid>428595</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-13 20:49:52 -0700</bug_when>
    <thetext>Comment on attachment 428595
proposed patch.

Wrong patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759995</commentid>
    <comment_count>9</comment_count>
      <attachid>428598</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-13 21:02:10 -0700</bug_when>
    <thetext>Created attachment 428598
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760081</commentid>
    <comment_count>10</comment_count>
      <attachid>428598</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-14 08:33:46 -0700</bug_when>
    <thetext>Comment on attachment 428598
proposed patch.

Ready for a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760154</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-14 11:36:24 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r277500: &lt;http://trac.webkit.org/r277500&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760155</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-14 11:37:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/78025955&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428543</attachid>
            <date>2021-05-13 12:07:48 -0700</date>
            <delta_ts>2021-05-13 20:48:51 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-225771.patch</filename>
            <type>text/plain</type>
            <size>52456</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBA
CisyMDIxLTA1LTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bXBsZW1lbnQgQmFzZWxpbmUgSklUIHByb3BlcnR5IGFjY2VzcyBzbG93IHBhdGhzIHVzaW5nIEpJ
VCB0aHVua3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjU3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFwcGxpZXMgdGhlIGZvbGxvd2luZyBzdHJhdGVneSB0byBCYXNlbGluZSBK
SVQgcHJvcGVydHkgYWNjZXNzIHNsb3cgcGF0aHM6CisKKyAgICAgICAgMS4gSWYgdGhlIHNsb3cg
cGF0aCBvcGVyYXRpb24gY2FsbCBpcyBub3QgcGF0Y2hhYmxlLCBlbWl0IGEgbmVhciBjYWxsIHRv
IGEgSklUCisgICAgICAgICAgIHRodW5rIHRvIGRvIHRoZSBlbnRpcmUgb3BlcmF0aW9uIGNhbGwu
CisKKyAgICAgICAgMi4gSWYgdGhlIHNsb3cgcGF0aCBvcGVyYXRpb24gY2FsbCBpcyBwYXRhY2hh
YmxlLCBlbWl0IGEgbmVhciBjYWxsIHRvIGEgcHJlcGFyZQorICAgICAgICAgICBjYWxsIEpJVCB0
aHVuayBiZWZvcmUgdGhlIHBhdGNoYWJsZSBvcGVyYXRpb24gY2FsbCwgYW5kIGEgbmVhciBjYWxs
IHRvIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICBjaGVjayBKSVQgdGh1bmsgYWZ0ZXIuCisKKyAg
ICAgICAgVGhpcyBzdHJhdGVneSByZWR1Y2VzIHRoZSBhbW91bnQgb2YgaW5zdHJ1Y3Rpb25zIGVt
aXR0ZWQgZm9yIGFsbCB0aGUgc2xvdyBwYXRocy4KKyAgICAgICAgUGVyZm9ybWFuY2UgaXMgZXhw
ZWN0ZWQgdG8gYmUgbmV1dHJhbCBvciBzbGlnaHRseSBpbXByb3ZlZCBkdWUgdG8gdGhlIHJlZHVj
ZWQKKyAgICAgICAgY29tcGlsZSB0aW1lcyBhbmQgYmV0dGVyIGNhY2hlIGxvY2FsaXR5LgorCisg
ICAgICAgIFdpdGggdGhpcyBwYXRjaCwgLS1kdW1wTGlua0J1ZmZlclN0YXRzIHNob3dzIHRoZSBm
b2xsb3dpbmcgY2hhbmdlcyBpbiBlbWl0dGVkCisgICAgICAgIEpJVCBjb2RlIHNpemUgKHVzaW5n
IGEgc2luZ2xlIHJ1biBvZiB0aGUgQ0xJIHZlcnNpb24gb2YgSmV0U3RyZWFtMiBvbiBBUyBNYWMp
CisgICAgICAgIGNvbXBhcmluZyB0byBjdXJyZW50IHRpcCBvZiB0cmVlOgorCisgICAgICAgICAg
ICAgICAgICAgICAgICBCYXNlICAgICAgICAgICAgICAgICAgICAgTmV3ICAgICAgICAgICAgICAg
ICAgICAgIERpZmYKKworICAgICAgICAgICBCYXNlbGluZUpJVDogODQ2MjQ3NzYgKDgwLjcwNDQ3
NSBNQikgIDc3NDI5NDAwICg3My44NDI0MzAgTUIpICAwLjkxeCAocmVkdWN0aW9uKQorICAgICAg
ICAgICAgICAgICAgIERGRzogMzY0MTUyNjQgKDM0LjcyODMwMiBNQikgIDM2MTYwODgwICgzNC40
ODU3MDMgTUIpICAwLjk5eAorICAgICAgICAgICAgICAgICBUaHVuazogMjMxMzAzMzYgKDIyLjA1
ODgwNyBNQikgIDIzMTU5MDI0ICgyMi4wODYxNjYgTUIpICAxLjAweAorICAgICAgICAgICBJbmxp
bmVDYWNoZTogMjE5Njk3MjggKDIwLjk1MTk2NSBNQikgIDIyMDY4MzQ4ICgyMS4wNDYwMTcgTUIp
ICAxLjAweAorICAgICAgICAgICAgICAgICAgIEZUTDogNjA5NzMzNiAoNS44MTQ4NzMgTUIpICAg
IDYwMDQ3MzYgKDUuNzI2NTYyIE1CKSAgICAwLjk4eAorICAgICAgICAgICAgICAgICAgV2FzbTog
MjMwMTk1NiAoMi4xOTUzMTYgTUIpICAgIDI0MjkyMDQgKDIuMzE2NjY5IE1CKSAgICAxLjA2eCAo
cHJvYmFibHkgbm9pc2UpCisgICAgICAgICAgICAgICBZYXJySklUOiAxNTIyNDg4ICgxLjQ1MTk1
OCBNQikgICAgMTUyMjQ4OCAoMS40NTE5NTggTUIpICAgIDEuMDB4CisgICAgICAgICAgICAgICAg
Q1NTSklUOiAwCisgICAgICAgICBVbmNhdGVnb3JpemVkOiAwCisKKyAgICAgICAgQ29tcGFyaW5n
IHRvIHRpcCBvZiB0cmVlIGF0IHRoZSBzdGFydCBvZiB0aGlzIGVmZm9ydCB0byBtb3ZlIHB1dCBz
bG93IHBhdGhzIGluCisgICAgICAgIEpJVCB0aHVua3M6CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEJhc2UgICAgICAgICAgICAgICAgICAgICBOZXcgICAgICAgICAgICAgICAgICAgICAgRGlm
ZgorCisgICAgICAgICAgIEJhc2VsaW5lSklUOiA4OTA4OTk2NCAoODQuOTYyODExIE1CKSAgNzc0
Mjk0MDAgKDczLjg0MjQzMCBNQikgIDAuODd4IChyZWR1Y3Rpb24pCisgICAgICAgICAgICAgICAg
ICAgREZHOiAzOTExNzM2MCAoMzcuMzA1MjIyIE1CKSAgMzYxNjA4ODAgKDM0LjQ4NTcwMyBNQikg
IDAuOTJ4IChyZWR1Y3Rpb24pCisgICAgICAgICAgICAgICAgIFRodW5rOiAyMzIzMDk2OCAoMjIu
MTU0Nzc4IE1CKSAgMjMxNTkwMjQgKDIyLjA4NjE2NiBNQikgIDEuMDB4CisgICAgICAgICAgIElu
bGluZUNhY2hlOiAyMjAyNzQxNiAoMjEuMDA2OTgxIE1CKSAgMjIwNjgzNDggKDIxLjA0NjAxNyBN
QikgIDEuMDB4CisgICAgICAgICAgICAgICAgICAgRlRMOiA2NTc1NzcyICg2LjI3MTE0NSBNQikg
ICAgNjAwNDczNiAoNS43MjY1NjIgTUIpICAgIDAuOTF4IChyZWR1Y3Rpb24pCisgICAgICAgICAg
ICAgICAgICBXYXNtOiAyMzAyNzI0ICgyLjE5NjA0OSBNQikgICAgMjQyOTIwNCAoMi4zMTY2Njkg
TUIpICAgIDEuMDV4IChwcm9iYWJseSBub2lzZSkKKyAgICAgICAgICAgICAgIFlhcnJKSVQ6IDE1
Mzg5NTYgKDEuNDY3NjYzIE1CKSAgICAxNTIyNDg4ICgxLjQ1MTk1OCBNQikgICAgMC45OXgKKyAg
ICAgICAgICAgICAgICBDU1NKSVQ6IDAgICAgICAgICAgICAgICAgICAgICAgICAwCisgICAgICAg
ICBVbmNhdGVnb3JpemVkOiAwICAgICAgICAgICAgICAgICAgICAgICAgMAorCisgICAgICAgIFRo
aXMgcGF0Y2ggaGFzIHBhc3NlZCB0aGUgSlNDIHRlc3RzIG9uIEFTIE1hYywgYW5kIGFsc28gYSBz
dWJzZXQgb2YgdGhlIEpTQyB0ZXN0cworICAgICAgICAoYXMgYSBzbW9rZSB0ZXN0KSBvbiB4ODZf
NjQuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1
enopOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlv
bkNoZWNrKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfeHh4X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJh
bmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3h4eF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X2RlbF9ieV94eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpz
bG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3Rv
X3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUVGh1bmtzOjpwcmVpbml0aWFsaXplRXh0cmFDVElUaHVua3MpOgorICAgICAgICAq
IGppdC9TbG93UGF0aENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVRTbG93UGF0aENhbGw6OmNh
bGwpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5o
OgorCiAyMDIxLTA1LTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW1vdmUgU3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVyCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzczODQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYwMiw2ICs2MDIsOCBAQCBwdWJsaWM6CiAgICAgSGVhcCogaGVhcCgpIGNvbnN0IHsgcmV0dXJu
ICZtX3ZtLT5oZWFwOyB9CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsgcmV0
dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9n
bG9iYWxPYmplY3QpOyB9CisKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Rm9yKENv
ZGVPcmlnaW4pOwogCiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5
c2lzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHJldmlzaW9uIDI3NzM4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDggKzIzMyw3IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpqaXRSZWxlYXNlQXNzZXJ0Tm8KIAogdm9pZCBBc3NlbWJseUhlbHBl
cnM6OmNhbGxFeGNlcHRpb25GdXp6KFZNJiB2bSkKIHsKLSAgICBpZiAoIU9wdGlvbnM6OnVzZUV4
Y2VwdGlvbkZ1enooKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlv
bnM6OnVzZUV4Y2VwdGlvbkZ1enooKSk7CiAKICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0g
dm0uZXhjZXB0aW9uRnV6emluZ0J1ZmZlcihzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpKTsKIApA
QCAtMjc2LDcgKzI3NSw4IEBAIEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6
OmUKIAogQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlv
bkNoZWNrKFZNJiB2bSwgRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0
aCB3aWR0aCkKIHsKLSAgICBjYWxsRXhjZXB0aW9uRnV6eih2bSk7CisgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSkpCisgICAgICAgIGNhbGxFeGNlcHRpb25GdXp6
KHZtKTsKIAogICAgIGlmICh3aWR0aCA9PSBGYXJKdW1wV2lkdGgpCiAgICAgICAgIGtpbmQgPSAo
a2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgOiBO
b3JtYWxFeGNlcHRpb25DaGVjayk7CkBAIC0yOTksNyArMjk5LDggQEAgQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZQogCiBBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1i
bHlIZWxwZXJzOjplbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2soVk0mIHZtKQogewotICAg
IGNhbGxFeGNlcHRpb25GdXp6KHZtKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNlRXhj
ZXB0aW9uRnV6eigpKSkKKyAgICAgICAgY2FsbEV4Y2VwdGlvbkZ1enoodm0pOwogCiAgICAgSnVt
cCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjc3Mzg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRTdHViQ2FsbDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKIAogICAgICAg
ICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0OwpAQCAtNzc0LDYgKzc3NSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKKyNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKKyAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxf
YnlfeHh4X3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihWTSYpOworICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29w
X3B1dF94eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF94eHhfcHJpdmF0ZV9uYW1l
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CisjZW5kaWYKKwogICAgICAgICBKdW1wIGdldFNs
b3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjc3Mzg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJEaXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgpAQCAt
OTQsMTEgKzk1LDY2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkK
ICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlW
YWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworCisjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQorICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyNlbHNlCisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CisgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQUjQ7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRSZWcpOworCisgICAgICAgIC8vIEFSTTY0OiBh
cmd1bWVudEdQUjAgYW1kIGFyZ3VtZW50R1BSMSBhbHJlYWR5IHRha2VuIGJ5IGluY29taW5nIHJl
Z1QwIGFuZCByZWdUMS4KKyAgICAgICAgLy8gWDg2XzY0OiBhcmd1bWVudEdQUjEgYWxyZWFkeSB0
YWtlbiBieSBpbmNvbWluZyByZWdUMS4KKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgYXJndW1lbnRHUFIzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHBy
b2ZpbGUpLCBhcmd1bWVudEdQUjIpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KIH0KIAorI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0p
Cit7CisgICAgSklUIGppdCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSNDsKKyAg
ICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICAvLyBhcmcyIGFscmVhZHkgaGFzIHBy
b2ZpbGUuCisgICAgLy8gYXJnNCBub3cgc2V0IHRvIHJlZ1QxIChhcmd1bWVudEdQUjEgb24gQVJN
NjQgJiBYODZfNjQpLiBhcmd1bWVudEdQUjEgaXMgbm93IGZyZWUuCisgICAgaml0Lm1vdmUoYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjQpOworICAgIC8vIGFyZzEgaXMgbm93IHNldCB0byBzdHVi
SW5mby4gYXJndW1lbnRHUFIzIGlzIG5vdyBmcmVlLgorICAgIGppdC5tb3ZlKGFyZ3VtZW50R1BS
MywgYXJndW1lbnRHUFIxKTsKKyAgICAvLyBhcmczIGlzIG5vdyBzZXQgdG8gcmVnVDAuCisgICAg
Ly8gLSBBUk02NDogcmVnVDAgaXMgYXJndW1lbnRHUFIwOiBhcmd1bWVudEdQUjAgaXMgbm93IGZy
ZWUuCisgICAgLy8gLSBYODZfNjQ6IHJlZ1QwIGlzIG5vdCBhbiBhcmd1bWVudCBHUFIuIFNvLCBk
b24ndCBjYXJlLgorICAgIGppdC5tb3ZlKHJlZ1QwLCBhcmd1bWVudEdQUjMpOworICAgIC8vIGFy
ZzAgaXMgbm93IHNldCB0byBnbG9iYWxPYmplY3QuCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjApOworICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoYXJndW1lbnRHUFIwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBhcmd1bWVudEdQUjApOworCisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsK
KworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19v
cF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsIik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwpAQCAtMTI5LDE5ICsxODUs
NzIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogewogICAgIEFT
U0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisKKyNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisjZWxzZQorICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQUjM7CisgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0UmVnKTsKKworICAgIC8vIEFSTTY0OiBhcmd1
bWVudEdQUjAgYW1kIGFyZ3VtZW50R1BSMSBhbHJlYWR5IHRha2VuIGJ5IGluY29taW5nIHJlZ1Qw
IGFuZCByZWdUMS4KKyAgICAvLyBYODZfNjQ6IGFyZ3VtZW50R1BSMSBhbHJlYWR5IHRha2VuIGJ5
IGluY29taW5nIHJlZ1QxLgorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3h4eF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3h4eF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQoreworICAgIEpJVCBqaXQodm0p
OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQUjM7CisgICAgaml0LnN0b3JlMzIoYnl0ZWNv
ZGVPZmZzZXRSZWcsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOworCisgICAgLy8gYXJnMyBub3cgc2V0IHRvIHJlZ1QxIChhcmd1bWVudEdQUjEgb24g
QVJNNjQgJiBYODZfNjQpLiBhcmd1bWVudEdQUjEgaXMgbm93IGZyZWUuCisgICAgaml0Lm1vdmUo
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjMpOworICAgIC8vIGFyZzEgaXMgbm93IHNldCB0byBz
dHViSW5mby4gYXJndW1lbnRHUFIyIGlzIG5vdyBmcmVlLgorICAgIGppdC5tb3ZlKGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIxKTsKKyAgICAvLyBhcmcyIGlzIG5vdyBzZXQgdG8gcmVnVDAuCisg
ICAgLy8gLSBBUk02NDogcmVnVDAgaXMgYXJndW1lbnRHUFIwOiBhcmd1bWVudEdQUjAgaXMgbm93
IGZyZWUuCisgICAgLy8gLSBYODZfNjQ6IHJlZ1QwIGlzIG5vdCBhbiBhcmd1bWVudCBHUFIuIFNv
LCBkb24ndCBjYXJlLgorICAgIGppdC5tb3ZlKHJlZ1QwLCBhcmd1bWVudEdQUjIpOworICAgIC8v
IGFyZzAgaXMgbm93IHNldCB0byBnbG9iYWxPYmplY3QuCisgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjApOworICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MoYXJndW1lbnRHUFIwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBhcmd1bWVudEdQUjApOworCisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZt
KTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3df
b3BfeHh4X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbCIpOworfQorI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwpAQCAtMTcw
LDE1ICsyNzksMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0KICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJh
dG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5k
ZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKKworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJy
YW5kR1BSID0gcmVnVDE7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworI2Vsc2UKKyAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIzOworICAgIG1vdmUoSklUOjpUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldFJlZyk7CisKKyAgICAvLyBB
Uk02NDogYXJndW1lbnRHUFIwIGFtZCBhcmd1bWVudEdQUjEgYWxyZWFkeSB0YWtlbiBieSBpbmNv
bWluZyByZWdUMCBhbmQgcmVnVDEuCisgICAgLy8gWDg2XzY0OiBhcmd1bWVudEdQUjEgYWxyZWFk
eSB0YWtlbiBieSBpbmNvbWluZyByZWdUMS4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF94eHhfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKyNlbmRpZgogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CiAKQEAgLTIwMywxNSArMzI5LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNr
X3ByaXZhdGVfYnJhbmQoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVf
YnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5k
R1BSID0gcmVnVDE7Ci0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJp
dmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21f
cHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRl
eDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKworI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CiAgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBicmFuZEdQUik7CisjZWxzZQorICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4
KTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQ
UjM7CisgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0UmVnKTsKKworICAgIC8vIEFSTTY0OiBhcmd1bWVudEdQUjAgYW1kIGFyZ3VtZW50R1BS
MSBhbHJlYWR5IHRha2VuIGJ5IGluY29taW5nIHJlZ1QwIGFuZCByZWdUMS4KKyAgICAvLyBYODZf
NjQ6IGFyZ3VtZW50R1BSMSBhbHJlYWR5IHRha2VuIGJ5IGluY29taW5nIHJlZ1QxLgorICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIGFyZ3VtZW50R1BSMik7CisgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3h4eF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCkBAIC00MzcsMTYgKzU4MSw1NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMiwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOworI2Vs
c2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIwOworICAgIG1vdmUoSklU
OjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldFJlZyk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihieVZhbEluZm8pLCBhcmd1bWVudEdQUjQpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGVjbWFN
b2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjUpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9wdXRfeHh4X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOworCisgICAgYXV0byogb3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsK
KyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRo
VGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CiAgICAgbV9ieVZhbEluc3RydWN0
aW9uSW5kZXgrKzsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3h4eF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7CisKKyAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJl
ZyA9IGFyZ3VtZW50R1BSMDsKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldFJlZywgdGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICBq
aXQubG9hZFB0cihKSVQ6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgSklU
Ojphcmd1bWVudEdQUjApOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhhcmd1bWVudEdQ
UjAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIEpJVDo6YXJndW1lbnRHUFIw
KTsKKworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LnJldCgpOwor
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3B1dF94eHhfcHJlcGFyZUNh
bGwiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0UHJpdmF0ZU5hbWU+KCk7CkBAIC00NzYsMTQgKzY2MSwzMyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHJlZ1QyOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFs
dWUoKSkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIwOwor
ICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dFJlZyk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8p
LCBhcmd1bWVudEdQUjQpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSks
IGFyZ3VtZW50R1BSNSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3B1dF94eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblB1dFByaXZhdGVOYW1l
T3B0aW1pemUpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3Mg
PSBjYWxsOwpAQCAtNTc4LDE0ICs3ODIsNjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbgogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKKyNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisjZWxzZQorICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQUjA7CisgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldFJlZyk7CisKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIGFyZ3VtZW50R1BSMyk7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFI0
KTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlf
eHh4X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisg
ICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgc3RhdGljX2Fzc2VydChyZXR1cm5W
YWx1ZUdQUiA9PSByZWdUMCk7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKIH0KIAorI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfZGVsX2J5X3h4eF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAg
SklUIGppdCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMDsKKyAgICBqaXQuc3Rv
cmUzMihieXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICAvLyBhcmc0IGFscmVhZHkgaGFzIGVjbWFNb2RlLgor
ICAgIC8vIGFyZzMgYWxyZWFkeSBoYXMgQ2FjaGVhYmxlSWRlbnRpZmllciAvIHByb3BlcnR5Lgor
ICAgIC8vIGFyZzIgYWxyZWFkeSBoYXMgYmFzZS4KKyAgICAvLyBhcmcxIGFscmVhZHkgaGFzIHN0
dWJJbmZvLgorICAgIC8vIGFyZzAgaXMgbm93IHNldCB0byBnbG9iYWxPYmplY3QuCisgICAgaml0
LmxvYWRQdHIoSklUOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIEpJVDo6
YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYXJndW1lbnRHUFIw
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBKSVQ6OmFyZ3VtZW50R1BSMCk7
CisKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGppdC5yZXQoKTsKKwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNh
bGwiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlW
YWw+KCk7CkBAIC02MjcsOSArODc4LDMwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEkKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCisjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
ICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIwOwor
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRSZWcp
OworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjQp
OworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV94
eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgc3RhdGljX2Fzc2VydChyZXR1cm5W
YWx1ZUdQUiA9PSByZWdUMCk7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKQEAgLTY3Miw4ICs5NDQsMjgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKLSAgICAKKyNlbHNlCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwor
CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsK
KyAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRSZWcpOworCisgICAgLy8gQVJNNjQ6IGFyZ3VtZW50R1BSMCBhbHJlYWR5IHRha2VuIGJ5IGlu
Y29taW5nIHJlZ1QwLgorICAgIC8vIFg4Nl82NDogcmVnVDAgaXMgbm90IGFuIGFyZ3VtZW50IEdQ
Ui4gU28sIGRvbid0IGNhcmUuCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgYXJndW1lbnRHUFIxKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC03MDYsNiArOTk4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCkBAIC03MTMsNyArMTAwNiwy
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAg
IFJFTEVBU0VfQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJn
dW1lbnRHUFIyOworICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldFJlZyk7CisKKyAgICAvLyBBUk02NDogYXJndW1lbnRHUFIwIGFscmVhZHkg
dGFrZW4gYnkgaW5jb21pbmcgcmVnVDAuCisgICAgLy8gWDg2XzY0OiByZWdUMCBpcyBub3QgYW4g
YXJndW1lbnQgR1BSLiBTbywgZG9uJ3QgY2FyZS4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBhcmd1bWVudEdQUjEpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgQ2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOworICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzgw
LDYgKzEwOTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKQEAgLTc4NywxNiAr
MTEwMiw2NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyNlbHNlCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3Vt
ZW50R1BSMjsKKyAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRSZWcpOworCisgICAgLy8gQVJNNjQ6IGFyZ3VtZW50R1BSMCBhbHJlYWR5IHRh
a2VuIGJ5IGluY29taW5nIHJlZ1QwLgorICAgIC8vIFg4Nl82NDogcmVnVDAgaXMgbm90IGFuIGFy
Z3VtZW50IEdQUi4gU28sIGRvbid0IGNhcmUuCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgYXJndW1lbnRHUFIxKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOworI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAorI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAg
ICBKSVQgaml0KHZtKTsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIyOworICAgIGppdC5z
dG9yZTMyKGJ5dGVjb2RlT2Zmc2V0UmVnLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKKworICAgIC8vIGFyZzMgYWxyZWFkeSBoYXMgQ2FjaGVhYmxl
SWRlbnRpZmllci4KKyAgICAvLyBhcmcyIGlzIG5vdyBzZXQgdG8gcmVnVDAuCisgICAgLy8gLSBB
Uk02NDogcmVnVDAgaXMgYXJndW1lbnRHUFIwOiBhcmd1bWVudEdQUjAgaXMgbm93IGZyZWUuCisg
ICAgLy8gLSBYODZfNjQ6IHJlZ1QwIGlzIG5vdCBhbiBhcmd1bWVudCBHUFIuIFNvLCBkb24ndCBj
YXJlLgorICAgIGppdC5tb3ZlKHJlZ1QwLCBhcmd1bWVudEdQUjIpOworICAgIC8vIGFyZzEgYWxy
ZWFkeSBoYXMgc3R1YkluZm8uCisgICAgLy8gYXJnMCBpcyBub3cgc2V0IHRvIGdsb2JhbE9iamVj
dC4KKyAgICBqaXQubG9hZFB0cihKSVQ6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgSklUOjphcmd1bWVudEdQUjApOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhh
cmd1bWVudEdQUjAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIEpJVDo6YXJn
dW1lbnRHUFIwKTsKKworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0
LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbCIpOworfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKQEAgLTgwNCwxMSArMTE2OSw2NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyNlbHNlCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgp
OworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BS
MzsKKyAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRSZWcpOworCisgICAgLy8gQVJNNjQ6IGFyZ3VtZW50R1BSMCBhbWQgYXJndW1lbnRHUFIx
IGFscmVhZHkgdGFrZW4gYnkgaW5jb21pbmcgcmVnVDAgYW5kIHJlZ1QxLgorICAgIC8vIFg4Nl82
NDogYXJndW1lbnRHUFIxIGFscmVhZHkgdGFrZW4gYnkgaW5jb21pbmcgcmVnVDEuCisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBhcmd1bWVu
dEdQUjQpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOworI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGpp
dCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMzsKKyAgICBqaXQuc3RvcmUzMihi
eXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7CisKKyAgICAvLyBhcmc0IGFscmVhZHkgaGFzIENhY2hlYWJsZUlkZW50aWZp
ZXIuCisgICAgLy8gYXJnMyBpcyBub3cgc2V0IHRvIHJlZ1QxLgorICAgIC8vIC0gQVJNNjQgJiBY
ODZfNjQ6IHJlZ1QxIGlzIGFyZ3VtZW50R1BSMTogYXJndW1lbnRHUFIxIGlzIG5vdyBmcmVlLgor
ICAgIGppdC5tb3ZlKHJlZ1QxLCBhcmd1bWVudEdQUjMpOworICAgIC8vIGFyZzEgaXMgbm93IHNl
dCB0byBzdHViSW5mby4gYXJndW1lbnRHUFIyIGlzIG5vdyBmcmVlLgorICAgIGppdC5tb3ZlKGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIxKTsKKyAgICAvLyBhcmcyIGlzIG5vdyByZWdUMC4KKyAg
ICAvLyAtIEFSTTY0OiByZWdUMCBpcyBhcmd1bWVudEdQUjA6IGFyZ3VtZW50R1BSMCBpcyBub3cg
ZnJlZS4KKyAgICAvLyAtIFg4Nl82NDogcmVnVDAgaXMgbm90IGFuIGFyZ3VtZW50IEdQUi4gU28s
IGRvbid0IGNhcmUuCisgICAgaml0Lm1vdmUocmVnVDAsIGFyZ3VtZW50R1BSMik7CisgICAgLy8g
YXJnMCBpcyBub3cgc2V0IHRvIGdsb2JhbE9iamVjdC4KKyAgICBqaXQubG9hZFB0cihKSVQ6OmFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgSklUOjphcmd1bWVudEdQUjApOwor
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhhcmd1bWVudEdQUjAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIEpJVDo6YXJndW1lbnRHUFIwKTsKKworICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGwiKTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwpA
QCAtODUyLDExICsxMjcwLDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW4KICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21f
cHV0QnlJZEluZGV4KytdOwogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEs
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyNlbHNlCisgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVj
b2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworCisgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsKKyAgICBtb3ZlKEpJVDo6VHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRSZWcpOworCisgICAgLy8gQVJNNjQ6
IGFyZ3VtZW50R1BSMCBhbWQgYXJndW1lbnRHUFIxIGFscmVhZHkgdGFrZW4gYnkgaW5jb21pbmcg
cmVnVDAgYW5kIHJlZ1QxLgorICAgIC8vIFg4Nl82NDogYXJndW1lbnRHUFIxIGFscmVhZHkgdGFr
ZW4gYnkgaW5jb21pbmcgcmVnVDEuCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBhcmd1bWVudEdQUjQpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwo
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGpp
dCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsKKyAgICBqaXQuc3RvcmUzMihi
eXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7CisKKyAgICAvLyBhcmc0IGFscmVhZHkgaGFzIENhY2hlYWJsZUlkZW50aWZp
ZXIuCisgICAgLy8gYXJnMiBpcyBub3cgc2V0IHRvIHJlZ1QxLgorICAgIC8vIC0gQVJNNjQgJiBY
ODZfNjQ6IHJlZ1QxIGlzIGFyZ3VtZW50R1BSMTogYXJndW1lbnRHUFIxIGlzIG5vdyBmcmVlLgor
ICAgIGppdC5tb3ZlKHJlZ1QxLCBhcmd1bWVudEdQUjIpOworICAgIC8vIGFyZzEgaXMgbm93IHNl
dCB0byBzdHViSW5mby4gYXJndW1lbnRHUFIzIGlzIG5vdyBmcmVlLgorICAgIGppdC5tb3ZlKGFy
Z3VtZW50R1BSMywgYXJndW1lbnRHUFIxKTsKKyAgICAvLyBhcmczIGlzIG5vdyByZWdUMC4KKyAg
ICAvLyAtIEFSTTY0OiByZWdUMCBpcyBhcmd1bWVudEdQUjA6IGFyZ3VtZW50R1BSMCBpcyBub3cg
ZnJlZS4KKyAgICAvLyAtIFg4Nl82NDogcmVnVDAgaXMgbm90IGFuIGFyZ3VtZW50IEdQUi4gU28s
IGRvbid0IGNhcmUuCisgICAgaml0Lm1vdmUocmVnVDAsIGFyZ3VtZW50R1BSMyk7CisgICAgLy8g
YXJnMCBpcyBub3cgc2V0IHRvIGdsb2JhbE9iamVjdC4KKyAgICBqaXQubG9hZFB0cihKSVQ6OmFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgSklUOjphcmd1bWVudEdQUjApOwor
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhhcmd1bWVudEdQUjAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIEpJVDo6YXJndW1lbnRHUFIwKTsKKworICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkJhc2VsaW5lOiBzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbCIpOworfQorI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwpAQCAtODkwLDcgKzEz
NTgsMjkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNTRVJU
KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIyOworICAg
IG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldFJl
Zyk7CisKKyAgICAvLyBBUk02NDogYXJndW1lbnRHUFIwIGFscmVhZHkgdGFrZW4gYnkgaW5jb21p
bmcgcmVnVDAuCisgICAgLy8gWDg2XzY0OiByZWdUMCBpcyBub3QgYW4gYXJndW1lbnQgR1BSLiBT
bywgZG9uJ3QgY2FyZS4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBh
cmd1bWVudEdQUjEpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgYXJndW1lbnRHUFIzKTsKKyAgICAvLyBzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgorICAgIC8v
IFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3Qg
dG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgorICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CisjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtMTE2NCw5ICsxNjU0LDY1IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBv
cGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsK
KyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0UmVn
KTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorfQorCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9z
Y29wZUdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7CisKKyNpZiBDUFUoWDg2
XzY0KQorICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQVShBUk02NCkK
KyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50
ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsKKyAgICBqaXQuc3RvcmUzMihieXRl
Y29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSk7CisKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGFyZ3VtZW50R1BSMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhhcmd1bWVu
dEdQUjMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7
CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhhcmd1bWVudEdQUjMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBhcmd1bWVudEdQUjEpOworICAgIGppdC5hZGRQ
dHIoYnl0ZWNvZGVPZmZzZXRSZWcsIGFyZ3VtZW50R1BSMSk7CisKKyAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24odm0pOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBleGNlcHRpb25D
aGVjayA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2sodm0pOworCisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQu
cG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAg
IGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRGcm9t
U2NvcGUpKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHVi
KHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IsIE5vTG9j
a2luZ05lY2Vzc2FyeSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29k
ZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGlu
ZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewpAQCAt
MTMyNSw5ICsxODcxLDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CiAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
dGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKKyNlbHNlCisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Cisg
ICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisK
KyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BS
MjsKKyAgICAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0UmVnKTsKKworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5qaXRTdHVicy0+
ZXhpc3RpbmdDVElTdHViKHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yLCBOb0xvY2tpbmdO
ZWNlc3NhcnkpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZW5kaWYKKyAgICB9Cit9CisK
KyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihWTSYgdm0pCit7
CisgICAgSklUIGppdCh2bSk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOworICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVy
KTsKKyNlbmRpZgorCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFy
Z3VtZW50R1BSMjsKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGFyZ3VtZW50R1BSMyk7
CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhhcmd1bWVudEdQUjMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhhcmd1bWVudEdQUjMsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVy
KCkpLCBhcmd1bWVudEdQUjEpOworICAgIGppdC5hZGRQdHIoYnl0ZWNvZGVPZmZzZXRSZWcsIGFy
Z3VtZW50R1BSMSk7CisKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIEND
YWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0RXhjZXB0aW9u
Q2hlY2sodm0pOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6
ZWJwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdp
c3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIGppdC5yZXQoKTsKKworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25QdXRUb1Njb3BlKSk7CisgICAgYXV0byBoYW5kbGVy
ID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5k
SGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcHV0X3RvX3Njb3BlIik7
CiB9CisjZW5kaWYKIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCShyZXZpc2lvbiAyNzczODQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCisj
aW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCkBAIC0yNjQsMTEgKzI2NSwx
MiBAQCB2b2lkIEpJVFRodW5rczo6cHJlaW5pdGlhbGl6ZUV4dHJhQ1RJVGh1CiAgICAgaWYgKCFP
cHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhlc2UgMyBzaG91
bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIGZpcnN0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgYmVj
YXVzZQorICAgIC8vIFRoZXNlIHNob3VsZCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgZmlyc3QgaW4g
dGhlIGZvbGxvd2luZyBvcmRlciBiZWNhdXNlCiAgICAgLy8gdGhlIG90aGVyIHRodW5rIGdlbmVy
YXRvcnMgcmVseSBvbiB0aGVzZSBhbHJlYWR5IGJlaW5nIGluaXRpYWxpemVkLgogICAgIGN0aVN0
dWIodm0sIGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAgY3RpU3R1Yih2bSwgaGFuZGxl
RXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKTsKICAgICBjdGlTdHViKHZt
LCBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKyAg
ICBjdGlTdHViKHZtLCBjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcik7CiAKICNkZWZpbmUgSU5JVF9C
QVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKG5hbWUpIGN0aVNsb3dQYXRoRnVuY3Rpb25T
dHViKHZtLCBzbG93X3BhdGhfIyNuYW1lKQogCkBAIC0zNDYsNyArMzQ4LDIwIEBAIHZvaWQgSklU
VGh1bmtzOjpwcmVpbml0aWFsaXplRXh0cmFDVElUaHUKICAgICBJTklUX0JBU0VMSU5FX1NMT1df
UEFUSF9DQUxMX1JPVVRJTkUocmVzb2x2ZV9zY29wZSk7CiAgICAgSU5JVF9CQVNFTElORV9TTE9X
X1BBVEhfQ0FMTF9ST1VUSU5FKGNoZWNrX3Rkeik7CiAgICAgSU5JVF9CQVNFTElORV9TTE9XX1BB
VEhfQ0FMTF9ST1VUSU5FKHRvX3Byb3BlcnR5X2tleSk7CisKKyAgICBJTklUX0JBU0VMSU5FX1NM
T1dfUEFUSF9DQUxMX1JPVVRJTkUodGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlf
d3JpdGVfZXJyb3IpOwogI3VuZGVmIElOSVRfQkFTRUxJTkVfUk9VVElORQorCisgICAgLy8gRnJv
bSB0aGUgQmFzZWxpbmVKSVQgREVGSU5FX1NMT1dDQVNFX09QIGxpc3Q6CisgICAgY3RpU3R1Yih2
bSwgSklUOjpzbG93X29wX2RlbF9ieV94eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOworICAgIGN0
aVN0dWIodm0sIEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwor
ICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcik7CisgICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX2dldF9m
cm9tX3Njb3BlR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3Bf
cHV0X3RvX3Njb3BlR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0
X3h4eF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik7CisgICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29w
X3h4eF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1Nsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAyNzczODQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgdm9pZCBKSVRTbG93UGF0aENhbGw6OmNhbGwoKQogewogICAgIFZNJiB2bSA9IG1faml0LT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9qaXQtPm1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKLSAgICBBU1NFUlQoKGJ5dGVjb2RlT2Zmc2V0IDw8IEJ5dGVjb2RlSW5kZXg6
OmNoZWNrcG9pbnRTaGlmdCkgPT0gbV9qaXQtPm1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Cisg
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1faml0LT5tX2J5dGVj
b2RlSW5kZXgpOwogCiAgICAgVU5VU0VEX1ZBUklBQkxFKG1fcGMpOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lv
biAyNzczODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDQ2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gcG8KICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0
aW9uIik7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVz
ZUV4Y2VwdGlvbkZ1enooKSkpIHsKKyAgICAgICAgLy8gRXhjZXB0aW9uIGZ1enppbmcgY2FuIGNh
bGwgYSBydW50aW1lIGZ1bmN0aW9uLiBTbywgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgcmV0dXJu
IGFkZHJlc3MgaGVyZS4KKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQucHVzaChYODZSZWdp
c3RlcnM6OmVicCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIGppdC5wdXNoUGFpcihDQ2Fs
bEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rl
cik7CisjZW5kaWYKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGFuZGxlRXhjZXB0
aW9uID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CisKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKSkgeworI2lmIENQVShYODZfNjQp
CisgICAgICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOworI2VsaWYgQ1BVKEFSTTY0KQor
ICAgICAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBD
Q2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICB9CisgICAgaml0LnJldCgp
OworCisgICAgYXV0byBoYW5kbGVyR2VuZXJhdG9yID0gT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6
eigpID8gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciA6
IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcjsKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmICghT3B0
aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKSB7CisgICAgICAgIGhhbmRsZUV4Y2VwdGlvbi5saW5r
KCZqaXQpOworICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNp
emVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7IC8vIHBvcCByZXR1cm4gYWRk
cmVzcy4KKyAgICAgICAgaGFuZGxlRXhjZXB0aW9uID0gaml0Lmp1bXAoKTsKKyAgICB9CisjZW5k
aWYKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZUV4
Y2VwdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwodm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yiho
YW5kbGVyR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIkNoZWNrRXhjZXB0aW9uIik7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAogdGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMjc3Mzg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNSArNzgsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiByYQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cnVuY1RodW5rR2Vu
ZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91
bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mKTsKLX0KKworI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcihWTSYpOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIEpTQwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCg==
</data>
<flag name="commit-queue"
          id="449520"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428595</attachid>
            <date>2021-05-13 20:48:51 -0700</date>
            <delta_ts>2021-05-13 20:49:52 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-225771.patch</filename>
            <type>text/plain</type>
            <size>52456</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBA
CisyMDIxLTA1LTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bXBsZW1lbnQgQmFzZWxpbmUgSklUIHByb3BlcnR5IGFjY2VzcyBzbG93IHBhdGhzIHVzaW5nIEpJ
VCB0aHVua3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjU3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFwcGxpZXMgdGhlIGZvbGxvd2luZyBzdHJhdGVneSB0byBCYXNlbGluZSBK
SVQgcHJvcGVydHkgYWNjZXNzIHNsb3cgcGF0aHM6CisKKyAgICAgICAgMS4gSWYgdGhlIHNsb3cg
cGF0aCBvcGVyYXRpb24gY2FsbCBpcyBub3QgcGF0Y2hhYmxlLCBlbWl0IGEgbmVhciBjYWxsIHRv
IGEgSklUCisgICAgICAgICAgIHRodW5rIHRvIGRvIHRoZSBlbnRpcmUgb3BlcmF0aW9uIGNhbGwu
CisKKyAgICAgICAgMi4gSWYgdGhlIHNsb3cgcGF0aCBvcGVyYXRpb24gY2FsbCBpcyBwYXRhY2hh
YmxlLCBlbWl0IGEgbmVhciBjYWxsIHRvIGEgcHJlcGFyZQorICAgICAgICAgICBjYWxsIEpJVCB0
aHVuayBiZWZvcmUgdGhlIHBhdGNoYWJsZSBvcGVyYXRpb24gY2FsbCwgYW5kIGEgbmVhciBjYWxs
IHRvIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICBjaGVjayBKSVQgdGh1bmsgYWZ0ZXIuCisKKyAg
ICAgICAgVGhpcyBzdHJhdGVneSByZWR1Y2VzIHRoZSBhbW91bnQgb2YgaW5zdHJ1Y3Rpb25zIGVt
aXR0ZWQgZm9yIGFsbCB0aGUgc2xvdyBwYXRocy4KKyAgICAgICAgUGVyZm9ybWFuY2UgaXMgZXhw
ZWN0ZWQgdG8gYmUgbmV1dHJhbCBvciBzbGlnaHRseSBpbXByb3ZlZCBkdWUgdG8gdGhlIHJlZHVj
ZWQKKyAgICAgICAgY29tcGlsZSB0aW1lcyBhbmQgYmV0dGVyIGNhY2hlIGxvY2FsaXR5LgorCisg
ICAgICAgIFdpdGggdGhpcyBwYXRjaCwgLS1kdW1wTGlua0J1ZmZlclN0YXRzIHNob3dzIHRoZSBm
b2xsb3dpbmcgY2hhbmdlcyBpbiBlbWl0dGVkCisgICAgICAgIEpJVCBjb2RlIHNpemUgKHVzaW5n
IGEgc2luZ2xlIHJ1biBvZiB0aGUgQ0xJIHZlcnNpb24gb2YgSmV0U3RyZWFtMiBvbiBBUyBNYWMp
CisgICAgICAgIGNvbXBhcmluZyB0byBjdXJyZW50IHRpcCBvZiB0cmVlOgorCisgICAgICAgICAg
ICAgICAgICAgICAgICBCYXNlICAgICAgICAgICAgICAgICAgICAgTmV3ICAgICAgICAgICAgICAg
ICAgICAgIERpZmYKKworICAgICAgICAgICBCYXNlbGluZUpJVDogODQ2MjQ3NzYgKDgwLjcwNDQ3
NSBNQikgIDc3NDI5NDAwICg3My44NDI0MzAgTUIpICAwLjkxeCAocmVkdWN0aW9uKQorICAgICAg
ICAgICAgICAgICAgIERGRzogMzY0MTUyNjQgKDM0LjcyODMwMiBNQikgIDM2MTYwODgwICgzNC40
ODU3MDMgTUIpICAwLjk5eAorICAgICAgICAgICAgICAgICBUaHVuazogMjMxMzAzMzYgKDIyLjA1
ODgwNyBNQikgIDIzMTU5MDI0ICgyMi4wODYxNjYgTUIpICAxLjAweAorICAgICAgICAgICBJbmxp
bmVDYWNoZTogMjE5Njk3MjggKDIwLjk1MTk2NSBNQikgIDIyMDY4MzQ4ICgyMS4wNDYwMTcgTUIp
ICAxLjAweAorICAgICAgICAgICAgICAgICAgIEZUTDogNjA5NzMzNiAoNS44MTQ4NzMgTUIpICAg
IDYwMDQ3MzYgKDUuNzI2NTYyIE1CKSAgICAwLjk4eAorICAgICAgICAgICAgICAgICAgV2FzbTog
MjMwMTk1NiAoMi4xOTUzMTYgTUIpICAgIDI0MjkyMDQgKDIuMzE2NjY5IE1CKSAgICAxLjA2eCAo
cHJvYmFibHkgbm9pc2UpCisgICAgICAgICAgICAgICBZYXJySklUOiAxNTIyNDg4ICgxLjQ1MTk1
OCBNQikgICAgMTUyMjQ4OCAoMS40NTE5NTggTUIpICAgIDEuMDB4CisgICAgICAgICAgICAgICAg
Q1NTSklUOiAwCisgICAgICAgICBVbmNhdGVnb3JpemVkOiAwCisKKyAgICAgICAgQ29tcGFyaW5n
IHRvIHRpcCBvZiB0cmVlIGF0IHRoZSBzdGFydCBvZiB0aGlzIGVmZm9ydCB0byBtb3ZlIHB1dCBz
bG93IHBhdGhzIGluCisgICAgICAgIEpJVCB0aHVua3M6CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEJhc2UgICAgICAgICAgICAgICAgICAgICBOZXcgICAgICAgICAgICAgICAgICAgICAgRGlm
ZgorCisgICAgICAgICAgIEJhc2VsaW5lSklUOiA4OTA4OTk2NCAoODQuOTYyODExIE1CKSAgNzc0
Mjk0MDAgKDczLjg0MjQzMCBNQikgIDAuODd4IChyZWR1Y3Rpb24pCisgICAgICAgICAgICAgICAg
ICAgREZHOiAzOTExNzM2MCAoMzcuMzA1MjIyIE1CKSAgMzYxNjA4ODAgKDM0LjQ4NTcwMyBNQikg
IDAuOTJ4IChyZWR1Y3Rpb24pCisgICAgICAgICAgICAgICAgIFRodW5rOiAyMzIzMDk2OCAoMjIu
MTU0Nzc4IE1CKSAgMjMxNTkwMjQgKDIyLjA4NjE2NiBNQikgIDEuMDB4CisgICAgICAgICAgIElu
bGluZUNhY2hlOiAyMjAyNzQxNiAoMjEuMDA2OTgxIE1CKSAgMjIwNjgzNDggKDIxLjA0NjAxNyBN
QikgIDEuMDB4CisgICAgICAgICAgICAgICAgICAgRlRMOiA2NTc1NzcyICg2LjI3MTE0NSBNQikg
ICAgNjAwNDczNiAoNS43MjY1NjIgTUIpICAgIDAuOTF4IChyZWR1Y3Rpb24pCisgICAgICAgICAg
ICAgICAgICBXYXNtOiAyMzAyNzI0ICgyLjE5NjA0OSBNQikgICAgMjQyOTIwNCAoMi4zMTY2Njkg
TUIpICAgIDEuMDV4IChwcm9iYWJseSBub2lzZSkKKyAgICAgICAgICAgICAgIFlhcnJKSVQ6IDE1
Mzg5NTYgKDEuNDY3NjYzIE1CKSAgICAxNTIyNDg4ICgxLjQ1MTk1OCBNQikgICAgMC45OXgKKyAg
ICAgICAgICAgICAgICBDU1NKSVQ6IDAgICAgICAgICAgICAgICAgICAgICAgICAwCisgICAgICAg
ICBVbmNhdGVnb3JpemVkOiAwICAgICAgICAgICAgICAgICAgICAgICAgMAorCisgICAgICAgIFRo
aXMgcGF0Y2ggaGFzIHBhc3NlZCB0aGUgSlNDIHRlc3RzIG9uIEFTIE1hYywgYW5kIGFsc28gYSBz
dWJzZXQgb2YgdGhlIEpTQyB0ZXN0cworICAgICAgICAoYXMgYSBzbW9rZSB0ZXN0KSBvbiB4ODZf
NjQuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1
enopOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlv
bkNoZWNrKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfeHh4X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJh
bmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3h4eF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X2RlbF9ieV94eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpz
bG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3Rv
X3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUVGh1bmtzOjpwcmVpbml0aWFsaXplRXh0cmFDVElUaHVua3MpOgorICAgICAgICAq
IGppdC9TbG93UGF0aENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVRTbG93UGF0aENhbGw6OmNh
bGwpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5o
OgorCiAyMDIxLTA1LTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW1vdmUgU3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVyCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzczODQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYwMiw2ICs2MDIsOCBAQCBwdWJsaWM6CiAgICAgSGVhcCogaGVhcCgpIGNvbnN0IHsgcmV0dXJu
ICZtX3ZtLT5oZWFwOyB9CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsgcmV0
dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9n
bG9iYWxPYmplY3QpOyB9CisKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Rm9yKENv
ZGVPcmlnaW4pOwogCiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5
c2lzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHJldmlzaW9uIDI3NzM4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDggKzIzMyw3IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpqaXRSZWxlYXNlQXNzZXJ0Tm8KIAogdm9pZCBBc3NlbWJseUhlbHBl
cnM6OmNhbGxFeGNlcHRpb25GdXp6KFZNJiB2bSkKIHsKLSAgICBpZiAoIU9wdGlvbnM6OnVzZUV4
Y2VwdGlvbkZ1enooKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlv
bnM6OnVzZUV4Y2VwdGlvbkZ1enooKSk7CiAKICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0g
dm0uZXhjZXB0aW9uRnV6emluZ0J1ZmZlcihzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpKTsKIApA
QCAtMjc2LDcgKzI3NSw4IEBAIEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6
OmUKIAogQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlv
bkNoZWNrKFZNJiB2bSwgRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0
aCB3aWR0aCkKIHsKLSAgICBjYWxsRXhjZXB0aW9uRnV6eih2bSk7CisgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSkpCisgICAgICAgIGNhbGxFeGNlcHRpb25GdXp6
KHZtKTsKIAogICAgIGlmICh3aWR0aCA9PSBGYXJKdW1wV2lkdGgpCiAgICAgICAgIGtpbmQgPSAo
a2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgOiBO
b3JtYWxFeGNlcHRpb25DaGVjayk7CkBAIC0yOTksNyArMjk5LDggQEAgQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZQogCiBBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1i
bHlIZWxwZXJzOjplbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2soVk0mIHZtKQogewotICAg
IGNhbGxFeGNlcHRpb25GdXp6KHZtKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNlRXhj
ZXB0aW9uRnV6eigpKSkKKyAgICAgICAgY2FsbEV4Y2VwdGlvbkZ1enoodm0pOwogCiAgICAgSnVt
cCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjc3Mzg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRTdHViQ2FsbDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKIAogICAgICAg
ICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0OwpAQCAtNzc0LDYgKzc3NSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKKyNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKKyAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxf
YnlfeHh4X3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihWTSYpOworICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29w
X3B1dF94eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF94eHhfcHJpdmF0ZV9uYW1l
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CisjZW5kaWYKKwogICAgICAgICBKdW1wIGdldFNs
b3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjc3Mzg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJEaXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgpAQCAt
OTQsMTEgKzk1LDY2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkK
ICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlW
YWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworCisjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQorICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyNlbHNlCisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CisgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQUjQ7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRSZWcpOworCisgICAgICAgIC8vIEFSTTY0OiBh
cmd1bWVudEdQUjAgYW1kIGFyZ3VtZW50R1BSMSBhbHJlYWR5IHRha2VuIGJ5IGluY29taW5nIHJl
Z1QwIGFuZCByZWdUMS4KKyAgICAgICAgLy8gWDg2XzY0OiBhcmd1bWVudEdQUjEgYWxyZWFkeSB0
YWtlbiBieSBpbmNvbWluZyByZWdUMS4KKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgYXJndW1lbnRHUFIzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHBy
b2ZpbGUpLCBhcmd1bWVudEdQUjIpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KIH0KIAorI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0p
Cit7CisgICAgSklUIGppdCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSNDsKKyAg
ICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICAvLyBhcmcyIGFscmVhZHkgaGFzIHBy
b2ZpbGUuCisgICAgLy8gYXJnNCBub3cgc2V0IHRvIHJlZ1QxIChhcmd1bWVudEdQUjEgb24gQVJN
NjQgJiBYODZfNjQpLiBhcmd1bWVudEdQUjEgaXMgbm93IGZyZWUuCisgICAgaml0Lm1vdmUoYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjQpOworICAgIC8vIGFyZzEgaXMgbm93IHNldCB0byBzdHVi
SW5mby4gYXJndW1lbnRHUFIzIGlzIG5vdyBmcmVlLgorICAgIGppdC5tb3ZlKGFyZ3VtZW50R1BS
MywgYXJndW1lbnRHUFIxKTsKKyAgICAvLyBhcmczIGlzIG5vdyBzZXQgdG8gcmVnVDAuCisgICAg
Ly8gLSBBUk02NDogcmVnVDAgaXMgYXJndW1lbnRHUFIwOiBhcmd1bWVudEdQUjAgaXMgbm93IGZy
ZWUuCisgICAgLy8gLSBYODZfNjQ6IHJlZ1QwIGlzIG5vdCBhbiBhcmd1bWVudCBHUFIuIFNvLCBk
b24ndCBjYXJlLgorICAgIGppdC5tb3ZlKHJlZ1QwLCBhcmd1bWVudEdQUjMpOworICAgIC8vIGFy
ZzAgaXMgbm93IHNldCB0byBnbG9iYWxPYmplY3QuCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjApOworICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoYXJndW1lbnRHUFIwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBhcmd1bWVudEdQUjApOworCisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsK
KworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19v
cF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsIik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwpAQCAtMTI5LDE5ICsxODUs
NzIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogewogICAgIEFT
U0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisKKyNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisjZWxzZQorICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQUjM7CisgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0UmVnKTsKKworICAgIC8vIEFSTTY0OiBhcmd1
bWVudEdQUjAgYW1kIGFyZ3VtZW50R1BSMSBhbHJlYWR5IHRha2VuIGJ5IGluY29taW5nIHJlZ1Qw
IGFuZCByZWdUMS4KKyAgICAvLyBYODZfNjQ6IGFyZ3VtZW50R1BSMSBhbHJlYWR5IHRha2VuIGJ5
IGluY29taW5nIHJlZ1QxLgorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3h4eF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3h4eF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQoreworICAgIEpJVCBqaXQodm0p
OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQUjM7CisgICAgaml0LnN0b3JlMzIoYnl0ZWNv
ZGVPZmZzZXRSZWcsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOworCisgICAgLy8gYXJnMyBub3cgc2V0IHRvIHJlZ1QxIChhcmd1bWVudEdQUjEgb24g
QVJNNjQgJiBYODZfNjQpLiBhcmd1bWVudEdQUjEgaXMgbm93IGZyZWUuCisgICAgaml0Lm1vdmUo
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjMpOworICAgIC8vIGFyZzEgaXMgbm93IHNldCB0byBz
dHViSW5mby4gYXJndW1lbnRHUFIyIGlzIG5vdyBmcmVlLgorICAgIGppdC5tb3ZlKGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIxKTsKKyAgICAvLyBhcmcyIGlzIG5vdyBzZXQgdG8gcmVnVDAuCisg
ICAgLy8gLSBBUk02NDogcmVnVDAgaXMgYXJndW1lbnRHUFIwOiBhcmd1bWVudEdQUjAgaXMgbm93
IGZyZWUuCisgICAgLy8gLSBYODZfNjQ6IHJlZ1QwIGlzIG5vdCBhbiBhcmd1bWVudCBHUFIuIFNv
LCBkb24ndCBjYXJlLgorICAgIGppdC5tb3ZlKHJlZ1QwLCBhcmd1bWVudEdQUjIpOworICAgIC8v
IGFyZzAgaXMgbm93IHNldCB0byBnbG9iYWxPYmplY3QuCisgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjApOworICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MoYXJndW1lbnRHUFIwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBhcmd1bWVudEdQUjApOworCisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZt
KTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3df
b3BfeHh4X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbCIpOworfQorI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwpAQCAtMTcw
LDE1ICsyNzksMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0KICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJh
dG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5k
ZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKKworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJy
YW5kR1BSID0gcmVnVDE7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworI2Vsc2UKKyAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIzOworICAgIG1vdmUoSklUOjpUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldFJlZyk7CisKKyAgICAvLyBB
Uk02NDogYXJndW1lbnRHUFIwIGFtZCBhcmd1bWVudEdQUjEgYWxyZWFkeSB0YWtlbiBieSBpbmNv
bWluZyByZWdUMCBhbmQgcmVnVDEuCisgICAgLy8gWDg2XzY0OiBhcmd1bWVudEdQUjEgYWxyZWFk
eSB0YWtlbiBieSBpbmNvbWluZyByZWdUMS4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF94eHhfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKyNlbmRpZgogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CiAKQEAgLTIwMywxNSArMzI5LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNr
X3ByaXZhdGVfYnJhbmQoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVf
YnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5k
R1BSID0gcmVnVDE7Ci0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJp
dmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21f
cHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRl
eDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKworI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CiAgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBicmFuZEdQUik7CisjZWxzZQorICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4
KTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQ
UjM7CisgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0UmVnKTsKKworICAgIC8vIEFSTTY0OiBhcmd1bWVudEdQUjAgYW1kIGFyZ3VtZW50R1BS
MSBhbHJlYWR5IHRha2VuIGJ5IGluY29taW5nIHJlZ1QwIGFuZCByZWdUMS4KKyAgICAvLyBYODZf
NjQ6IGFyZ3VtZW50R1BSMSBhbHJlYWR5IHRha2VuIGJ5IGluY29taW5nIHJlZ1QxLgorICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIGFyZ3VtZW50R1BSMik7CisgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3h4eF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCkBAIC00MzcsMTYgKzU4MSw1NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMiwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOworI2Vs
c2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIwOworICAgIG1vdmUoSklU
OjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldFJlZyk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihieVZhbEluZm8pLCBhcmd1bWVudEdQUjQpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGVjbWFN
b2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjUpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9wdXRfeHh4X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOworCisgICAgYXV0byogb3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsK
KyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRo
VGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CiAgICAgbV9ieVZhbEluc3RydWN0
aW9uSW5kZXgrKzsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3h4eF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7CisKKyAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJl
ZyA9IGFyZ3VtZW50R1BSMDsKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldFJlZywgdGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICBq
aXQubG9hZFB0cihKSVQ6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgSklU
Ojphcmd1bWVudEdQUjApOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhhcmd1bWVudEdQ
UjAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIEpJVDo6YXJndW1lbnRHUFIw
KTsKKworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LnJldCgpOwor
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3B1dF94eHhfcHJlcGFyZUNh
bGwiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0UHJpdmF0ZU5hbWU+KCk7CkBAIC00NzYsMTQgKzY2MSwzMyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHJlZ1QyOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFs
dWUoKSkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIwOwor
ICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dFJlZyk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8p
LCBhcmd1bWVudEdQUjQpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSks
IGFyZ3VtZW50R1BSNSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3B1dF94eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblB1dFByaXZhdGVOYW1l
T3B0aW1pemUpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3Mg
PSBjYWxsOwpAQCAtNTc4LDE0ICs3ODIsNjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbgogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKKyNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisjZWxzZQorICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRSZWcgPSBhcmd1bWVudEdQUjA7CisgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldFJlZyk7CisKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIGFyZ3VtZW50R1BSMyk7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFI0
KTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlf
eHh4X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisg
ICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgc3RhdGljX2Fzc2VydChyZXR1cm5W
YWx1ZUdQUiA9PSByZWdUMCk7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKIH0KIAorI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfZGVsX2J5X3h4eF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAg
SklUIGppdCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMDsKKyAgICBqaXQuc3Rv
cmUzMihieXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICAvLyBhcmc0IGFscmVhZHkgaGFzIGVjbWFNb2RlLgor
ICAgIC8vIGFyZzMgYWxyZWFkeSBoYXMgQ2FjaGVhYmxlSWRlbnRpZmllciAvIHByb3BlcnR5Lgor
ICAgIC8vIGFyZzIgYWxyZWFkeSBoYXMgYmFzZS4KKyAgICAvLyBhcmcxIGFscmVhZHkgaGFzIHN0
dWJJbmZvLgorICAgIC8vIGFyZzAgaXMgbm93IHNldCB0byBnbG9iYWxPYmplY3QuCisgICAgaml0
LmxvYWRQdHIoSklUOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIEpJVDo6
YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYXJndW1lbnRHUFIw
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBKSVQ6OmFyZ3VtZW50R1BSMCk7
CisKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGppdC5yZXQoKTsKKwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNh
bGwiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlW
YWw+KCk7CkBAIC02MjcsOSArODc4LDMwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEkKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCisjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
ICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIwOwor
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRSZWcp
OworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjQp
OworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV94
eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgc3RhdGljX2Fzc2VydChyZXR1cm5W
YWx1ZUdQUiA9PSByZWdUMCk7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKQEAgLTY3Miw4ICs5NDQsMjgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKLSAgICAKKyNlbHNlCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwor
CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsK
KyAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRSZWcpOworCisgICAgLy8gQVJNNjQ6IGFyZ3VtZW50R1BSMCBhbHJlYWR5IHRha2VuIGJ5IGlu
Y29taW5nIHJlZ1QwLgorICAgIC8vIFg4Nl82NDogcmVnVDAgaXMgbm90IGFuIGFyZ3VtZW50IEdQ
Ui4gU28sIGRvbid0IGNhcmUuCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgYXJndW1lbnRHUFIxKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC03MDYsNiArOTk4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCkBAIC03MTMsNyArMTAwNiwy
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAg
IFJFTEVBU0VfQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJn
dW1lbnRHUFIyOworICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldFJlZyk7CisKKyAgICAvLyBBUk02NDogYXJndW1lbnRHUFIwIGFscmVhZHkg
dGFrZW4gYnkgaW5jb21pbmcgcmVnVDAuCisgICAgLy8gWDg2XzY0OiByZWdUMCBpcyBub3QgYW4g
YXJndW1lbnQgR1BSLiBTbywgZG9uJ3QgY2FyZS4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBhcmd1bWVudEdQUjEpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgQ2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOworICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzgw
LDYgKzEwOTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKQEAgLTc4NywxNiAr
MTEwMiw2NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyNlbHNlCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3Vt
ZW50R1BSMjsKKyAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRSZWcpOworCisgICAgLy8gQVJNNjQ6IGFyZ3VtZW50R1BSMCBhbHJlYWR5IHRh
a2VuIGJ5IGluY29taW5nIHJlZ1QwLgorICAgIC8vIFg4Nl82NDogcmVnVDAgaXMgbm90IGFuIGFy
Z3VtZW50IEdQUi4gU28sIGRvbid0IGNhcmUuCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgYXJndW1lbnRHUFIxKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOworI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAorI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAg
ICBKSVQgaml0KHZtKTsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIyOworICAgIGppdC5z
dG9yZTMyKGJ5dGVjb2RlT2Zmc2V0UmVnLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKKworICAgIC8vIGFyZzMgYWxyZWFkeSBoYXMgQ2FjaGVhYmxl
SWRlbnRpZmllci4KKyAgICAvLyBhcmcyIGlzIG5vdyBzZXQgdG8gcmVnVDAuCisgICAgLy8gLSBB
Uk02NDogcmVnVDAgaXMgYXJndW1lbnRHUFIwOiBhcmd1bWVudEdQUjAgaXMgbm93IGZyZWUuCisg
ICAgLy8gLSBYODZfNjQ6IHJlZ1QwIGlzIG5vdCBhbiBhcmd1bWVudCBHUFIuIFNvLCBkb24ndCBj
YXJlLgorICAgIGppdC5tb3ZlKHJlZ1QwLCBhcmd1bWVudEdQUjIpOworICAgIC8vIGFyZzEgYWxy
ZWFkeSBoYXMgc3R1YkluZm8uCisgICAgLy8gYXJnMCBpcyBub3cgc2V0IHRvIGdsb2JhbE9iamVj
dC4KKyAgICBqaXQubG9hZFB0cihKSVQ6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgSklUOjphcmd1bWVudEdQUjApOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhh
cmd1bWVudEdQUjAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIEpJVDo6YXJn
dW1lbnRHUFIwKTsKKworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0
LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbCIpOworfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKQEAgLTgwNCwxMSArMTE2OSw2NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyNlbHNlCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgp
OworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BS
MzsKKyAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRSZWcpOworCisgICAgLy8gQVJNNjQ6IGFyZ3VtZW50R1BSMCBhbWQgYXJndW1lbnRHUFIx
IGFscmVhZHkgdGFrZW4gYnkgaW5jb21pbmcgcmVnVDAgYW5kIHJlZ1QxLgorICAgIC8vIFg4Nl82
NDogYXJndW1lbnRHUFIxIGFscmVhZHkgdGFrZW4gYnkgaW5jb21pbmcgcmVnVDEuCisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBhcmd1bWVu
dEdQUjQpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOworI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGpp
dCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMzsKKyAgICBqaXQuc3RvcmUzMihi
eXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7CisKKyAgICAvLyBhcmc0IGFscmVhZHkgaGFzIENhY2hlYWJsZUlkZW50aWZp
ZXIuCisgICAgLy8gYXJnMyBpcyBub3cgc2V0IHRvIHJlZ1QxLgorICAgIC8vIC0gQVJNNjQgJiBY
ODZfNjQ6IHJlZ1QxIGlzIGFyZ3VtZW50R1BSMTogYXJndW1lbnRHUFIxIGlzIG5vdyBmcmVlLgor
ICAgIGppdC5tb3ZlKHJlZ1QxLCBhcmd1bWVudEdQUjMpOworICAgIC8vIGFyZzEgaXMgbm93IHNl
dCB0byBzdHViSW5mby4gYXJndW1lbnRHUFIyIGlzIG5vdyBmcmVlLgorICAgIGppdC5tb3ZlKGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIxKTsKKyAgICAvLyBhcmcyIGlzIG5vdyByZWdUMC4KKyAg
ICAvLyAtIEFSTTY0OiByZWdUMCBpcyBhcmd1bWVudEdQUjA6IGFyZ3VtZW50R1BSMCBpcyBub3cg
ZnJlZS4KKyAgICAvLyAtIFg4Nl82NDogcmVnVDAgaXMgbm90IGFuIGFyZ3VtZW50IEdQUi4gU28s
IGRvbid0IGNhcmUuCisgICAgaml0Lm1vdmUocmVnVDAsIGFyZ3VtZW50R1BSMik7CisgICAgLy8g
YXJnMCBpcyBub3cgc2V0IHRvIGdsb2JhbE9iamVjdC4KKyAgICBqaXQubG9hZFB0cihKSVQ6OmFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgSklUOjphcmd1bWVudEdQUjApOwor
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhhcmd1bWVudEdQUjAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIEpJVDo6YXJndW1lbnRHUFIwKTsKKworICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGwiKTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwpA
QCAtODUyLDExICsxMjcwLDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW4KICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21f
cHV0QnlJZEluZGV4KytdOwogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEs
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyNlbHNlCisgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVj
b2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworCisgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsKKyAgICBtb3ZlKEpJVDo6VHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRSZWcpOworCisgICAgLy8gQVJNNjQ6
IGFyZ3VtZW50R1BSMCBhbWQgYXJndW1lbnRHUFIxIGFscmVhZHkgdGFrZW4gYnkgaW5jb21pbmcg
cmVnVDAgYW5kIHJlZ1QxLgorICAgIC8vIFg4Nl82NDogYXJndW1lbnRHUFIxIGFscmVhZHkgdGFr
ZW4gYnkgaW5jb21pbmcgcmVnVDEuCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBhcmd1bWVudEdQUjQpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwo
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGpp
dCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsKKyAgICBqaXQuc3RvcmUzMihi
eXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7CisKKyAgICAvLyBhcmc0IGFscmVhZHkgaGFzIENhY2hlYWJsZUlkZW50aWZp
ZXIuCisgICAgLy8gYXJnMiBpcyBub3cgc2V0IHRvIHJlZ1QxLgorICAgIC8vIC0gQVJNNjQgJiBY
ODZfNjQ6IHJlZ1QxIGlzIGFyZ3VtZW50R1BSMTogYXJndW1lbnRHUFIxIGlzIG5vdyBmcmVlLgor
ICAgIGppdC5tb3ZlKHJlZ1QxLCBhcmd1bWVudEdQUjIpOworICAgIC8vIGFyZzEgaXMgbm93IHNl
dCB0byBzdHViSW5mby4gYXJndW1lbnRHUFIzIGlzIG5vdyBmcmVlLgorICAgIGppdC5tb3ZlKGFy
Z3VtZW50R1BSMywgYXJndW1lbnRHUFIxKTsKKyAgICAvLyBhcmczIGlzIG5vdyByZWdUMC4KKyAg
ICAvLyAtIEFSTTY0OiByZWdUMCBpcyBhcmd1bWVudEdQUjA6IGFyZ3VtZW50R1BSMCBpcyBub3cg
ZnJlZS4KKyAgICAvLyAtIFg4Nl82NDogcmVnVDAgaXMgbm90IGFuIGFyZ3VtZW50IEdQUi4gU28s
IGRvbid0IGNhcmUuCisgICAgaml0Lm1vdmUocmVnVDAsIGFyZ3VtZW50R1BSMyk7CisgICAgLy8g
YXJnMCBpcyBub3cgc2V0IHRvIGdsb2JhbE9iamVjdC4KKyAgICBqaXQubG9hZFB0cihKSVQ6OmFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgSklUOjphcmd1bWVudEdQUjApOwor
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhhcmd1bWVudEdQUjAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIEpJVDo6YXJndW1lbnRHUFIwKTsKKworICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkJhc2VsaW5lOiBzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbCIpOworfQorI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwpAQCAtODkwLDcgKzEz
NTgsMjkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNTRVJU
KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gYXJndW1lbnRHUFIyOworICAg
IG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldFJl
Zyk7CisKKyAgICAvLyBBUk02NDogYXJndW1lbnRHUFIwIGFscmVhZHkgdGFrZW4gYnkgaW5jb21p
bmcgcmVnVDAuCisgICAgLy8gWDg2XzY0OiByZWdUMCBpcyBub3QgYW4gYXJndW1lbnQgR1BSLiBT
bywgZG9uJ3QgY2FyZS4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBh
cmd1bWVudEdQUjEpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgYXJndW1lbnRHUFIzKTsKKyAgICAvLyBzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgorICAgIC8v
IFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3Qg
dG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgorICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CisjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtMTE2NCw5ICsxNjU0LDY1IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBv
cGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsK
KyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0UmVn
KTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorfQorCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9z
Y29wZUdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7CisKKyNpZiBDUFUoWDg2
XzY0KQorICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQVShBUk02NCkK
KyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50
ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BSMjsKKyAgICBqaXQuc3RvcmUzMihieXRl
Y29kZU9mZnNldFJlZywgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSk7CisKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGFyZ3VtZW50R1BSMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhhcmd1bWVu
dEdQUjMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7
CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhhcmd1bWVudEdQUjMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBhcmd1bWVudEdQUjEpOworICAgIGppdC5hZGRQ
dHIoYnl0ZWNvZGVPZmZzZXRSZWcsIGFyZ3VtZW50R1BSMSk7CisKKyAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24odm0pOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBleGNlcHRpb25D
aGVjayA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2sodm0pOworCisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQu
cG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAg
IGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRGcm9t
U2NvcGUpKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHVi
KHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IsIE5vTG9j
a2luZ05lY2Vzc2FyeSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29k
ZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGlu
ZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewpAQCAt
MTMyNSw5ICsxODcxLDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CiAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
dGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKKyNlbHNlCisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Cisg
ICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisK
KyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFyZ3VtZW50R1BS
MjsKKyAgICAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0UmVnKTsKKworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5qaXRTdHVicy0+
ZXhpc3RpbmdDVElTdHViKHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yLCBOb0xvY2tpbmdO
ZWNlc3NhcnkpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZW5kaWYKKyAgICB9Cit9CisK
KyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihWTSYgdm0pCit7
CisgICAgSklUIGppdCh2bSk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOworICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVy
KTsKKyNlbmRpZgorCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IGFy
Z3VtZW50R1BSMjsKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldFJlZywgdGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGFyZ3VtZW50R1BSMyk7
CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhhcmd1bWVudEdQUjMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhhcmd1bWVudEdQUjMsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVy
KCkpLCBhcmd1bWVudEdQUjEpOworICAgIGppdC5hZGRQdHIoYnl0ZWNvZGVPZmZzZXRSZWcsIGFy
Z3VtZW50R1BSMSk7CisKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIEND
YWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0RXhjZXB0aW9u
Q2hlY2sodm0pOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6
ZWJwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdp
c3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIGppdC5yZXQoKTsKKworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25QdXRUb1Njb3BlKSk7CisgICAgYXV0byBoYW5kbGVy
ID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5k
SGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcHV0X3RvX3Njb3BlIik7
CiB9CisjZW5kaWYKIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCShyZXZpc2lvbiAyNzczODQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCisj
aW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCkBAIC0yNjQsMTEgKzI2NSwx
MiBAQCB2b2lkIEpJVFRodW5rczo6cHJlaW5pdGlhbGl6ZUV4dHJhQ1RJVGh1CiAgICAgaWYgKCFP
cHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhlc2UgMyBzaG91
bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIGZpcnN0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgYmVj
YXVzZQorICAgIC8vIFRoZXNlIHNob3VsZCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgZmlyc3QgaW4g
dGhlIGZvbGxvd2luZyBvcmRlciBiZWNhdXNlCiAgICAgLy8gdGhlIG90aGVyIHRodW5rIGdlbmVy
YXRvcnMgcmVseSBvbiB0aGVzZSBhbHJlYWR5IGJlaW5nIGluaXRpYWxpemVkLgogICAgIGN0aVN0
dWIodm0sIGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAgY3RpU3R1Yih2bSwgaGFuZGxl
RXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKTsKICAgICBjdGlTdHViKHZt
LCBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKyAg
ICBjdGlTdHViKHZtLCBjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcik7CiAKICNkZWZpbmUgSU5JVF9C
QVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKG5hbWUpIGN0aVNsb3dQYXRoRnVuY3Rpb25T
dHViKHZtLCBzbG93X3BhdGhfIyNuYW1lKQogCkBAIC0zNDYsNyArMzQ4LDIwIEBAIHZvaWQgSklU
VGh1bmtzOjpwcmVpbml0aWFsaXplRXh0cmFDVElUaHUKICAgICBJTklUX0JBU0VMSU5FX1NMT1df
UEFUSF9DQUxMX1JPVVRJTkUocmVzb2x2ZV9zY29wZSk7CiAgICAgSU5JVF9CQVNFTElORV9TTE9X
X1BBVEhfQ0FMTF9ST1VUSU5FKGNoZWNrX3Rkeik7CiAgICAgSU5JVF9CQVNFTElORV9TTE9XX1BB
VEhfQ0FMTF9ST1VUSU5FKHRvX3Byb3BlcnR5X2tleSk7CisKKyAgICBJTklUX0JBU0VMSU5FX1NM
T1dfUEFUSF9DQUxMX1JPVVRJTkUodGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlf
d3JpdGVfZXJyb3IpOwogI3VuZGVmIElOSVRfQkFTRUxJTkVfUk9VVElORQorCisgICAgLy8gRnJv
bSB0aGUgQmFzZWxpbmVKSVQgREVGSU5FX1NMT1dDQVNFX09QIGxpc3Q6CisgICAgY3RpU3R1Yih2
bSwgSklUOjpzbG93X29wX2RlbF9ieV94eHhfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOworICAgIGN0
aVN0dWIodm0sIEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwor
ICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcik7CisgICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX2dldF9m
cm9tX3Njb3BlR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3Bf
cHV0X3RvX3Njb3BlR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0
X3h4eF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik7CisgICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29w
X3h4eF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1Nsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAyNzczODQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgdm9pZCBKSVRTbG93UGF0aENhbGw6OmNhbGwoKQogewogICAgIFZNJiB2bSA9IG1faml0LT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9qaXQtPm1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKLSAgICBBU1NFUlQoKGJ5dGVjb2RlT2Zmc2V0IDw8IEJ5dGVjb2RlSW5kZXg6
OmNoZWNrcG9pbnRTaGlmdCkgPT0gbV9qaXQtPm1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Cisg
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1faml0LT5tX2J5dGVj
b2RlSW5kZXgpOwogCiAgICAgVU5VU0VEX1ZBUklBQkxFKG1fcGMpOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lv
biAyNzczODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDQ2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gcG8KICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0
aW9uIik7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVz
ZUV4Y2VwdGlvbkZ1enooKSkpIHsKKyAgICAgICAgLy8gRXhjZXB0aW9uIGZ1enppbmcgY2FuIGNh
bGwgYSBydW50aW1lIGZ1bmN0aW9uLiBTbywgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgcmV0dXJu
IGFkZHJlc3MgaGVyZS4KKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQucHVzaChYODZSZWdp
c3RlcnM6OmVicCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIGppdC5wdXNoUGFpcihDQ2Fs
bEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rl
cik7CisjZW5kaWYKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGFuZGxlRXhjZXB0
aW9uID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CisKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKSkgeworI2lmIENQVShYODZfNjQp
CisgICAgICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOworI2VsaWYgQ1BVKEFSTTY0KQor
ICAgICAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBD
Q2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICB9CisgICAgaml0LnJldCgp
OworCisgICAgYXV0byBoYW5kbGVyR2VuZXJhdG9yID0gT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6
eigpID8gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciA6
IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcjsKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmICghT3B0
aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKSB7CisgICAgICAgIGhhbmRsZUV4Y2VwdGlvbi5saW5r
KCZqaXQpOworICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNp
emVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7IC8vIHBvcCByZXR1cm4gYWRk
cmVzcy4KKyAgICAgICAgaGFuZGxlRXhjZXB0aW9uID0gaml0Lmp1bXAoKTsKKyAgICB9CisjZW5k
aWYKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZUV4
Y2VwdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwodm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yiho
YW5kbGVyR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIkNoZWNrRXhjZXB0aW9uIik7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAogdGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMjc3Mzg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNSArNzgsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiByYQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cnVuY1RodW5rR2Vu
ZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91
bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mKTsKLX0KKworI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcihWTSYpOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIEpTQwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428598</attachid>
            <date>2021-05-13 21:02:10 -0700</date>
            <delta_ts>2021-05-14 11:26:58 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-225771.patch</filename>
            <type>text/plain</type>
            <size>63897</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NDc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAyMS0wNS0xMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50IEJhc2VsaW5lIEpJVCBwcm9wZXJ0eSBhY2Nlc3Mgc2xvdyBwYXRocyB1c2luZyBK
SVQgdGh1bmtzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI1NzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhcHBsaWVzIHRoZSBmb2xsb3dpbmcgc3RyYXRlZ3kgdG8gQmFzZWxpbmUg
SklUIHByb3BlcnR5IGFjY2VzcyBzbG93IHBhdGhzOgorCisgICAgICAgIDEuIElmIHRoZSBzbG93
IHBhdGggb3BlcmF0aW9uIGNhbGwgaXMgbm90IHBhdGNoYWJsZSwgZW1pdCBhIG5lYXIgY2FsbCB0
byBhIEpJVAorICAgICAgICAgICB0aHVuayB0byBkbyB0aGUgZW50aXJlIG9wZXJhdGlvbiBjYWxs
LgorCisgICAgICAgIDIuIElmIHRoZSBzbG93IHBhdGggb3BlcmF0aW9uIGNhbGwgaXMgcGF0YWNo
YWJsZSwgZW1pdCBhIG5lYXIgY2FsbCB0byBhIHByZXBhcmUKKyAgICAgICAgICAgY2FsbCBKSVQg
dGh1bmsgYmVmb3JlIHRoZSBwYXRjaGFibGUgb3BlcmF0aW9uIGNhbGwsIGFuZCBhIG5lYXIgY2Fs
bCB0byBhbiBleGNlcHRpb24KKyAgICAgICAgICAgY2hlY2sgSklUIHRodW5rIGFmdGVyLgorCisg
ICAgICAgIFRoaXMgc3RyYXRlZ3kgcmVkdWNlcyB0aGUgYW1vdW50IG9mIGluc3RydWN0aW9ucyBl
bWl0dGVkIGZvciBhbGwgdGhlIHNsb3cgcGF0aHMuCisgICAgICAgIFBlcmZvcm1hbmNlIGlzIGV4
cGVjdGVkIHRvIGJlIG5ldXRyYWwgb3Igc2xpZ2h0bHkgaW1wcm92ZWQgZHVlIHRvIHRoZSByZWR1
Y2VkCisgICAgICAgIGNvbXBpbGUgdGltZXMgYW5kIGJldHRlciBjYWNoZSBsb2NhbGl0eS4KKwor
ICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIC0tZHVtcExpbmtCdWZmZXJTdGF0cyBzaG93cyB0aGUg
Zm9sbG93aW5nIGNoYW5nZXMgaW4gZW1pdHRlZAorICAgICAgICBKSVQgY29kZSBzaXplICh1c2lu
ZyBhIHNpbmdsZSBydW4gb2YgdGhlIENMSSB2ZXJzaW9uIG9mIEpldFN0cmVhbTIgb24gQVMgTWFj
KQorICAgICAgICBjb21wYXJpbmcgdG8gY3VycmVudCB0aXAgb2YgdHJlZToKKworICAgICAgICAg
ICAgICAgICAgICAgICAgQmFzZSAgICAgICAgICAgICAgICAgICAgIE5ldyAgICAgICAgICAgICAg
ICAgICAgICBEaWZmCisKKyAgICAgICAgICAgQmFzZWxpbmVKSVQ6IDg0NjI0Nzc2ICg4MC43MDQ0
NzUgTUIpICA3NzQyOTQwMCAoNzMuODQyNDMwIE1CKSAgMC45MXggKHJlZHVjdGlvbikKKyAgICAg
ICAgICAgICAgICAgICBERkc6IDM2NDE1MjY0ICgzNC43MjgzMDIgTUIpICAzNjE2MDg4MCAoMzQu
NDg1NzAzIE1CKSAgMC45OXgKKyAgICAgICAgICAgICAgICAgVGh1bms6IDIzMTMwMzM2ICgyMi4w
NTg4MDcgTUIpICAyMzE1OTAyNCAoMjIuMDg2MTY2IE1CKSAgMS4wMHgKKyAgICAgICAgICAgSW5s
aW5lQ2FjaGU6IDIxOTY5NzI4ICgyMC45NTE5NjUgTUIpICAyMjA2ODM0OCAoMjEuMDQ2MDE3IE1C
KSAgMS4wMHgKKyAgICAgICAgICAgICAgICAgICBGVEw6IDYwOTczMzYgKDUuODE0ODczIE1CKSAg
ICA2MDA0NzM2ICg1LjcyNjU2MiBNQikgICAgMC45OHgKKyAgICAgICAgICAgICAgICAgIFdhc206
IDIzMDE5NTYgKDIuMTk1MzE2IE1CKSAgICAyNDI5MjA0ICgyLjMxNjY2OSBNQikgICAgMS4wNngg
KHByb2JhYmx5IG5vaXNlKQorICAgICAgICAgICAgICAgWWFyckpJVDogMTUyMjQ4OCAoMS40NTE5
NTggTUIpICAgIDE1MjI0ODggKDEuNDUxOTU4IE1CKSAgICAxLjAweAorICAgICAgICAgICAgICAg
IENTU0pJVDogMAorICAgICAgICAgVW5jYXRlZ29yaXplZDogMAorCisgICAgICAgIENvbXBhcmlu
ZyB0byB0aXAgb2YgdHJlZSBhdCB0aGUgc3RhcnQgb2YgdGhpcyBlZmZvcnQgdG8gbW92ZSBwdXQg
c2xvdyBwYXRocyBpbgorICAgICAgICBKSVQgdGh1bmtzOgorCisgICAgICAgICAgICAgICAgICAg
ICAgICBCYXNlICAgICAgICAgICAgICAgICAgICAgTmV3ICAgICAgICAgICAgICAgICAgICAgIERp
ZmYKKworICAgICAgICAgICBCYXNlbGluZUpJVDogODkwODk5NjQgKDg0Ljk2MjgxMSBNQikgIDc3
NDI5NDAwICg3My44NDI0MzAgTUIpICAwLjg3eCAocmVkdWN0aW9uKQorICAgICAgICAgICAgICAg
ICAgIERGRzogMzkxMTczNjAgKDM3LjMwNTIyMiBNQikgIDM2MTYwODgwICgzNC40ODU3MDMgTUIp
ICAwLjkyeCAocmVkdWN0aW9uKQorICAgICAgICAgICAgICAgICBUaHVuazogMjMyMzA5NjggKDIy
LjE1NDc3OCBNQikgIDIzMTU5MDI0ICgyMi4wODYxNjYgTUIpICAxLjAweAorICAgICAgICAgICBJ
bmxpbmVDYWNoZTogMjIwMjc0MTYgKDIxLjAwNjk4MSBNQikgIDIyMDY4MzQ4ICgyMS4wNDYwMTcg
TUIpICAxLjAweAorICAgICAgICAgICAgICAgICAgIEZUTDogNjU3NTc3MiAoNi4yNzExNDUgTUIp
ICAgIDYwMDQ3MzYgKDUuNzI2NTYyIE1CKSAgICAwLjkxeCAocmVkdWN0aW9uKQorICAgICAgICAg
ICAgICAgICAgV2FzbTogMjMwMjcyNCAoMi4xOTYwNDkgTUIpICAgIDI0MjkyMDQgKDIuMzE2NjY5
IE1CKSAgICAxLjA1eCAocHJvYmFibHkgbm9pc2UpCisgICAgICAgICAgICAgICBZYXJySklUOiAx
NTM4OTU2ICgxLjQ2NzY2MyBNQikgICAgMTUyMjQ4OCAoMS40NTE5NTggTUIpICAgIDAuOTl4Cisg
ICAgICAgICAgICAgICAgQ1NTSklUOiAwICAgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAg
ICAgVW5jYXRlZ29yaXplZDogMCAgICAgICAgICAgICAgICAgICAgICAgIDAKKworICAgICAgICBU
aGlzIHBhdGNoIGhhcyBwYXNzZWQgdGhlIEpTQyB0ZXN0cyBvbiBBUyBNYWMsIGFuZCBhbHNvIGEg
c3Vic2V0IG9mIHRoZSBKU0MgdGVzdHMKKyAgICAgICAgKGFzIGEgc21va2UgdGVzdCkgb24geDg2
XzY0LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25G
dXp6KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2sp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXROb25QYXRjaGFibGVFeGNlcHRp
b25DaGVjayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5k
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAo
SlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
c2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6
SklUOjpzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVFRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6cHJlaW5pdGlhbGl6ZUV4dHJhQ1RJ
VGh1bmtzKToKKyAgICAgICAgKiBqaXQvU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUU2xvd1BhdGhDYWxsOjpjYWxsKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cDoKKyAgICAgICAgKEpTQzo6Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAyMS0wNS0xMyAgUGF0cmljayBBbmdsZSAgPHBhbmds
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgW1JFR1JFU1NJT046IHIyNzE4NzZdIFdlYiBJbnNwZWN0
b3I6IFtDb2NvYV0gUmVtb3RlIGluc3BlY3Rpb24gY3Jhc2hlcyB3aGVuIHVzaW5nIFdFQl9USFJF
QUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI3NzQ3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNjAyLDYgKzYwMiw4IEBAIHB1YmxpYzoKICAgICBIZWFw
KiBoZWFwKCkgY29uc3QgeyByZXR1cm4gJm1fdm0tPmhlYXA7IH0KICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2dsb2JhbE9iamVjdCk7IH0KKwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3RGb3IoQ29kZU9yaWdpbik7CiAKICAgICBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMmIGxpdmVuZXNzQW5hbHlzaXMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjc3NDcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzMsOCArMjMzLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdFJlbGVhc2VBc3NlcnRO
bwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooVk0mIHZtKQogewot
ICAgIGlmICghT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKQotICAgICAgICByZXR1cm47Cisg
ICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKTsKIAogICAgIEVu
Y29kZWRKU1ZhbHVlKiBidWZmZXIgPSB2bS5leGNlcHRpb25GdXp6aW5nQnVmZmVyKHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycykpOwogCkBAIC0yNzYsNyArMjc1LDggQEAgQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZQogCiBBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1i
bHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soVk0mIHZtLCBFeGNlcHRpb25DaGVja0tpbmQg
a2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewotICAgIGNhbGxFeGNlcHRpb25GdXp6
KHZtKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKSkKKyAg
ICAgICAgY2FsbEV4Y2VwdGlvbkZ1enoodm0pOwogCiAgICAgaWYgKHdpZHRoID09IEZhckp1bXBX
aWR0aCkKICAgICAgICAga2luZCA9IChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gSW52
ZXJ0ZWRFeGNlcHRpb25DaGVjayA6IE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKQEAgLTI5OSw3ICsy
OTksOCBAQCBBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplCiAKIEFzc2Vt
Ymx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXROb25QYXRjaGFibGVFeGNlcHRp
b25DaGVjayhWTSYgdm0pCiB7Ci0gICAgY2FsbEV4Y2VwdGlvbkZ1enoodm0pOworICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjp1c2VFeGNlcHRpb25GdXp6KCkpKQorICAgICAgICBjYWxsRXhjZXB0
aW9uRnV6eih2bSk7CiAKICAgICBKdW1wIHJlc3VsdDsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzc0NzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2
YXRlIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2Fs
bDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOworICAgICAgICBmcmllbmQgY2xh
c3MgSklUVGh1bmtzOwogCiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wOwogICAg
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CkBAIC03NzQsNiArNzc1LDIxIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAgICAgdm9pZCBl
bWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rp
b24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uKTsKIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgICAgICAvLyBUaHVu
ayBnZW5lcmF0b3JzLgorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Io
Vk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7Cisg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3df
b3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7CisjZW5kaWYKKwogICAgICAgICBKdW1wIGdl
dFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjc3NDcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgpA
QCAtOTQsMTEgKzk1LDc2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0
IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0
QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworCisjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyNlbHNlCisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CisgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOworICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOworI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiAgICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQogfQogCisj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZN
JiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIEpJVCBq
aXQodm0pOworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgaml0LnN0b3JlMzIo
Ynl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOworCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBh
cmd1bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9
PSBhcmd1bWVudEdQUjEpOworCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3RHUFIpOworCisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBwcm9m
aWxlR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0
aW9uKHZtKTsKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciBtYWtpbmcgdGhpcyBhIHRhaWwgY2Fs
bCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IG9wZXJhdGlvbiBpbnN0ZWFkCisgICAgLy8gb2YgcmV0
dXJuaW5nIHRvIHRoZSBjbGllbnQgdG8gY2FsbCBpdC4KKyAgICBqaXQucmV0KCk7CisKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpUaHVuayk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbCIp
OworfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cml2YXRlTmFtZT4oKTsKQEAgLTEyOSwxOSArMTk1LDgyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGMKIHsKICAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZh
dGVOYW1lPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwog
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbElu
ZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpOworCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRh
dGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChC
eXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworCisgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEg
YWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAorI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7
CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdv
cmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQorICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICBKSVQgaml0KHZtKTsK
KworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOworICAgIGppdC5zdG9yZTMyKGJ5dGVjb2Rl
T2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRH
UFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9
PSBhcmd1bWVudEdQUjEpOworCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3RHUFIpOworCisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BS
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZt
KTsKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciBtYWtpbmcgdGhpcyBhIHRhaWwgY2FsbCBkaXJl
Y3RseSB0byB0aGUgdGFyZ2V0IG9wZXJhdGlvbiBpbnN0ZWFkCisgICAgLy8gb2YgcmV0dXJuaW5n
IHRvIHRoZSBjbGllbnQgdG8gY2FsbCBpdC4KKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfeHh4X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbCIp
OworfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6ZW1p
dF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0
UHJpdmF0ZUJyYW5kPigpOwpAQCAtMTcwLDE1ICsyOTksMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c2V0X3ByaXZhdGVfYnJhbmQoY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJy
YW5kR1BSID0gcmVnVDE7Ci0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklU
UHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
W21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJ
bmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKworI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CiAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgYnJhbmRHUFIpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworCisg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
KworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFy
ZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19h
c3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJh
bmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7Cisg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
KTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworI2VuZGlmCiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtMjAzLDE1ICszNTQs
MzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLQogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdl
biA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAg
ICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOworCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIg
PSByZWdUMTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyNlbHNlCisgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50
R1BSMSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVj
bHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVz
LCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
KT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOworICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00MzcsMTYg
KzYxMSw3OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAK
KyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvLCBU
cnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5
dGVjb2RlSW5kZXgpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IGFyZ3VtZW50R1BSMDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3Vt
ZW50R1BSMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI1OworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7
CisgICAgbW92ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsK
KyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGF1
dG8qIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7CisgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJl
c3MgPSBjYWxsOwogICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKKyNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQor
eworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3
b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2bSk7
CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBqaXQuc3RvcmUzMihieXRlY29k
ZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50
R1BSMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBi
eVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9k
ZUdQUiA9IGFyZ3VtZW50R1BSNTsKKworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKKworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25QdXRCeVZhbE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0LnBy
ZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciBtYWtpbmcg
dGhpcyBhIHRhaWwgY2FsbCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IG9wZXJhdGlvbiBpbnN0ZWFk
CisgICAgLy8gb2YgcmV0dXJuaW5nIHRvIHRoZSBjbGllbnQgdG8gY2FsbCBpdC4KKyAgICBqaXQu
cmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcHV0X3h4eF9w
cmVwYXJlQ2FsbCIpOworfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKQEAgLTQ3NiwyMCArNzEyLDgxIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgR1BSUmVnIHZh
bHVlR1BSID0gcmVnVDI7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQ
Uik7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRQcml2YXRlTmFt
ZU9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIocHV0
S2luZC52YWx1ZSgpKSk7CisjZWxzZQorICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIwOwor
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlW
YWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQ
UiA9IGFyZ3VtZW50R1BSNTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHZhbHVlUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8p
LCBieVZhbEluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSks
IHB1dEtpbmRHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOworCisgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25QdXRQcml2
YXRlTmFtZU9wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKICAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5B
ZGRyZXNzID0gY2FsbDsKICAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCisjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KFZNJiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24g
Y2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIEpJ
VCBqaXQodm0pOworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgaml0LnN0b3Jl
MzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOworCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSBhcmd1bWVudEdQUjA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRH
UFIxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKKworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKworICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BS
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BS
KTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgLy8gRklYTUU6IENv
bnNpZGVyIG1ha2luZyB0aGlzIGEgdGFpbCBjYWxsIGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgb3Bl
cmF0aW9uIGluc3RlYWQKKyAgICAvLyBvZiByZXR1cm5pbmcgdG8gdGhlIGNsaWVudCB0byBjYWxs
IGl0LgorICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xv
d19vcF9wdXRfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbCIpOworfQorI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwpAQCAt
NTc4LDE0ICs4NzUsNzQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJ
bgogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKKyNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisjZWxzZQorICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFIwOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOworCisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQ
UjI7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OworCisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIp
OworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CisgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVl
R1BSID09IHJlZ1QwKTsKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xv
d19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRo
ZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhl
IExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2bSk7CisKKyAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwg
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVH
UFIgPSBhcmd1bWVudEdQUjQ7CisKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhhcmd1bWVudEdQUjAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdEdQUik7CisKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIsIGVjbWFNb2RlR1BSKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVy
YXRpb24odm0pOworCisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1ha2luZyB0aGlzIGEgdGFpbCBj
YWxsIGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgb3BlcmF0aW9uIGluc3RlYWQKKyAgICAvLyBvZiBy
ZXR1cm5pbmcgdG8gdGhlIGNsaWVudCB0byBjYWxsIGl0LgorICAgIGppdC5yZXQoKTsKKworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGwi
KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+
KCk7CkBAIC02MjcsMTUgKzk4NCw3NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAorI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKKyNlbHNlCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVH
UFIgPSBhcmd1bWVudEdQUjQ7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNt
YU1vZGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworCisgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIHN0YXRpY19hc3NlcnQo
cmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOworI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQorCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiB9CiAKKyNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQor
eworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3
b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2bSk7
CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBqaXQuc3RvcmUzMihieXRlY29k
ZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50
R1BSMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CisKKyAgICBqaXQubG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CisgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhhcmd1bWVudEdQUjAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgc3R1
YkluZm9HUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0LnBy
ZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciBtYWtpbmcg
dGhpcyBhIHRhaWwgY2FsbCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IG9wZXJhdGlvbiBpbnN0ZWFk
CisgICAgLy8gb2YgcmV0dXJuaW5nIHRvIHRoZSBjbGllbnQgdG8gY2FsbCBpdC4KKyAgICBqaXQu
cmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZGVsX2J5X3Zh
bF9wcmVwYXJlQ2FsbCIpOworfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
CiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUcnlHZXRCeUlkPigpOwpAQCAtNjcyLDggKzEwODksMzIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyNlbHNl
CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgbW92ZShKSVQ6OlRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwor
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC03MDYsNiArMTE0Nyw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIApAQCAtNzEzLDcgKzExNTUsMzIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyNlbHNlCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBB
U1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsK
KworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7
CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOworICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CisgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJldHVyblZhbHVlR1BSKTsKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CkBAIC03ODAsNiArMTI0Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIApAQCAt
Nzg3LDE2ICsxMjU1LDc2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW4KICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEs
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworI2Vsc2UKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMjsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworCisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CisgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcsIHJldHVyblZhbHVlR1BSKTsKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAK
KyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihW
TSYgdm0pCit7CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNh
biBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQorICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICBKSVQg
aml0KHZtKTsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOworICAgIGppdC5zdG9yZTMy
KGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
YXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworCisgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIp
OworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworCisgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGdsb2JhbE9iamVj
dEdQUiwgc3R1YkluZm9HUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBqaXQucHJlcGFy
ZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1ha2luZyB0aGlz
IGEgdGFpbCBjYWxsIGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgb3BlcmF0aW9uIGluc3RlYWQKKyAg
ICAvLyBvZiByZXR1cm5pbmcgdG8gdGhlIGNsaWVudCB0byBjYWxsIGl0LgorICAgIGppdC5yZXQo
KTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGwiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCkBAIC04MDQsMTEgKzEzMzIsNzQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisjZWxzZQorICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworCisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJl
YWR5IGluIHVzZS4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09
IGFyZ3VtZW50R1BSMSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKKyAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOworI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAorI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRv
cihWTSYgdm0pCit7CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9u
IGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQorICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICBK
SVQgaml0KHZtKTsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOworICAgIGppdC5zdG9y
ZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gYXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBh
cmd1bWVudEdQUjEpOworCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
Z2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9i
YWxPYmplY3RHUFIpOworCisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwg
YmFzZUdQUiwgdGhpc0dQUiwgcHJvcGVydHlHUFIpOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJh
dGlvbih2bSk7CisKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgbWFraW5nIHRoaXMgYSB0YWlsIGNh
bGwgZGlyZWN0bHkgdG8gdGhlIHRhcmdldCBvcGVyYXRpb24gaW5zdGVhZAorICAgIC8vIG9mIHJl
dHVybmluZyB0byB0aGUgY2xpZW50IHRvIGNhbGwgaXQuCisgICAgaml0LnJldCgpOworCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJl
cGFyZUNhbGwiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeUlkPigpOwpAQCAtODUyLDExICsxNDQzLDcxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW4KICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyNl
bHNlCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNl
LgorICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFI0OworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVu
dEdQUjEpOworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CisKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCkpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxp
bmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSMjsKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OworICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGlj
X2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOworCisgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOworICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworCisgICAgaml0LnNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KGdsb2JhbE9iamVj
dEdQUiwgc3R1YkluZm9HUFIsIHZhbHVlR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAg
aml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciBt
YWtpbmcgdGhpcyBhIHRhaWwgY2FsbCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IG9wZXJhdGlvbiBp
bnN0ZWFkCisgICAgLy8gb2YgcmV0dXJuaW5nIHRvIHRoZSBjbGllbnQgdG8gY2FsbCBpdC4KKyAg
ICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcHV0
X2J5X2lkX3ByZXBhcmVDYWxsIik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCisKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CkBAIC04OTAsNyArMTU0MSwzMyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisjZWxzZQorICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFIyOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworCisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ig
d2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KKyAgICAvLyBTbywgdGhlcmUncyBubyBwb2lu
dCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJl
bnQgbmFtZS4KKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2
YWx1ZSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKwor
ICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOworICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CkBAIC0xMTY0LDkgKzE4NDEsNzQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKKworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisjZWxzZQorICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJU
KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3Vy
cmVudEluc3RydWN0aW9uKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjI7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK30KKworI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRoZSB0
aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExM
SW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2bSk7CisKKyNpZiBDUFUoWDg2
XzY0KQorICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQVShBUk02NCkK
KyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50
ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBqaXQuc3RvcmUzMihieXRl
Y29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3VtZW50
R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BS
MDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGluc3RydWN0aW9uR1BSID0gYXJndW1lbnRHUFIxOwor
CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBj
b2RlQmxvY2tHUFIpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1Y3Rpb25HUFIpOworICAgIGppdC5hZGRQdHIoYnl0
ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9uR1BSKTsKKworICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25HZXRGcm9tU2NvcGUpPihnbG9iYWxPYmplY3RHUFIsIGluc3Ry
dWN0aW9uR1BSKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENDYWxs
SGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAg
IENDYWxsSGVscGVyczo6SnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0RXhjZXB0aW9uQ2hl
Y2sodm0pOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJw
KTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRGcm9tU2NvcGUpKTsKKyAgICBhdXRvIGhhbmRsZXIg
PSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRI
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIp
OwogfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewpAQCAtMTMyNSwxMCArMjA2Nyw3MCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgaWYgKHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcikgewogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5
X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLSAg
ICB9IGVsc2UKKyAgICB9IGVsc2UgeworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisjZWxzZQor
ICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICAgICAgQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSMjsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKyNlbmRpZgorICAgIH0KIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3Bf
cHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorICAgIEpJVCBqaXQodm0pOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBq
aXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRH
UFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwor
CisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVudEdQUjM7CisgICAg
Y29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgY29u
c3RleHByIEdQUlJlZyBpbnN0cnVjdGlvbkdQUiA9IGFyZ3VtZW50R1BSMTsKKworICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BS
KTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1Bv
aW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKKyAgICBqaXQuYWRkUHRyKGJ5dGVjb2RlT2Zmc2V0
R1BSLCBpbnN0cnVjdGlvbkdQUik7CisKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0p
OworICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25Q
dHJUYWcpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0
RXhjZXB0aW9uQ2hlY2sodm0pOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucG9wKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihmcmFtZVBv
aW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIGppdC5yZXQoKTsKKwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25QdXRUb1Njb3BlKSk7CisgICAgYXV0
byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJl
c2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOwor
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhh
bmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcHV0X3Rv
X3Njb3BlIik7Cit9CisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNpb24gMjc3
NDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRocy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5o
IgpAQCAtMjY0LDExICsyNjUsMTIgQEAgdm9pZCBKSVRUaHVua3M6OnByZWluaXRpYWxpemVFeHRy
YUNUSVRodQogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIFRoZXNlIDMgc2hvdWxkIGFsd2F5cyBiZSBpbml0aWFsaXplZCBmaXJzdCBpbiB0aGUg
Zm9sbG93aW5nIG9yZGVyIGJlY2F1c2UKKyAgICAvLyBUaGVzZSBzaG91bGQgYWx3YXlzIGJlIGlu
aXRpYWxpemVkIGZpcnN0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgYmVjYXVzZQogICAgIC8vIHRo
ZSBvdGhlciB0aHVuayBnZW5lcmF0b3JzIHJlbHkgb24gdGhlc2UgYWxyZWFkeSBiZWluZyBpbml0
aWFsaXplZC4KICAgICBjdGlTdHViKHZtLCBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwogICAg
IGN0aVN0dWIodm0sIGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRv
cik7CiAgICAgY3RpU3R1Yih2bSwgcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2Vw
dGlvbkdlbmVyYXRvcik7CisgICAgY3RpU3R1Yih2bSwgY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
OwogCiAjZGVmaW5lIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShuYW1lKSBj
dGlTbG93UGF0aEZ1bmN0aW9uU3R1Yih2bSwgc2xvd19wYXRoXyMjbmFtZSkKIApAQCAtMzQ2LDcg
KzM0OCwyMiBAQCB2b2lkIEpJVFRodW5rczo6cHJlaW5pdGlhbGl6ZUV4dHJhQ1RJVGh1CiAgICAg
SU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHJlc29sdmVfc2NvcGUpOwogICAg
IElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShjaGVja190ZHopOwogICAgIElO
SVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0b19wcm9wZXJ0eV9rZXkpOworCisg
ICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHRocm93X3N0cmljdF9tb2Rl
X3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICN1bmRlZiBJTklUX0JBU0VMSU5FX1JP
VVRJTkUKKworICAgIC8vIEZyb20gdGhlIEJhc2VsaW5lSklUIERFRklORV9TTE9XQ0FTRV9PUCBs
aXN0OgorICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpOworICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9kZWxfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcik7CisgICAgY3RpU3R1Yih2bSwg
SklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOworICAgIGN0aVN0
dWIodm0sIEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7CisgICAgY3RpU3R1
Yih2bSwgSklUOjpzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
OworICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOworICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVf
bmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik7CisgICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29w
X3B1dF90b19zY29wZUdlbmVyYXRvcik7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5j
cHAJKHJldmlzaW9uIDI3NzQ3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1Bh
dGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCB2b2lkIEpJVFNsb3dQ
YXRoQ2FsbDo6Y2FsbCgpCiB7CiAgICAgVk0mIHZtID0gbV9qaXQtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2ppdC0+bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAg
IEFTU0VSVCgoYnl0ZWNvZGVPZmZzZXQgPDwgQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0
KSA9PSBtX2ppdC0+bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9qaXQtPm1fYnl0ZWNvZGVJbmRleCk7CiAKICAg
ICBVTlVTRURfVkFSSUFCTEUobV9wYyk7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldFJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDI3NzQ3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTYsNiArOTYsNDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBwbwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKIH0KIAorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdSZXR1cm5B
ZGRyZXNzKCk7CisKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigp
KSkgeworICAgICAgICAvLyBFeGNlcHRpb24gZnV6emluZyBjYW4gY2FsbCBhIHJ1bnRpbWUgZnVu
Y3Rpb24uIFNvLCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcyBoZXJlLgor
I2lmIENQVShYODZfNjQpCisgICAgICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyNl
bGlmIENQVShBUk02NCkKKyAgICAgICAgaml0LnB1c2hQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAg
IH0KKworICAgIENDYWxsSGVscGVyczo6SnVtcCBoYW5kbGVFeGNlcHRpb24gPSBqaXQuZW1pdE5v
blBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKKworICAgIGlmIChVTkxJS0VMWShPcHRpb25z
Ojp1c2VFeGNlcHRpb25GdXp6KCkpKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LnBv
cChYODZSZWdpc3RlcnM6OmVicCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIGppdC5wb3BQ
YWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlu
a1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIH0KKyAgICBqaXQucmV0KCk7CisKKyAgICBhdXRvIGhh
bmRsZXJHZW5lcmF0b3IgPSBPcHRpb25zOjp1c2VFeGNlcHRpb25GdXp6KCkgPyBwb3BUaHVua1N0
YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yIDogaGFuZGxlRXhjZXB0aW9u
R2VuZXJhdG9yOworI2lmIENQVShYODZfNjQpCisgICAgaWYgKCFPcHRpb25zOjp1c2VFeGNlcHRp
b25GdXp6KCkpIHsKKyAgICAgICAgaGFuZGxlRXhjZXB0aW9uLmxpbmsoJmppdCk7CisgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENQVVJlZ2lzdGVy
KSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsgLy8gcG9wIHJldHVybiBhZGRyZXNzLgorICAgICAgICBo
YW5kbGVFeGNlcHRpb24gPSBqaXQuanVtcCgpOworICAgIH0KKyNlbmRpZgorCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbCh2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKGhhbmRsZXJHZW5lcmF0b3Is
IE5vTG9ja2luZ05lY2Vzc2FyeSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQ2hlY2tFeGNl
cHRpb24iKTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUYWdUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyNzc0NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw1ICs3OCwx
MCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJhCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRydW5jVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdl
bmVyYXRvcihWTSYpOwotfQorCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZN
Jik7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
</data>
<flag name="review"
          id="449587"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>