<?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>223401</bug_id>
          
          <creation_ts>2021-03-17 15:44:08 -0700</creation_ts>
          <short_desc>Enhance --verboseVerifyGC=true to make it easier to debug GC verifier errors.</short_desc>
          <delta_ts>2021-03-17 17:05:19 -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>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1740928</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-03-17 15:44:08 -0700</bug_when>
    <thetext>Previously, --verboseVerifyGC=true only dumps the stack trace of the immediate code path (in the verifier GC) that marked the object that the real GC did not.  With this patch, we&apos;ll also dump the trace of the marking chain all the way back to a root.  This patch also adds support for tracing the marking chain through opaque roots.

Here&apos;s an example of the new dump of a GC verifier error:

    GC Verifier: ERROR cell 0x12c570500 was not marked
    Object: 0x12c570500 with butterfly 0x0 (Structure 0x108eb6d10:[0x3ba8, ArrayBuffer, {}, NonArray, Proto:0x108ed7d90, Leaf]), StructureID: 15272
    Cell 0x12c570500 was visited via opaque root 0x10e4b52c0 at:
        1   0x100acccdc JSC::VerifierSlotVisitor::appendUnbarriered(JSC::JSCell*)
        2   0x100ad0c2f void JSC::WeakBlock::specializedVisit&lt;JSC::MarkedBlock, JSC::AbstractSlotVisitor&gt;(JSC::MarkedBlock&amp;, JSC::AbstractSlotVisitor&amp;)
        3   0x100abec2b void JSC::MarkedSpace::visitWeakSets&lt;JSC::AbstractSlotVisitor&gt;(JSC::AbstractSlotVisitor&amp;)
        4   0x100aa5167 WTF::Detail::CallableWrapper&lt;JSC::Heap::addCoreConstraints()::$_38, void, JSC::AbstractSlotVisitor&amp;&gt;::call(JSC::AbstractSlotVisitor&amp;)
        5   0x100ac1411 JSC::MarkingConstraintSet::executeAllSynchronously(JSC::AbstractSlotVisitor&amp;)
        6   0x100a9bd7b JSC::Heap::verifyGC()
        7   0x100a9b2f7 JSC::Heap::runEndPhase(JSC::GCConductor)
        8   0x100a99434 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
        9   0x100aa332d WTF::ScopedLambdaFunctor&lt;void (JSC::CurrentThreadState&amp;), JSC::Heap::collectInMutatorThread()::$_0&gt;::implFunction(void*, JSC::CurrentThreadState&amp;)
        10  0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void (JSC::CurrentThreadState&amp;)&gt; const&amp;)
        11  0x100a9d2cd JSC::Heap::collectInMutatorThread()
        12  0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
        13  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
        14  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&amp;, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
        15  0x100ec0785 void* JSC::allocateCell&lt;JSC::JSDataView&gt;(JSC::Heap&amp;, unsigned long)
        16  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr&lt;JSC::ArrayBuffer, WTF::RawPtrTraits&lt;JSC::ArrayBuffer&gt;, WTF::DefaultRefDerefTraits&lt;JSC::ArrayBuffer&gt; &gt;&amp;&amp;, unsigned int, unsigned int)
        17  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments&lt;JSC::JSDataView&gt;(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional&lt;unsigned int&gt;)
        18  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
        19  0x5e4a38a010c7
        20  0x5e4a38a02095
        21  0x1004888d6 vmEntryToJavaScript
        22  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::JSGlobalObject*, JSC::JSObject*)
        23  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;)
        24  0x100007606 jscmain(int, char**)
        25  0x10000644b main

    In the real GC, opaque root0x10e4b52c0 was NOT added to the heap&apos;s opaque roots.
    Opaque root 0x10e4b52c0 was added via cell 0x12c577720 at:
        1   0x100ea4fc9 JSC::JSArrayBufferView::visitChildren(JSC::JSCell*, JSC::AbstractSlotVisitor&amp;)
        2   0x100acd4e9 JSC::VerifierSlotVisitor::drain()
        3   0x100a9bd48 JSC::Heap::verifyGC()
        4   0x100a9b2f7 JSC::Heap::runEndPhase(JSC::GCConductor)
        5   0x100a99434 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
        6   0x100aa332d WTF::ScopedLambdaFunctor&lt;void (JSC::CurrentThreadState&amp;), JSC::Heap::collectInMutatorThread()::$_0&gt;::implFunction(void*, JSC::CurrentThreadState&amp;)
        7   0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void (JSC::CurrentThreadState&amp;)&gt; const&amp;)
        8   0x100a9d2cd JSC::Heap::collectInMutatorThread()
        9   0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
        10  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
        11  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&amp;, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
        12  0x100ec0785 void* JSC::allocateCell&lt;JSC::JSDataView&gt;(JSC::Heap&amp;, unsigned long)
        13  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr&lt;JSC::ArrayBuffer, WTF::RawPtrTraits&lt;JSC::ArrayBuffer&gt;, WTF::DefaultRefDerefTraits&lt;JSC::ArrayBuffer&gt; &gt;&amp;&amp;, unsigned int, unsigned int)
        14  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments&lt;JSC::JSDataView&gt;(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional&lt;unsigned int&gt;)
        15  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
        16  0x5e4a38a010c7
        17  0x5e4a38a02095
        18  0x1004888d6 vmEntryToJavaScript
        19  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::JSGlobalObject*, JSC::JSObject*)
        20  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;)
        21  0x100007606 jscmain(int, char**)
        22  0x10000644b main
        23  0x7fff203b4f3d start

    Object: 0x12c577720 with butterfly 0x0 (Structure 0x108eb6e60:[0xe135, DataView, {}, NonArray, Proto:0x108ed7da0, Leaf]), StructureID: 57653
    Cell 0x12c577720 was visited via cell 0x108b528e8 at:
        1   0x100acccdc JSC::VerifierSlotVisitor::appendUnbarriered(JSC::JSCell*)
        2   0x100f1623c JSC::JSObject::visitChildren(JSC::JSCell*, JSC::AbstractSlotVisitor&amp;)
        3   0x100acd4e9 JSC::VerifierSlotVisitor::drain()
        4   0x100a9bd48 JSC::Heap::verifyGC()
        5   0x100a9b2f7 JSC::Heap::runEndPhase(JSC::GCConductor)
        6   0x100a99434 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
        7   0x100aa332d WTF::ScopedLambdaFunctor&lt;void (JSC::CurrentThreadState&amp;), JSC::Heap::collectInMutatorThread()::$_0&gt;::implFunction(void*, JSC::CurrentThreadState&amp;)
        8   0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void (JSC::CurrentThreadState&amp;)&gt; const&amp;)
        9   0x100a9d2cd JSC::Heap::collectInMutatorThread()
        10  0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
        11  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
        12  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&amp;, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
        13  0x100ec0785 void* JSC::allocateCell&lt;JSC::JSDataView&gt;(JSC::Heap&amp;, unsigned long)
        14  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr&lt;JSC::ArrayBuffer, WTF::RawPtrTraits&lt;JSC::ArrayBuffer&gt;, WTF::DefaultRefDerefTraits&lt;JSC::ArrayBuffer&gt; &gt;&amp;&amp;, unsigned int, unsigned int)
        15  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments&lt;JSC::JSDataView&gt;(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional&lt;unsigned int&gt;)
        16  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
        17  0x5e4a38a010c7
        18  0x5e4a38a02095
        19  0x1004888d6 vmEntryToJavaScript
        20  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::JSGlobalObject*, JSC::JSObject*)
        21  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;)
        22  0x100007606 jscmain(int, char**)
        23  0x10000644b main

    Object: 0x108b528e8 with butterfly 0x1806e93070 (Structure 0x108efb090:[0xde87, Array, {}, ArrayWithContiguous, Proto:0x108baf5e8]), StructureID: 56967
    Cell 0x108b528e8 was visited via cell 0x108e8fcc0 at:
        1   0x100accdd8 JSC::VerifierSlotVisitor::appendUnbarriered(JSC::JSCell*)
        2   0x10070634e void JSC::CodeBlock::stronglyVisitWeakReferences&lt;JSC::AbstractSlotVisitor&gt;(JSC::ConcurrentJSLocker const&amp;, JSC::AbstractSlotVisitor&amp;)
        3   0x1006eacd7 JSC::CodeBlock::visitChildren(JSC::JSCell*, JSC::AbstractSlotVisitor&amp;)
        4   0x100acd4e9 JSC::VerifierSlotVisitor::drain()
        5   0x100a9bd48 JSC::Heap::verifyGC()
        6   0x100a9b2f7 JSC::Heap::runEndPhase(JSC::GCConductor)
        7   0x100a99434 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
        8   0x100aa332d WTF::ScopedLambdaFunctor&lt;void (JSC::CurrentThreadState&amp;), JSC::Heap::collectInMutatorThread()::$_0&gt;::implFunction(void*, JSC::CurrentThreadState&amp;)
        9   0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void (JSC::CurrentThreadState&amp;)&gt; const&amp;)
        10  0x100a9d2cd JSC::Heap::collectInMutatorThread()
        11  0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
        12  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
        13  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&amp;, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
        14  0x100ec0785 void* JSC::allocateCell&lt;JSC::JSDataView&gt;(JSC::Heap&amp;, unsigned long)
        15  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr&lt;JSC::ArrayBuffer, WTF::RawPtrTraits&lt;JSC::ArrayBuffer&gt;, WTF::DefaultRefDerefTraits&lt;JSC::ArrayBuffer&gt; &gt;&amp;&amp;, unsigned int, unsigned int)
        16  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments&lt;JSC::JSDataView&gt;(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional&lt;unsigned int&gt;)
        17  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
        18  0x5e4a38a010c7
        19  0x5e4a38a02095
        20  0x1004888d6 vmEntryToJavaScript
        21  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::JSGlobalObject*, JSC::JSObject*)
        22  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;)
        23  0x100007606 jscmain(int, char**)
        24  0x10000644b main

    Cell: 0x108e8fcc0 (0x108ef8c40:[0xc0e7, ProgramCodeBlock, {}, NonArray, Leaf]), StructureID: 49383
    Cell 0x108e8fcc0 was visited from scan of ConservativeScan roots at:
        1   0x100accaf8 JSC::VerifierSlotVisitor::append(JSC::ConservativeRoots const&amp;)
        2   0x100aa42a2 WTF::Detail::CallableWrapper&lt;JSC::Heap::addCoreConstraints()::$_31, void, JSC::SlotVisitor&amp;&gt;::call(JSC::SlotVisitor&amp;)
        3   0x100ac1db2 JSC::MarkingConstraintSolver::runExecutionThread(JSC::SlotVisitor&amp;, JSC::MarkingConstraintSolver::SchedulerPreference, WTF::ScopedLambda&lt;WTF::Optional&lt;unsigned int&gt; ()&gt;)
        4   0x100a9f2de JSC::Heap::runTaskInParallel(WTF::RefPtr&lt;WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt;, WTF::RawPtrTraits&lt;WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt; &gt;, WTF::DefaultRefDerefTraits&lt;WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt; &gt; &gt;)
        5   0x100ac188f JSC::MarkingConstraintSolver::execute(JSC::MarkingConstraintSolver::SchedulerPreference, WTF::ScopedLambda&lt;WTF::Optional&lt;unsigned int&gt; ()&gt;)
        6   0x100ac125c JSC::MarkingConstraintSet::executeConvergenceImpl(JSC::SlotVisitor&amp;)
        7   0x100ac0f9b JSC::MarkingConstraintSet::executeConvergence(JSC::SlotVisitor&amp;)
        8   0x100a99f24 JSC::Heap::runFixpointPhase(JSC::GCConductor)
        9   0x100a99418 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
        10  0x100aa332d WTF::ScopedLambdaFunctor&lt;void (JSC::CurrentThreadState&amp;), JSC::Heap::collectInMutatorThread()::$_0&gt;::implFunction(void*, JSC::CurrentThreadState&amp;)
        11  0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void (JSC::CurrentThreadState&amp;)&gt; const&amp;)
        12  0x100a9d2cd JSC::Heap::collectInMutatorThread()
        13  0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
        14  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
        15  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&amp;, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
        16  0x100ec0785 void* JSC::allocateCell&lt;JSC::JSDataView&gt;(JSC::Heap&amp;, unsigned long)
        17  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr&lt;JSC::ArrayBuffer, WTF::RawPtrTraits&lt;JSC::ArrayBuffer&gt;, WTF::DefaultRefDerefTraits&lt;JSC::ArrayBuffer&gt; &gt;&amp;&amp;, unsigned int, unsigned int)
        18  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments&lt;JSC::JSDataView&gt;(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional&lt;unsigned int&gt;)
        19  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
        20  0x5e4a38a010c7
        21  0x5e4a38a02095
        22  0x1004888d6 vmEntryToJavaScript
        23  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::JSGlobalObject*, JSC::JSObject*)
        24  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;)
        25  0x100007606 jscmain(int, char**)
        26  0x10000644b main

Note that in this example, the stack trace was for an opaque root, and the verifier also noted that the opaque root (which was added for the verifier GC) was not added for the real GC.  This pointed to the bug that caused the error (this bug was fixed in https://bugs.webkit.org/show_bug.cgi?id=223241).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740931</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-03-17 15:49:24 -0700</bug_when>
    <thetext>&gt; Note that in this example, the stack trace was for an opaque root, and the verifier also noted that the opaque root (which was added for the verifier GC) was not added for the real GC.  This pointed to the bug that caused the error (this bug was fixed in https://bugs.webkit.org/show_bug.cgi?id=223241).

I meant &quot;the 2nd stack trace&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740938</commentid>
    <comment_count>2</comment_count>
      <attachid>423533</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-03-17 16:02:21 -0700</bug_when>
    <thetext>Created attachment 423533
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740958</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-03-17 17:04:37 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r274601: &lt;http://trac.webkit.org/r274601&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740959</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-17 17:05:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/75551237&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423533</attachid>
            <date>2021-03-17 16:02:21 -0700</date>
            <delta_ts>2021-03-17 16:57:43 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-223401.patch</filename>
            <type>text/plain</type>
            <size>41779</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc0NTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyMSBA
QAorMjAyMS0wMy0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
RW5oYW5jZSAtLXZlcmJvc2VWZXJpZnlHQz10cnVlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVn
IEdDIHZlcmlmaWVyIGVycm9ycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMzQwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFByZXZpb3VzbHksIC0tdmVyYm9zZVZlcmlmeUdDPXRydWUgb25seSBkdW1w
cyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGltbWVkaWF0ZSBjb2RlCisgICAgICAgIHBhdGggKGlu
IHRoZSB2ZXJpZmllciBHQykgdGhhdCBtYXJrZWQgdGhlIG9iamVjdCB0aGF0IHRoZSByZWFsIEdD
IGRpZCBub3QuICBXaXRoCisgICAgICAgIHRoaXMgcGF0Y2gsIHdlJ2xsIGFsc28gZHVtcCB0aGUg
dHJhY2Ugb2YgdGhlIG1hcmtpbmcgY2hhaW4gYWxsIHRoZSB3YXkgYmFjayB0byBhCisgICAgICAg
IEdDIHJvb3QuICBUaGlzIHBhdGNoIGFsc28gYWRkcyBzdXBwb3J0IGZvciB0cmFjaW5nIHRoZSBt
YXJraW5nIGNoYWluIHRocm91Z2ggb3BhcXVlCisgICAgICAgIHJvb3RzLgorCisgICAgICAgIFRo
ZSBtYXJraW5nIGNoYWluIHByb3ZpZGVkIGlzIHRoZSBvbmUgdGhhdCB0aGUgdmVyaWZpZXIgR0Mg
d2Fsa2VkLiAgVG8gZGVidWcgdGhlCisgICAgICAgIGVycm9yLCB3ZSB1c2UgdGhpcyBpbmZvIGFu
ZCBjaGVjayB3aGVyZSB0aGUgcmVhbCBHQyBkZXZpYXRlcy4KKworICAgICAgICBIZXJlJ3MgYW4g
ZXhhbXBsZSBvZiB0aGUgbmV3IGR1bXAgb2YgYSBHQyB2ZXJpZmllciBlcnJvcjoKKworICAgICAg
ICAgICAgR0MgVmVyaWZpZXI6IEVSUk9SIGNlbGwgMHgxMmM1NzA1MDAgd2FzIG5vdCBtYXJrZWQK
KyAgICAgICAgICAgIE9iamVjdDogMHgxMmM1NzA1MDAgd2l0aCBidXR0ZXJmbHkgMHgwIChTdHJ1
Y3R1cmUgMHgxMDhlYjZkMTA6WzB4M2JhOCwgQXJyYXlCdWZmZXIsIHt9LCBOb25BcnJheSwgUHJv
dG86MHgxMDhlZDdkOTAsIExlYWZdKSwgU3RydWN0dXJlSUQ6IDE1MjcyCisgICAgICAgICAgICBD
ZWxsIDB4MTJjNTcwNTAwIHdhcyB2aXNpdGVkIHZpYSBvcGFxdWUgcm9vdCAweDEwZTRiNTJjMCBh
dDoKKyAgICAgICAgICAgICAgICAxICAgMHgxMDBhY2NjZGMgSlNDOjpWZXJpZmllclNsb3RWaXNp
dG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU0M6OkpTQ2VsbCopCisgICAgICAgICAgICAgICAgMiAg
IDB4MTAwYWQwYzJmIHZvaWQgSlNDOjpXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQ8SlNDOjpN
YXJrZWRCbG9jaywgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yPihKU0M6Ok1hcmtlZEJsb2NrJiwg
SlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikKKyAgICAgICAgICAgICAgICAzICAgMHgxMDBhYmVj
MmIgdm9pZCBKU0M6Ok1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzPEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvcj4oSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJikKKyAgICAgICAgICAgICAgICA0ICAg
MHgxMDBhYTUxNjcgV1RGOjpEZXRhaWw6OkNhbGxhYmxlV3JhcHBlcjxKU0M6OkhlYXA6OmFkZENv
cmVDb25zdHJhaW50cygpOjokXzM4LCB2b2lkLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImPjo6
Y2FsbChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKQorICAgICAgICAgICAgICAgIDUgICAweDEw
MGFjMTQxMSBKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsU3luY2hyb25vdXNs
eShKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKQorICAgICAgICAgICAgICAgIDYgICAweDEwMGE5
YmQ3YiBKU0M6OkhlYXA6OnZlcmlmeUdDKCkKKyAgICAgICAgICAgICAgICA3ICAgMHgxMDBhOWIy
ZjcgSlNDOjpIZWFwOjpydW5FbmRQaGFzZShKU0M6OkdDQ29uZHVjdG9yKQorICAgICAgICAgICAg
ICAgIDggICAweDEwMGE5OTQzNCBKU0M6OkhlYXA6OnJ1bkN1cnJlbnRQaGFzZShKU0M6OkdDQ29u
ZHVjdG9yLCBKU0M6OkN1cnJlbnRUaHJlYWRTdGF0ZSopCisgICAgICAgICAgICAgICAgOSAgIDB4
MTAwYWEzMzJkIFdURjo6U2NvcGVkTGFtYmRhRnVuY3Rvcjx2b2lkIChKU0M6OkN1cnJlbnRUaHJl
YWRTdGF0ZSYpLCBKU0M6OkhlYXA6OmNvbGxlY3RJbk11dGF0b3JUaHJlYWQoKTo6JF8wPjo6aW1w
bEZ1bmN0aW9uKHZvaWQqLCBKU0M6OkN1cnJlbnRUaHJlYWRTdGF0ZSYpCisgICAgICAgICAgICAg
ICAgMTAgIDB4MTAwYWI4Nzk0IEpTQzo6Y2FsbFdpdGhDdXJyZW50VGhyZWFkU3RhdGUoV1RGOjpT
Y29wZWRMYW1iZGE8dm9pZCAoSlNDOjpDdXJyZW50VGhyZWFkU3RhdGUmKT4gY29uc3QmKQorICAg
ICAgICAgICAgICAgIDExICAweDEwMGE5ZDJjZCBKU0M6OkhlYXA6OmNvbGxlY3RJbk11dGF0b3JU
aHJlYWQoKQorICAgICAgICAgICAgICAgIDEyICAweDEwMGE5OTIxNyBKU0M6OkhlYXA6OndhaXRG
b3JDb2xsZWN0aW9uKHVuc2lnbmVkIGxvbmcgbG9uZykKKyAgICAgICAgICAgICAgICAxMyAgMHgx
MDBhOThjYjEgSlNDOjpIZWFwOjpjb2xsZWN0Tm93KEpTQzo6U3luY2hyb25vdXNuZXNzLCBKU0M6
OkdDUmVxdWVzdCkKKyAgICAgICAgICAgICAgICAxNCAgMHgxMDBhYjdiNGQgSlNDOjpMb2NhbEFs
bG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShKU0M6OkhlYXAmLCBKU0M6OkdDRGVmZXJyYWxDb250
ZXh0KiwgSlNDOjpBbGxvY2F0aW9uRmFpbHVyZU1vZGUpCisgICAgICAgICAgICAgICAgMTUgIDB4
MTAwZWMwNzg1IHZvaWQqIEpTQzo6YWxsb2NhdGVDZWxsPEpTQzo6SlNEYXRhVmlldz4oSlNDOjpI
ZWFwJiwgdW5zaWduZWQgbG9uZykKKyAgICAgICAgICAgICAgICAxNiAgMHgxMDBlYzA2MjkgSlND
OjpKU0RhdGFWaWV3OjpjcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJl
KiwgV1RGOjpSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlciwgV1RGOjpSYXdQdHJUcmFpdHM8SlNDOjpB
cnJheUJ1ZmZlcj4sIFdURjo6RGVmYXVsdFJlZkRlcmVmVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+
ID4mJiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCisgICAgICAgICAgICAgICAgMTcgIDB4
MTAwZjg5M2Q2IEpTQzo6SlNPYmplY3QqIEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3V2l0aEFyZ3VtZW50czxKU0M6OkpTRGF0YVZpZXc+KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cnVjdHVyZSosIGxvbmcgbG9uZywgdW5zaWduZWQgaW50LCBXVEY6Ok9wdGlvbmFsPHVu
c2lnbmVkIGludD4pCisgICAgICAgICAgICAgICAgMTggIDB4MTAwZjczMWRjIEpTQzo6Y29uc3Ry
dWN0RGF0YVZpZXcoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKikKKyAgICAg
ICAgICAgICAgICAxOSAgMHg1ZTRhMzhhMDEwYzcKKyAgICAgICAgICAgICAgICAyMCAgMHg1ZTRh
MzhhMDIwOTUKKyAgICAgICAgICAgICAgICAyMSAgMHgxMDA0ODg4ZDYgdm1FbnRyeVRvSmF2YVNj
cmlwdAorICAgICAgICAgICAgICAgIDIyICAweDEwMGI4MzY5MCBKU0M6OkludGVycHJldGVyOjpl
eGVjdXRlUHJvZ3JhbShKU0M6OlNvdXJjZUNvZGUgY29uc3QmLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpKU09iamVjdCopCisgICAgICAgICAgICAgICAgMjMgIDB4MTAwZTM5YTgyIEpTQzo6
ZXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U291cmNlQ29kZSBjb25zdCYsIEpT
Qzo6SlNWYWx1ZSwgV1RGOjpOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4mKQorICAgICAgICAgICAg
ICAgIDI0ICAweDEwMDAwNzYwNiBqc2NtYWluKGludCwgY2hhcioqKQorICAgICAgICAgICAgICAg
IDI1ICAweDEwMDAwNjQ0YiBtYWluCisKKyAgICAgICAgICAgIEluIHRoZSByZWFsIEdDLCBvcGFx
dWUgcm9vdDB4MTBlNGI1MmMwIHdhcyBOT1QgYWRkZWQgdG8gdGhlIGhlYXAncyBvcGFxdWUgcm9v
dHMuCisgICAgICAgICAgICBPcGFxdWUgcm9vdCAweDEwZTRiNTJjMCB3YXMgYWRkZWQgdmlhIGNl
bGwgMHgxMmM1Nzc3MjAgYXQ6CisgICAgICAgICAgICAgICAgMSAgIDB4MTAwZWE0ZmM5IEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OkFic3Ry
YWN0U2xvdFZpc2l0b3ImKQorICAgICAgICAgICAgICAgIDIgICAweDEwMGFjZDRlOSBKU0M6OlZl
cmlmaWVyU2xvdFZpc2l0b3I6OmRyYWluKCkKKyAgICAgICAgICAgICAgICAzICAgMHgxMDBhOWJk
NDggSlNDOjpIZWFwOjp2ZXJpZnlHQygpCisgICAgICAgICAgICAgICAgNCAgIDB4MTAwYTliMmY3
IEpTQzo6SGVhcDo6cnVuRW5kUGhhc2UoSlNDOjpHQ0NvbmR1Y3RvcikKKyAgICAgICAgICAgICAg
ICA1ICAgMHgxMDBhOTk0MzQgSlNDOjpIZWFwOjpydW5DdXJyZW50UGhhc2UoSlNDOjpHQ0NvbmR1
Y3RvciwgSlNDOjpDdXJyZW50VGhyZWFkU3RhdGUqKQorICAgICAgICAgICAgICAgIDYgICAweDEw
MGFhMzMyZCBXVEY6OlNjb3BlZExhbWJkYUZ1bmN0b3I8dm9pZCAoSlNDOjpDdXJyZW50VGhyZWFk
U3RhdGUmKSwgSlNDOjpIZWFwOjpjb2xsZWN0SW5NdXRhdG9yVGhyZWFkKCk6OiRfMD46OmltcGxG
dW5jdGlvbih2b2lkKiwgSlNDOjpDdXJyZW50VGhyZWFkU3RhdGUmKQorICAgICAgICAgICAgICAg
IDcgICAweDEwMGFiODc5NCBKU0M6OmNhbGxXaXRoQ3VycmVudFRocmVhZFN0YXRlKFdURjo6U2Nv
cGVkTGFtYmRhPHZvaWQgKEpTQzo6Q3VycmVudFRocmVhZFN0YXRlJik+IGNvbnN0JikKKyAgICAg
ICAgICAgICAgICA4ICAgMHgxMDBhOWQyY2QgSlNDOjpIZWFwOjpjb2xsZWN0SW5NdXRhdG9yVGhy
ZWFkKCkKKyAgICAgICAgICAgICAgICA5ICAgMHgxMDBhOTkyMTcgSlNDOjpIZWFwOjp3YWl0Rm9y
Q29sbGVjdGlvbih1bnNpZ25lZCBsb25nIGxvbmcpCisgICAgICAgICAgICAgICAgMTAgIDB4MTAw
YTk4Y2IxIEpTQzo6SGVhcDo6Y29sbGVjdE5vdyhKU0M6OlN5bmNocm9ub3VzbmVzcywgSlNDOjpH
Q1JlcXVlc3QpCisgICAgICAgICAgICAgICAgMTEgIDB4MTAwYWI3YjRkIEpTQzo6TG9jYWxBbGxv
Y2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoSlNDOjpIZWFwJiwgSlNDOjpHQ0RlZmVycmFsQ29udGV4
dCosIEpTQzo6QWxsb2NhdGlvbkZhaWx1cmVNb2RlKQorICAgICAgICAgICAgICAgIDEyICAweDEw
MGVjMDc4NSB2b2lkKiBKU0M6OmFsbG9jYXRlQ2VsbDxKU0M6OkpTRGF0YVZpZXc+KEpTQzo6SGVh
cCYsIHVuc2lnbmVkIGxvbmcpCisgICAgICAgICAgICAgICAgMTMgIDB4MTAwZWMwNjI5IEpTQzo6
SlNEYXRhVmlldzo6Y3JlYXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSos
IFdURjo6UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXIsIFdURjo6UmF3UHRyVHJhaXRzPEpTQzo6QXJy
YXlCdWZmZXI+LCBXVEY6OkRlZmF1bHRSZWZEZXJlZlRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiA+
JiYsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQorICAgICAgICAgICAgICAgIDE0ICAweDEw
MGY4OTNkNiBKU0M6OkpTT2JqZWN0KiBKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmll
d1dpdGhBcmd1bWVudHM8SlNDOjpKU0RhdGFWaWV3PihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpTdHJ1Y3R1cmUqLCBsb25nIGxvbmcsIHVuc2lnbmVkIGludCwgV1RGOjpPcHRpb25hbDx1bnNp
Z25lZCBpbnQ+KQorICAgICAgICAgICAgICAgIDE1ICAweDEwMGY3MzFkYyBKU0M6OmNvbnN0cnVj
dERhdGFWaWV3KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopCisgICAgICAg
ICAgICAgICAgMTYgIDB4NWU0YTM4YTAxMGM3CisgICAgICAgICAgICAgICAgMTcgIDB4NWU0YTM4
YTAyMDk1CisgICAgICAgICAgICAgICAgMTggIDB4MTAwNDg4OGQ2IHZtRW50cnlUb0phdmFTY3Jp
cHQKKyAgICAgICAgICAgICAgICAxOSAgMHgxMDBiODM2OTAgSlNDOjpJbnRlcnByZXRlcjo6ZXhl
Y3V0ZVByb2dyYW0oSlNDOjpTb3VyY2VDb2RlIGNvbnN0JiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6SlNPYmplY3QqKQorICAgICAgICAgICAgICAgIDIwICAweDEwMGUzOWE4MiBKU0M6OmV2
YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlNvdXJjZUNvZGUgY29uc3QmLCBKU0M6
OkpTVmFsdWUsIFdURjo6TmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+JikKKyAgICAgICAgICAgICAg
ICAyMSAgMHgxMDAwMDc2MDYganNjbWFpbihpbnQsIGNoYXIqKikKKyAgICAgICAgICAgICAgICAy
MiAgMHgxMDAwMDY0NGIgbWFpbgorICAgICAgICAgICAgICAgIDIzICAweDdmZmYyMDNiNGYzZCBz
dGFydAorCisgICAgICAgICAgICBPYmplY3Q6IDB4MTJjNTc3NzIwIHdpdGggYnV0dGVyZmx5IDB4
MCAoU3RydWN0dXJlIDB4MTA4ZWI2ZTYwOlsweGUxMzUsIERhdGFWaWV3LCB7fSwgTm9uQXJyYXks
IFByb3RvOjB4MTA4ZWQ3ZGEwLCBMZWFmXSksIFN0cnVjdHVyZUlEOiA1NzY1MworICAgICAgICAg
ICAgQ2VsbCAweDEyYzU3NzcyMCB3YXMgdmlzaXRlZCB2aWEgY2VsbCAweDEwOGI1MjhlOCBhdDoK
KyAgICAgICAgICAgICAgICAxICAgMHgxMDBhY2NjZGMgSlNDOjpWZXJpZmllclNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZChKU0M6OkpTQ2VsbCopCisgICAgICAgICAgICAgICAgMiAgIDB4
MTAwZjE2MjNjIEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6
OkFic3RyYWN0U2xvdFZpc2l0b3ImKQorICAgICAgICAgICAgICAgIDMgICAweDEwMGFjZDRlOSBK
U0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmRyYWluKCkKKyAgICAgICAgICAgICAgICA0ICAgMHgx
MDBhOWJkNDggSlNDOjpIZWFwOjp2ZXJpZnlHQygpCisgICAgICAgICAgICAgICAgNSAgIDB4MTAw
YTliMmY3IEpTQzo6SGVhcDo6cnVuRW5kUGhhc2UoSlNDOjpHQ0NvbmR1Y3RvcikKKyAgICAgICAg
ICAgICAgICA2ICAgMHgxMDBhOTk0MzQgSlNDOjpIZWFwOjpydW5DdXJyZW50UGhhc2UoSlNDOjpH
Q0NvbmR1Y3RvciwgSlNDOjpDdXJyZW50VGhyZWFkU3RhdGUqKQorICAgICAgICAgICAgICAgIDcg
ICAweDEwMGFhMzMyZCBXVEY6OlNjb3BlZExhbWJkYUZ1bmN0b3I8dm9pZCAoSlNDOjpDdXJyZW50
VGhyZWFkU3RhdGUmKSwgSlNDOjpIZWFwOjpjb2xsZWN0SW5NdXRhdG9yVGhyZWFkKCk6OiRfMD46
OmltcGxGdW5jdGlvbih2b2lkKiwgSlNDOjpDdXJyZW50VGhyZWFkU3RhdGUmKQorICAgICAgICAg
ICAgICAgIDggICAweDEwMGFiODc5NCBKU0M6OmNhbGxXaXRoQ3VycmVudFRocmVhZFN0YXRlKFdU
Rjo6U2NvcGVkTGFtYmRhPHZvaWQgKEpTQzo6Q3VycmVudFRocmVhZFN0YXRlJik+IGNvbnN0JikK
KyAgICAgICAgICAgICAgICA5ICAgMHgxMDBhOWQyY2QgSlNDOjpIZWFwOjpjb2xsZWN0SW5NdXRh
dG9yVGhyZWFkKCkKKyAgICAgICAgICAgICAgICAxMCAgMHgxMDBhOTkyMTcgSlNDOjpIZWFwOjp3
YWl0Rm9yQ29sbGVjdGlvbih1bnNpZ25lZCBsb25nIGxvbmcpCisgICAgICAgICAgICAgICAgMTEg
IDB4MTAwYTk4Y2IxIEpTQzo6SGVhcDo6Y29sbGVjdE5vdyhKU0M6OlN5bmNocm9ub3VzbmVzcywg
SlNDOjpHQ1JlcXVlc3QpCisgICAgICAgICAgICAgICAgMTIgIDB4MTAwYWI3YjRkIEpTQzo6TG9j
YWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoSlNDOjpIZWFwJiwgSlNDOjpHQ0RlZmVycmFs
Q29udGV4dCosIEpTQzo6QWxsb2NhdGlvbkZhaWx1cmVNb2RlKQorICAgICAgICAgICAgICAgIDEz
ICAweDEwMGVjMDc4NSB2b2lkKiBKU0M6OmFsbG9jYXRlQ2VsbDxKU0M6OkpTRGF0YVZpZXc+KEpT
Qzo6SGVhcCYsIHVuc2lnbmVkIGxvbmcpCisgICAgICAgICAgICAgICAgMTQgIDB4MTAwZWMwNjI5
IEpTQzo6SlNEYXRhVmlldzo6Y3JlYXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSosIFdURjo6UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXIsIFdURjo6UmF3UHRyVHJhaXRzPEpT
Qzo6QXJyYXlCdWZmZXI+LCBXVEY6OkRlZmF1bHRSZWZEZXJlZlRyYWl0czxKU0M6OkFycmF5QnVm
ZmVyPiA+JiYsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQorICAgICAgICAgICAgICAgIDE1
ICAweDEwMGY4OTNkNiBKU0M6OkpTT2JqZWN0KiBKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFy
cmF5Vmlld1dpdGhBcmd1bWVudHM8SlNDOjpKU0RhdGFWaWV3PihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqLCBsb25nIGxvbmcsIHVuc2lnbmVkIGludCwgV1RGOjpPcHRpb25h
bDx1bnNpZ25lZCBpbnQ+KQorICAgICAgICAgICAgICAgIDE2ICAweDEwMGY3MzFkYyBKU0M6OmNv
bnN0cnVjdERhdGFWaWV3KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopCisg
ICAgICAgICAgICAgICAgMTcgIDB4NWU0YTM4YTAxMGM3CisgICAgICAgICAgICAgICAgMTggIDB4
NWU0YTM4YTAyMDk1CisgICAgICAgICAgICAgICAgMTkgIDB4MTAwNDg4OGQ2IHZtRW50cnlUb0ph
dmFTY3JpcHQKKyAgICAgICAgICAgICAgICAyMCAgMHgxMDBiODM2OTAgSlNDOjpJbnRlcnByZXRl
cjo6ZXhlY3V0ZVByb2dyYW0oSlNDOjpTb3VyY2VDb2RlIGNvbnN0JiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6SlNPYmplY3QqKQorICAgICAgICAgICAgICAgIDIxICAweDEwMGUzOWE4MiBK
U0M6OmV2YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlNvdXJjZUNvZGUgY29uc3Qm
LCBKU0M6OkpTVmFsdWUsIFdURjo6TmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+JikKKyAgICAgICAg
ICAgICAgICAyMiAgMHgxMDAwMDc2MDYganNjbWFpbihpbnQsIGNoYXIqKikKKyAgICAgICAgICAg
ICAgICAyMyAgMHgxMDAwMDY0NGIgbWFpbgorCisgICAgICAgICAgICBPYmplY3Q6IDB4MTA4YjUy
OGU4IHdpdGggYnV0dGVyZmx5IDB4MTgwNmU5MzA3MCAoU3RydWN0dXJlIDB4MTA4ZWZiMDkwOlsw
eGRlODcsIEFycmF5LCB7fSwgQXJyYXlXaXRoQ29udGlndW91cywgUHJvdG86MHgxMDhiYWY1ZThd
KSwgU3RydWN0dXJlSUQ6IDU2OTY3CisgICAgICAgICAgICBDZWxsIDB4MTA4YjUyOGU4IHdhcyB2
aXNpdGVkIHZpYSBjZWxsIDB4MTA4ZThmY2MwIGF0OgorICAgICAgICAgICAgICAgIDEgICAweDEw
MGFjY2RkOCBKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTQzo6
SlNDZWxsKikKKyAgICAgICAgICAgICAgICAyICAgMHgxMDA3MDYzNGUgdm9pZCBKU0M6OkNvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzPEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
cj4oSlNDOjpDb25jdXJyZW50SlNMb2NrZXIgY29uc3QmLCBKU0M6OkFic3RyYWN0U2xvdFZpc2l0
b3ImKQorICAgICAgICAgICAgICAgIDMgICAweDEwMDZlYWNkNyBKU0M6OkNvZGVCbG9jazo6dmlz
aXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYpCisgICAg
ICAgICAgICAgICAgNCAgIDB4MTAwYWNkNGU5IEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6ZHJh
aW4oKQorICAgICAgICAgICAgICAgIDUgICAweDEwMGE5YmQ0OCBKU0M6OkhlYXA6OnZlcmlmeUdD
KCkKKyAgICAgICAgICAgICAgICA2ICAgMHgxMDBhOWIyZjcgSlNDOjpIZWFwOjpydW5FbmRQaGFz
ZShKU0M6OkdDQ29uZHVjdG9yKQorICAgICAgICAgICAgICAgIDcgICAweDEwMGE5OTQzNCBKU0M6
OkhlYXA6OnJ1bkN1cnJlbnRQaGFzZShKU0M6OkdDQ29uZHVjdG9yLCBKU0M6OkN1cnJlbnRUaHJl
YWRTdGF0ZSopCisgICAgICAgICAgICAgICAgOCAgIDB4MTAwYWEzMzJkIFdURjo6U2NvcGVkTGFt
YmRhRnVuY3Rvcjx2b2lkIChKU0M6OkN1cnJlbnRUaHJlYWRTdGF0ZSYpLCBKU0M6OkhlYXA6OmNv
bGxlY3RJbk11dGF0b3JUaHJlYWQoKTo6JF8wPjo6aW1wbEZ1bmN0aW9uKHZvaWQqLCBKU0M6OkN1
cnJlbnRUaHJlYWRTdGF0ZSYpCisgICAgICAgICAgICAgICAgOSAgIDB4MTAwYWI4Nzk0IEpTQzo6
Y2FsbFdpdGhDdXJyZW50VGhyZWFkU3RhdGUoV1RGOjpTY29wZWRMYW1iZGE8dm9pZCAoSlNDOjpD
dXJyZW50VGhyZWFkU3RhdGUmKT4gY29uc3QmKQorICAgICAgICAgICAgICAgIDEwICAweDEwMGE5
ZDJjZCBKU0M6OkhlYXA6OmNvbGxlY3RJbk11dGF0b3JUaHJlYWQoKQorICAgICAgICAgICAgICAg
IDExICAweDEwMGE5OTIxNyBKU0M6OkhlYXA6OndhaXRGb3JDb2xsZWN0aW9uKHVuc2lnbmVkIGxv
bmcgbG9uZykKKyAgICAgICAgICAgICAgICAxMiAgMHgxMDBhOThjYjEgSlNDOjpIZWFwOjpjb2xs
ZWN0Tm93KEpTQzo6U3luY2hyb25vdXNuZXNzLCBKU0M6OkdDUmVxdWVzdCkKKyAgICAgICAgICAg
ICAgICAxMyAgMHgxMDBhYjdiNGQgSlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZShKU0M6OkhlYXAmLCBKU0M6OkdDRGVmZXJyYWxDb250ZXh0KiwgSlNDOjpBbGxvY2F0aW9uRmFp
bHVyZU1vZGUpCisgICAgICAgICAgICAgICAgMTQgIDB4MTAwZWMwNzg1IHZvaWQqIEpTQzo6YWxs
b2NhdGVDZWxsPEpTQzo6SlNEYXRhVmlldz4oSlNDOjpIZWFwJiwgdW5zaWduZWQgbG9uZykKKyAg
ICAgICAgICAgICAgICAxNSAgMHgxMDBlYzA2MjkgSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGUoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiwgV1RGOjpSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlciwgV1RGOjpSYXdQdHJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4sIFdURjo6RGVmYXVs
dFJlZkRlcmVmVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+ID4mJiwgdW5zaWduZWQgaW50LCB1bnNp
Z25lZCBpbnQpCisgICAgICAgICAgICAgICAgMTYgIDB4MTAwZjg5M2Q2IEpTQzo6SlNPYmplY3Qq
IEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU0M6OkpT
RGF0YVZpZXc+KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSosIGxvbmcgbG9u
ZywgdW5zaWduZWQgaW50LCBXVEY6Ok9wdGlvbmFsPHVuc2lnbmVkIGludD4pCisgICAgICAgICAg
ICAgICAgMTcgIDB4MTAwZjczMWRjIEpTQzo6Y29uc3RydWN0RGF0YVZpZXcoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKikKKyAgICAgICAgICAgICAgICAxOCAgMHg1ZTRhMzhh
MDEwYzcKKyAgICAgICAgICAgICAgICAxOSAgMHg1ZTRhMzhhMDIwOTUKKyAgICAgICAgICAgICAg
ICAyMCAgMHgxMDA0ODg4ZDYgdm1FbnRyeVRvSmF2YVNjcmlwdAorICAgICAgICAgICAgICAgIDIx
ICAweDEwMGI4MzY5MCBKU0M6OkludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbShKU0M6OlNvdXJj
ZUNvZGUgY29uc3QmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU09iamVjdCopCisgICAg
ICAgICAgICAgICAgMjIgIDB4MTAwZTM5YTgyIEpTQzo6ZXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U291cmNlQ29kZSBjb25zdCYsIEpTQzo6SlNWYWx1ZSwgV1RGOjpOYWtlZFB0
cjxKU0M6OkV4Y2VwdGlvbj4mKQorICAgICAgICAgICAgICAgIDIzICAweDEwMDAwNzYwNiBqc2Nt
YWluKGludCwgY2hhcioqKQorICAgICAgICAgICAgICAgIDI0ICAweDEwMDAwNjQ0YiBtYWluCisK
KyAgICAgICAgICAgIENlbGw6IDB4MTA4ZThmY2MwICgweDEwOGVmOGM0MDpbMHhjMGU3LCBQcm9n
cmFtQ29kZUJsb2NrLCB7fSwgTm9uQXJyYXksIExlYWZdKSwgU3RydWN0dXJlSUQ6IDQ5MzgzCisg
ICAgICAgICAgICBDZWxsIDB4MTA4ZThmY2MwIHdhcyB2aXNpdGVkIGZyb20gc2NhbiBvZiBDb25z
ZXJ2YXRpdmVTY2FuIHJvb3RzIGF0OgorICAgICAgICAgICAgICAgIDEgICAweDEwMGFjY2FmOCBK
U0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmFwcGVuZChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzIGNv
bnN0JikKKyAgICAgICAgICAgICAgICAyICAgMHgxMDBhYTQyYTIgV1RGOjpEZXRhaWw6OkNhbGxh
YmxlV3JhcHBlcjxKU0M6OkhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpOjokXzMxLCB2b2lkLCBK
U0M6OlNsb3RWaXNpdG9yJj46OmNhbGwoSlNDOjpTbG90VmlzaXRvciYpCisgICAgICAgICAgICAg
ICAgMyAgIDB4MTAwYWMxZGIyIEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1
dGlvblRocmVhZChKU0M6OlNsb3RWaXNpdG9yJiwgSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6U2NoZWR1bGVyUHJlZmVyZW5jZSwgV1RGOjpTY29wZWRMYW1iZGE8V1RGOjpPcHRpb25hbDx1
bnNpZ25lZCBpbnQ+ICgpPikKKyAgICAgICAgICAgICAgICA0ICAgMHgxMDBhOWYyZGUgSlNDOjpI
ZWFwOjpydW5UYXNrSW5QYXJhbGxlbChXVEY6OlJlZlB0cjxXVEY6OlNoYXJlZFRhc2s8dm9pZCAo
SlNDOjpTbG90VmlzaXRvciYpPiwgV1RGOjpSYXdQdHJUcmFpdHM8V1RGOjpTaGFyZWRUYXNrPHZv
aWQgKEpTQzo6U2xvdFZpc2l0b3ImKT4gPiwgV1RGOjpEZWZhdWx0UmVmRGVyZWZUcmFpdHM8V1RG
OjpTaGFyZWRUYXNrPHZvaWQgKEpTQzo6U2xvdFZpc2l0b3ImKT4gPiA+KQorICAgICAgICAgICAg
ICAgIDUgICAweDEwMGFjMTg4ZiBKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRl
KEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OlNjaGVkdWxlclByZWZlcmVuY2UsIFdURjo6
U2NvcGVkTGFtYmRhPFdURjo6T3B0aW9uYWw8dW5zaWduZWQgaW50PiAoKT4pCisgICAgICAgICAg
ICAgICAgNiAgIDB4MTAwYWMxMjVjIEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVD
b252ZXJnZW5jZUltcGwoSlNDOjpTbG90VmlzaXRvciYpCisgICAgICAgICAgICAgICAgNyAgIDB4
MTAwYWMwZjliIEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShK
U0M6OlNsb3RWaXNpdG9yJikKKyAgICAgICAgICAgICAgICA4ICAgMHgxMDBhOTlmMjQgSlNDOjpI
ZWFwOjpydW5GaXhwb2ludFBoYXNlKEpTQzo6R0NDb25kdWN0b3IpCisgICAgICAgICAgICAgICAg
OSAgIDB4MTAwYTk5NDE4IEpTQzo6SGVhcDo6cnVuQ3VycmVudFBoYXNlKEpTQzo6R0NDb25kdWN0
b3IsIEpTQzo6Q3VycmVudFRocmVhZFN0YXRlKikKKyAgICAgICAgICAgICAgICAxMCAgMHgxMDBh
YTMzMmQgV1RGOjpTY29wZWRMYW1iZGFGdW5jdG9yPHZvaWQgKEpTQzo6Q3VycmVudFRocmVhZFN0
YXRlJiksIEpTQzo6SGVhcDo6Y29sbGVjdEluTXV0YXRvclRocmVhZCgpOjokXzA+OjppbXBsRnVu
Y3Rpb24odm9pZCosIEpTQzo6Q3VycmVudFRocmVhZFN0YXRlJikKKyAgICAgICAgICAgICAgICAx
MSAgMHgxMDBhYjg3OTQgSlNDOjpjYWxsV2l0aEN1cnJlbnRUaHJlYWRTdGF0ZShXVEY6OlNjb3Bl
ZExhbWJkYTx2b2lkIChKU0M6OkN1cnJlbnRUaHJlYWRTdGF0ZSYpPiBjb25zdCYpCisgICAgICAg
ICAgICAgICAgMTIgIDB4MTAwYTlkMmNkIEpTQzo6SGVhcDo6Y29sbGVjdEluTXV0YXRvclRocmVh
ZCgpCisgICAgICAgICAgICAgICAgMTMgIDB4MTAwYTk5MjE3IEpTQzo6SGVhcDo6d2FpdEZvckNv
bGxlY3Rpb24odW5zaWduZWQgbG9uZyBsb25nKQorICAgICAgICAgICAgICAgIDE0ICAweDEwMGE5
OGNiMSBKU0M6OkhlYXA6OmNvbGxlY3ROb3coSlNDOjpTeW5jaHJvbm91c25lc3MsIEpTQzo6R0NS
ZXF1ZXN0KQorICAgICAgICAgICAgICAgIDE1ICAweDEwMGFiN2I0ZCBKU0M6OkxvY2FsQWxsb2Nh
dG9yOjphbGxvY2F0ZVNsb3dDYXNlKEpTQzo6SGVhcCYsIEpTQzo6R0NEZWZlcnJhbENvbnRleHQq
LCBKU0M6OkFsbG9jYXRpb25GYWlsdXJlTW9kZSkKKyAgICAgICAgICAgICAgICAxNiAgMHgxMDBl
YzA3ODUgdm9pZCogSlNDOjphbGxvY2F0ZUNlbGw8SlNDOjpKU0RhdGFWaWV3PihKU0M6OkhlYXAm
LCB1bnNpZ25lZCBsb25nKQorICAgICAgICAgICAgICAgIDE3ICAweDEwMGVjMDYyOSBKU0M6OkpT
RGF0YVZpZXc6OmNyZWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqLCBX
VEY6OlJlZlB0cjxKU0M6OkFycmF5QnVmZmVyLCBXVEY6OlJhd1B0clRyYWl0czxKU0M6OkFycmF5
QnVmZmVyPiwgV1RGOjpEZWZhdWx0UmVmRGVyZWZUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gPiYm
LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKKyAgICAgICAgICAgICAgICAxOCAgMHgxMDBm
ODkzZDYgSlNDOjpKU09iamVjdCogSlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdX
aXRoQXJndW1lbnRzPEpTQzo6SlNEYXRhVmlldz4oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiwgbG9uZyBsb25nLCB1bnNpZ25lZCBpbnQsIFdURjo6T3B0aW9uYWw8dW5zaWdu
ZWQgaW50PikKKyAgICAgICAgICAgICAgICAxOSAgMHgxMDBmNzMxZGMgSlNDOjpjb25zdHJ1Y3RE
YXRhVmlldyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKQorICAgICAgICAg
ICAgICAgIDIwICAweDVlNGEzOGEwMTBjNworICAgICAgICAgICAgICAgIDIxICAweDVlNGEzOGEw
MjA5NQorICAgICAgICAgICAgICAgIDIyICAweDEwMDQ4ODhkNiB2bUVudHJ5VG9KYXZhU2NyaXB0
CisgICAgICAgICAgICAgICAgMjMgIDB4MTAwYjgzNjkwIEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVQcm9ncmFtKEpTQzo6U291cmNlQ29kZSBjb25zdCYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkpTT2JqZWN0KikKKyAgICAgICAgICAgICAgICAyNCAgMHgxMDBlMzlhODIgSlNDOjpldmFs
dWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTb3VyY2VDb2RlIGNvbnN0JiwgSlNDOjpK
U1ZhbHVlLCBXVEY6Ok5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYpCisgICAgICAgICAgICAgICAg
MjUgIDB4MTAwMDA3NjA2IGpzY21haW4oaW50LCBjaGFyKiopCisgICAgICAgICAgICAgICAgMjYg
IDB4MTAwMDA2NDRiIG1haW4KKworICAgICAgICBOb3RlIHRoYXQgaW4gdGhpcyBleGFtcGxlLCB0
aGUgMm5kIHN0YWNrIHRyYWNlIHdhcyBmb3IgYW4gb3BhcXVlIHJvb3QuICBUaGUgdmVyaWZpZXIK
KyAgICAgICAgYWxzbyBub3RlZCB0aGF0IHRoZSBvcGFxdWUgcm9vdCAod2hpY2ggd2FzIGFkZGVk
IGZvciB0aGUgdmVyaWZpZXIgR0MpIHdhcyBub3QgYWRkZWQKKyAgICAgICAgZm9yIHRoZSByZWFs
IEdDLiAgVGhpcyBwb2ludGVkIHRvIHRoZSBidWcgdGhhdCBjYXVzZWQgdGhlIGVycm9yICh0aGlz
IGJ1ZyB3YXMgZml4ZWQKKyAgICAgICAgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMzI0MSkuCisKKyAgICAgICAgQWRkaXRpb25hbCBjaGFuZ2VzIGluIHRoaXMg
cGF0Y2g6CisKKyAgICAgICAgMS4gUmVuYW1lZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpDb250ZXh0
IHRvIFJlZmVycmVyQ29udGV4dC4KKworICAgICAgICAyLiBJbnRyb2R1Y2VkIEFic3RyYWN0U2xv
dFZpc2l0b3I6OlJlZmVycmVyVG9rZW4sIHdoaWNoIGlzIGFuIGFic3RyYWN0aW9uIGZvcgorICAg
ICAgICAgICBlaXRoZXIgYSBIZWFwQ2VsbCosIGFuIG9wYXF1ZSByb290LCBvciBhIEdDIHJvb3Qu
ICBSZWZlcnJlckNvbnRleHQgbm93IHRyYWNrcworICAgICAgICAgICBhIFJlZmVycmVyVG9rZW4g
aW5zdGVhZCBvZiBhIEhlYXBDZWxsKi4KKworICAgICAgICAqIGhlYXAvQWJzdHJhY3RTbG90Vmlz
aXRvci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOjpSZWZlcnJlclRva2Vu
OjpSZWZlcnJlclRva2VuKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6UmVm
ZXJyZXJUb2tlbjo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0
U2xvdFZpc2l0b3I6OlJlZmVycmVyVG9rZW46Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAgIChK
U0M6OkFic3RyYWN0U2xvdFZpc2l0b3I6OlJlZmVycmVyVG9rZW46OmlzSGVhcENlbGwgY29uc3Qp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOjpSZWZlcnJlclRva2VuOjppc09w
YXF1ZVJvb3QgY29uc3QpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOjpSZWZl
cnJlclRva2VuOjppc1Jvb3RNYXJrUmVhc29uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvcjo6UmVmZXJyZXJDb250ZXh0OjpyZWZlcnJlciBjb25zdCk6CisgICAgICAg
IChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I6OlJlZmVycmVyQ29udGV4dDo6c2V0UmVmZXJyZXIp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yOjpSZWZlcnJlckNvbnRleHQ6Omlz
T3BhcXVlUm9vdENvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdFNsb3RWaXNp
dG9yOjpkaWRBZGRPcGFxdWVSb290KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
cjo6ZGlkRmluZE9wYXF1ZVJvb3QpOgorICAgICAgICAoSlNDOjpTZXRSb290TWFya1JlYXNvblNj
b3BlOjpTZXRSb290TWFya1JlYXNvblNjb3BlKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90
VmlzaXRvcjo6Q29udGV4dDo6Y2VsbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9B
YnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpSZWZlcnJlclRva2Vu
OjpSZWZlcnJlclRva2VuKToKKyAgICAgICAgKEpTQzo6UmVmZXJyZXJUb2tlbjo6YXNDZWxsIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6UmVmZXJyZXJUb2tlbjo6YXNPcGFxdWVSb290IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6UmVmZXJyZXJUb2tlbjo6YXNSb290TWFya1JlYXNvbiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I6OlJlZmVycmVyQ29udGV4dDo6UmVmZXJy
ZXJDb250ZXh0KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvcjo6UmVmZXJyZXJD
b250ZXh0Ojp+UmVmZXJyZXJDb250ZXh0KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90Vmlz
aXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0U2xvdFZp
c2l0b3I6OnJlZmVycmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRv
cjo6Q29udGV4dDo6Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFic3RyYWN0U2xv
dFZpc2l0b3I6OkNvbnRleHQ6On5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RTbG90VmlzaXRvcjo6cGFyZW50Q2VsbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKToK
KyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oOgorICAgICAgICAqIGhlYXAvVmVyaWZp
ZXJTbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlckRhdGE6Ok1hcmtlckRhdGEp
OgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9ja0RhdGE6Om1h
cmtlckRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpQcmVj
aXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpWZXJp
ZmllclNsb3RWaXNpdG9yOjpPcGFxdWVSb290RGF0YTo6bWFya2VyRGF0YSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6Ok9wYXF1ZVJvb3REYXRhOjphZGRNYXJrZXJE
YXRhKToKKyAgICAgICAgKEpTQzo6VmVyaWZpZXJTbG90VmlzaXRvcjo6VmVyaWZpZXJTbG90Vmlz
aXRvcik6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmRpZEFkZE9wYXF1ZVJv
b3QpOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpkaWRGaW5kT3BhcXVlUm9v
dCk6CisgICAgICAgIChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXAgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YSk6CisgICAgICAg
IChKU0M6OlZlcmlmaWVyU2xvdFZpc2l0b3I6OnRlc3RBbmRTZXRNYXJrZWQpOgorICAgICAgICAq
IGhlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5oOgorICAgICAgICAoSlNDOjpWZXJpZmllclNsb3RW
aXNpdG9yOjpNYXJrZXJEYXRhOjpyZWZlcnJlciBjb25zdCk6CisgICAgICAgIChKU0M6OlZlcmlm
aWVyU2xvdFZpc2l0b3I6Ok1hcmtlckRhdGE6OnN0YWNrIGNvbnN0KToKKyAgICAgICAgKiBoZWFw
L1dlYWtCbG9jay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNp
dCk6CisKIDIwMjEtMDMtMTcgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29t
PgogCiAgICAgICAgIFtXZWJJRExdIEZpeCBjb252ZXJ0UmVjb3JkKCkgdG8gdGhyb3cgb24gZW51
bWVyYWJsZSBzeW1ib2wgfGtleXwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fi
c3RyYWN0U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDI3NDU5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsMTUgKzUzLDU5IEBAIGNsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3IgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEFic3RyYWN0U2xvdFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIGNsYXNzIENvbnRleHQgeworICAgIGVudW0gT3BhcXVl
Um9vdFRhZyB7IE9wYXF1ZVJvb3QgfTsKKworICAgIGNsYXNzIFJlZmVycmVyVG9rZW4geworICAg
IHB1YmxpYzoKKyAgICAgICAgUmVmZXJyZXJUb2tlbigpID0gZGVmYXVsdDsKKyAgICAgICAgUmVm
ZXJyZXJUb2tlbihzdGQ6Om51bGxwdHJfdCkgeyB9CisgICAgICAgIFJlZmVycmVyVG9rZW4oSGVh
cENlbGwqKTsKKyAgICAgICAgUmVmZXJyZXJUb2tlbihPcGFxdWVSb290VGFnLCB2b2lkKiBvcGFx
dWVSb290KTsKKyAgICAgICAgUmVmZXJyZXJUb2tlbihSb290TWFya1JlYXNvbik7CisKKyAgICAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQorICAg
ICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2JpdHM7IH0KKworICAgICAg
ICBIZWFwQ2VsbCogYXNDZWxsKCkgY29uc3Q7CisgICAgICAgIHZvaWQqIGFzT3BhcXVlUm9vdCgp
IGNvbnN0OworICAgICAgICBSb290TWFya1JlYXNvbiBhc1Jvb3RNYXJrUmVhc29uKCkgY29uc3Q7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBlbnVtIHsKKyAgICAgICAgICAgIEhlYXBDZWxsVG9r
ZW4gPSAwLAorICAgICAgICAgICAgT3BhcXVlUm9vdFRva2VuID0gMGIwMSwKKyAgICAgICAgICAg
IFJvb3RNYXJrUmVhc29uVG9rZW4gPSAwYjEwLAorICAgICAgICB9OworCisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludHB0cl90IHRva2VuVHlwZVNoaWZ0ID0gMjsKKyAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3QgdG9rZW5UeXBlTWFzayA9IDB4MzsKKworICAgICAgICBib29s
IGlzSGVhcENlbGwoKSBjb25zdCB7IHJldHVybiAobV9iaXRzICYgdG9rZW5UeXBlTWFzaykgPT0g
SGVhcENlbGxUb2tlbjsgfQorICAgICAgICBib29sIGlzT3BhcXVlUm9vdCgpIGNvbnN0IHsgcmV0
dXJuIChtX2JpdHMgJiB0b2tlblR5cGVNYXNrKSA9PSBPcGFxdWVSb290VG9rZW47IH0KKyAgICAg
ICAgYm9vbCBpc1Jvb3RNYXJrUmVhc29uKCkgY29uc3QgeyByZXR1cm4gKG1fYml0cyAmIHRva2Vu
VHlwZU1hc2spID09IFJvb3RNYXJrUmVhc29uVG9rZW47IH0KKyAgICAgICAgdWludHB0cl90IG1f
Yml0cyB7IDAgfTsKKyAgICB9OworCisgICAgY2xhc3MgUmVmZXJyZXJDb250ZXh0IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhlYXBDZWxsKik7
Ci0gICAgICAgIH5Db250ZXh0KCk7Ci0gICAgICAgIEhlYXBDZWxsKiBjZWxsKCkgY29uc3QgeyBy
ZXR1cm4gbV9jZWxsOyB9CisgICAgICAgIFJlZmVycmVyQ29udGV4dChBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgUmVmZXJyZXJUb2tlbik7CisgICAgICAgIFJlZmVycmVyQ29udGV4dChBYnN0cmFjdFNs
b3RWaXNpdG9yJiwgT3BhcXVlUm9vdFRhZyk7CisgICAgICAgIH5SZWZlcnJlckNvbnRleHQoKTsK
KworICAgICAgICBSZWZlcnJlclRva2VuIHJlZmVycmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZWZl
cnJlcjsgfQorICAgICAgICB2b2lkIHNldFJlZmVycmVyKFJlZmVycmVyVG9rZW4gcmVmZXJyZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9yZWZlcnJlcik7CisgICAgICAgICAg
ICBtX3JlZmVycmVyID0gcmVmZXJyZXI7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzT3Bh
cXVlUm9vdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzT3BhcXVlUm9vdENvbnRleHQ7IH0K
KwogICAgIHByaXZhdGU6CiAgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsK
LSAgICAgICAgSGVhcENlbGwqIG1fY2VsbDsKLSAgICAgICAgQ29udGV4dCogbV9wcmV2aW91czsK
KyAgICAgICAgUmVmZXJyZXJUb2tlbiBtX3JlZmVycmVyOworICAgICAgICBSZWZlcnJlckNvbnRl
eHQqIG1fcHJldmlvdXM7CisgICAgICAgIGJvb2wgbV9pc09wYXF1ZVJvb3RDb250ZXh0IHsgZmFs
c2UgfTsKICAgICB9OwogCiAgICAgY2xhc3MgU3VwcHJlc3NHQ1ZlcmlmaWVyU2NvcGUgewpAQCAt
MTYzLDcgKzIwNywxMCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgaW5saW5lIEFic3RyYWN0
U2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcgY29kZU5hbWUsIENvbmN1cnJlbnRQdHJIYXNoU2V0
Jik7CiAKLSAgICBIZWFwQ2VsbCogcGFyZW50Q2VsbCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBkaWRBZGRPcGFxdWVSb290KHZvaWQqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZE9w
YXF1ZVJvb3Qodm9pZCopIHsgfQorCisgICAgUmVmZXJyZXJUb2tlbiByZWZlcnJlcigpIGNvbnN0
OwogICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3Rh
Y2s7CkBAIC0xNzIsNyArMjE5LDcgQEAgcHJvdGVjdGVkOgogICAgIHNpemVfdCBtX3Zpc2l0Q291
bnQgeyAwIH07CiAKICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgQ29udGV4dCogbV9jb250ZXh0IHsg
bnVsbHB0ciB9OworICAgIFJlZmVycmVyQ29udGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9Owog
ICAgIENTdHJpbmcgbV9jb2RlTmFtZTsKIAogICAgIE1hcmtpbmdDb25zdHJhaW50KiBtX2N1cnJl
bnRDb25zdHJhaW50IHsgbnVsbHB0ciB9OwpAQCAtMTgyLDE1ICsyMjksMTggQEAgcHJvdGVjdGVk
OgogICAgIFJvb3RNYXJrUmVhc29uIG1fcm9vdE1hcmtSZWFzb24geyBSb290TWFya1JlYXNvbjo6
Tm9uZSB9OwogICAgIGJvb2wgbV9zdXBwcmVzc1ZlcmlmaWVyIHsgZmFsc2UgfTsKICAgICBib29s
IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dp
bmcgbW9kZS4KKyAgICBib29sIG1fbmVlZHNFeHRyYU9wYXF1ZVJvb3RIYW5kbGluZyB7IGZhbHNl
IH07CiAKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CiB9OwogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogY2xhc3MgU2V0Um9vdE1hcmtSZWFzb25TY29wZSB7
CiBwdWJsaWM6Ci0gICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZShBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBSb290TWFya1JlYXNvbiByZWFzb24pCisgICAgU2V0Um9vdE1hcmtSZWFzb25T
Y29wZShWaXNpdG9yJiB2aXNpdG9yLCBSb290TWFya1JlYXNvbiByZWFzb24pCiAgICAgICAgIDog
bV92aXNpdG9yKHZpc2l0b3IpCiAgICAgICAgICwgbV9wcmV2aW91c1JlYXNvbih2aXNpdG9yLnJv
b3RNYXJrUmVhc29uKCkpCisgICAgICAgICwgbV9jb250ZXh0KHZpc2l0b3IsIHJlYXNvbikKICAg
ICB7CiAgICAgICAgIG1fdmlzaXRvci5zZXRSb290TWFya1JlYXNvbihyZWFzb24pOwogICAgIH0K
QEAgLTIwMSw4ICsyNTEsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFic3Ry
YWN0U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKKyAgICBWaXNpdG9yJiBtX3Zpc2l0b3I7CiAgICAg
Um9vdE1hcmtSZWFzb24gbV9wcmV2aW91c1JlYXNvbjsKKyAgICB0eXBlbmFtZSBWaXNpdG9yOjpS
ZWZlcnJlckNvbnRleHQgbV9jb250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZp
c2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI3NDU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDE1ICszMiw2NCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIEFic3RyYWN0U2xvdFZp
c2l0b3I6OkNvbnRleHQ6OkNvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgSGVh
cENlbGwqIGNlbGwpCit1c2luZyBSZWZlcnJlclRva2VuID0gQWJzdHJhY3RTbG90VmlzaXRvcjo6
UmVmZXJyZXJUb2tlbjsKKworaW5saW5lIFJlZmVycmVyVG9rZW46OlJlZmVycmVyVG9rZW4oSGVh
cENlbGwqIGNlbGwpCisgICAgOiBtX2JpdHMoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkg
fCBIZWFwQ2VsbFRva2VuKQoreworfQorCitpbmxpbmUgUmVmZXJyZXJUb2tlbjo6UmVmZXJyZXJU
b2tlbihPcGFxdWVSb290VGFnLCB2b2lkKiBvcGFxdWVSb290KQorICAgIDogbV9iaXRzKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KG9wYXF1ZVJvb3QpIHwgT3BhcXVlUm9vdFRva2VuKQoreworICAg
IEFTU0VSVChvcGFxdWVSb290KTsKK30KKworaW5saW5lIFJlZmVycmVyVG9rZW46OlJlZmVycmVy
VG9rZW4oUm9vdE1hcmtSZWFzb24gcmVhc29uKQorICAgIDogbV9iaXRzKChzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KHJlYXNvbikgPDwgdG9rZW5UeXBlU2hpZnQpIHwgUm9vdE1hcmtSZWFzb25Ub2tl
bikKK3sKK30KKworaW5saW5lIEhlYXBDZWxsKiBSZWZlcnJlclRva2VuOjphc0NlbGwoKSBjb25z
dAoreworICAgIHJldHVybiBpc0hlYXBDZWxsKCkgPyBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPiht
X2JpdHMgJiB+dG9rZW5UeXBlTWFzaykgOiBudWxscHRyOworfQorCitpbmxpbmUgdm9pZCogUmVm
ZXJyZXJUb2tlbjo6YXNPcGFxdWVSb290KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNPcGFxdWVS
b290KCkgPyBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihtX2JpdHMgJiB+dG9rZW5UeXBlTWFzaykg
OiBudWxscHRyOworfQorCitpbmxpbmUgUm9vdE1hcmtSZWFzb24gUmVmZXJyZXJUb2tlbjo6YXNS
b290TWFya1JlYXNvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzUm9vdE1hcmtSZWFzb24oKSA/
IHN0YXRpY19jYXN0PFJvb3RNYXJrUmVhc29uPihtX2JpdHMgPj4gdG9rZW5UeXBlU2hpZnQpIDog
Um9vdE1hcmtSZWFzb246Ok5vbmU7Cit9CisKK2lubGluZSBBYnN0cmFjdFNsb3RWaXNpdG9yOjpS
ZWZlcnJlckNvbnRleHQ6OlJlZmVycmVyQ29udGV4dChBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBSZWZlcnJlclRva2VuIHJlZmVycmVyKQorICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisg
ICAgLCBtX3JlZmVycmVyKHJlZmVycmVyKQoreworICAgIG1fcHJldmlvdXMgPSBtX3Zpc2l0b3Iu
bV9jb250ZXh0OworICAgIGlmIChtX3ByZXZpb3VzKSB7CisgICAgICAgIC8vIEFuIE9wYXF1ZVJv
b3QgY29udGV4dHMgY2FuIG9ubHkgYmUgb24gdGhlIGxlYWYuCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX3ByZXZpb3VzLT5tX2lzT3BhcXVlUm9vdENvbnRleHQpOworICAgIH0KKyAgICBtX3Zp
c2l0b3IubV9jb250ZXh0ID0gdGhpczsKK30KKworaW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6
OlJlZmVycmVyQ29udGV4dDo6UmVmZXJyZXJDb250ZXh0KEFic3RyYWN0U2xvdFZpc2l0b3ImIHZp
c2l0b3IsIEFic3RyYWN0U2xvdFZpc2l0b3I6Ok9wYXF1ZVJvb3RUYWcpCiAgICAgOiBtX3Zpc2l0
b3IodmlzaXRvcikKLSAgICAsIG1fY2VsbChjZWxsKQorICAgICwgbV9pc09wYXF1ZVJvb3RDb250
ZXh0KHRydWUpCiB7CiAgICAgbV9wcmV2aW91cyA9IG1fdmlzaXRvci5tX2NvbnRleHQ7CisgICAg
aWYgKG1fcHJldmlvdXMpIHsKKyAgICAgICAgLy8gQW4gT3BhcXVlUm9vdCBjb250ZXh0cyBjYW4g
b25seSBiZSBvbiB0aGUgbGVhZi4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcHJldmlvdXMt
Pm1faXNPcGFxdWVSb290Q29udGV4dCk7CisgICAgfQogICAgIG1fdmlzaXRvci5tX2NvbnRleHQg
PSB0aGlzOwogfQogCi1pbmxpbmUgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dDo6fkNvbnRl
eHQoKQoraW5saW5lIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJlZmVycmVyQ29udGV4dDo6flJlZmVy
cmVyQ29udGV4dCgpCiB7CiAgICAgbV92aXNpdG9yLm1fY29udGV4dCA9IG1fcHJldmlvdXM7CiB9
CkBAIC03NSwxMyArMTI0LDIwIEBAIGlubGluZSBib29sIEFic3RyYWN0U2xvdFZpc2l0b3I6OmFk
ZE9wYXEKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9vcGFxdWVSb290cy5hZGQo
cHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChVTkxJS0VMWShtX25lZWRzRXh0
cmFPcGFxdWVSb290SGFuZGxpbmcpKQorICAgICAgICBkaWRBZGRPcGFxdWVSb290KHB0cik7CiAg
ICAgbV92aXNpdENvdW50Kys7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGlubGluZSBib29sIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsKKyAgICBib29sIGZvdW5k
ID0gbV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworICAgIGlmIChVTkxJS0VMWShtX25lZWRz
RXh0cmFPcGFxdWVSb290SGFuZGxpbmcpKSB7CisgICAgICAgIGF1dG8qIG5vbkNvbnN0VGhpcyA9
IGNvbnN0X2Nhc3Q8QWJzdHJhY3RTbG90VmlzaXRvcio+KHRoaXMpOworICAgICAgICBub25Db25z
dFRoaXMtPmRpZEZpbmRPcGFxdWVSb290KHB0cik7CisgICAgfQorICAgIHJldHVybiBmb3VuZDsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEzOSwxMSArMTk1LDExIEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjoKICAgICAgICAgYXBwZW5kVW5iYXJyaWVy
ZWQoc2xvdFtpXSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSGVhcENlbGwqIEFic3RyYWN0U2xvdFZp
c2l0b3I6OnBhcmVudENlbGwoKSBjb25zdAorQUxXQVlTX0lOTElORSBSZWZlcnJlclRva2VuIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OnJlZmVycmVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1fY29udGV4
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Y2VsbCgp
OworICAgIHJldHVybiBtX2NvbnRleHQtPnJlZmVycmVyKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
dm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjpyZXNldCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjc0NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NjEsOCArMjc2MSwxMCBAQCB2b2lk
IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAKICAgICAgICAgICAgICAgICBTZXRSb290TWFy
a1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6Q29uc2VydmF0
aXZlU2Nhbik7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9v
dHMpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZpc2l0b3Ip
KQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX3ZlcmlmaWVyU2xvdFZpc2l0b3IpKSB7
CisgICAgICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKCpt
X3ZlcmlmaWVyU2xvdFZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsK
ICAgICAgICAgICAgICAgICAgICAgbV92ZXJpZmllclNsb3RWaXNpdG9yLT5hcHBlbmQoY29uc2Vy
dmF0aXZlUm9vdHMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICAgICAgICAgIC8vIEpJVFN0dWJS
b3V0aW5lcyBtdXN0IGJlIHZpc2l0ZWQgYWZ0ZXIgc2Nhbm5pbmcgQ29uc2VydmF0aXZlUm9vdHMg
c2luY2UgSklUU3R1YlJvdXRpbmVzIGRlcGVuZCBvbiB0aGUgaG9vayBleGVjdXRlZCBkdXJpbmcg
Z2F0aGVyaW5nIENvbnNlcnZhdGl2ZVJvb3RzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gMjc0NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzEsNiArNDMxLDcgQEAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgU3dlZXBpbmdTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSW5jcmVtZW50YWxTd2Vl
cGVyOwogICAgIGZyaWVuZCBjbGFzcyBWTTsKKyAgICBmcmllbmQgY2xhc3MgVmVyaWZpZXJTbG90
VmlzaXRvcjsKICAgICBmcmllbmQgY2xhc3MgV2Vha1NldDsKIAogICAgIGNsYXNzIEhlYXBUaHJl
YWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlz
aW9uIDI3NDU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDEwIEBAIGNsYXNzIFNsb3RWaXNpdG9yIGZpbmFs
IDogcHVibGljIEFic3RyYWMKICAgICBmcmllbmQgY2xhc3MgSGVhcDsKIAogcHVibGljOgotICAg
IGNsYXNzIENvbnRleHQgeworICAgIGNsYXNzIFJlZmVycmVyQ29udGV4dCB7CiAgICAgcHVibGlj
OgotICAgICAgICBBTFdBWVNfSU5MSU5FIENvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIEhl
YXBDZWxsKikgeyB9CisgICAgICAgIEFMV0FZU19JTkxJTkUgUmVmZXJyZXJDb250ZXh0KEFic3Ry
YWN0U2xvdFZpc2l0b3ImLCBSZWZlcnJlclRva2VuKSB7IH0KKyAgICAgICAgQUxXQVlTX0lOTElO
RSBSZWZlcnJlckNvbnRleHQoQWJzdHJhY3RTbG90VmlzaXRvciYsIE9wYXF1ZVJvb3RUYWcpIHsg
fQogICAgIH07CiAKICAgICBjbGFzcyBTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSB7CkBAIC0yMTks
OCArMjIwLDYgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5JiBjb3JyZXNwb25kaW5n
R2xvYmFsU3RhY2soTWFya1N0YWNrQXJyYXkmKTsKIAotICAgIGJvb2wgbV9pc0luUGFyYWxsZWxN
b2RlIHsgZmFsc2UgfTsKLQogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247CiAKICAg
ICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQgeyAwIH07CkBAIC0yMzIsNiArMjMxLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIG1faXNGaXJzdFZpc2l0IHsgZmFsc2UgfTsKICAgICBib29sIG1fbXV0YXRv
cklzU3RvcHBlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11
dGF0b3IgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlIHsgZmFsc2UgfTsK
ICAgICBMb2NrIG1fcmlnaHRUb1J1bjsKICAgICAKICAgICAvLyBQdXQgcGFkZGluZyBoZXJlIHRv
IG1pdGlnYXRlIGZhbHNlIHNoYXJpbmcgYmV0d2VlbiBtdWx0aXBsZSBTbG90VmlzaXRvcnMuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvck1hY3Jvcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yTWFjcm9zLmgJ
KHJldmlzaW9uIDI3NDU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yTWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOiBcCiAj
ZGVmaW5lIERFRklORV9WSVNJVF9DSElMRFJFTl9XSVRIX01PRElGSUVSKHByZU1vZGlmaWVyLCBj
bGFzc05hbWUpIFwKICAgICBwcmVNb2RpZmllciB2b2lkIGNsYXNzTmFtZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpIFwKICAgICB7IFwK
LSAgICAgICAgQWJzdHJhY3RTbG90VmlzaXRvcjo6Q29udGV4dCBjb250ZXh0KHZpc2l0b3IsIGNl
bGwpOyBcCisgICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OlJlZmVycmVyQ29udGV4dCBjb250
ZXh0KHZpc2l0b3IsIGNlbGwpOyBcCiAgICAgICAgIHZpc2l0Q2hpbGRyZW5JbXBsKGNlbGwsIHZp
c2l0b3IpOyBcCiAgICAgfSBcCiAgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdENoaWxk
cmVuSW1wbChjZWxsLCB2aXNpdG9yKTsgfSBcCkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOiBc
CiAjZGVmaW5lIERFRklORV9WSVNJVF9PVVRQVVRfQ09OU1RSQUlOVFNfV0lUSF9NT0RJRklFUihw
cmVNb2RpZmllciwgY2xhc3NOYW1lKSBcCiAgICAgcHJlTW9kaWZpZXIgdm9pZCBjbGFzc05hbWU6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMoSlNDZWxsKiBjZWxsLCBBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBcCiAgICAgeyBcCi0gICAgICAgIEFic3RyYWN0U2xvdFZpc2l0b3I6OkNvbnRl
eHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsgXAorICAgICAgICBBYnN0cmFjdFNsb3RWaXNpdG9y
OjpSZWZlcnJlckNvbnRleHQgY29udGV4dCh2aXNpdG9yLCBjZWxsKTsgXAogICAgICAgICB2aXNp
dE91dHB1dENvbnN0cmFpbnRzSW1wbChjZWxsLCB2aXNpdG9yKTsgXAogICAgIH0gXAogICAgIHBy
ZU1vZGlmaWVyIHZvaWQgY2xhc3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRPdXRwdXRDb25zdHJhaW50c0ltcGwo
Y2VsbCwgdmlzaXRvcik7IH0gXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmVy
aWZpZXJTbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVmVyaWZpZXJTbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI3NDU5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw5ICs0MSw5IEBAIHVzaW5nIE1hcmtlckRhdGEgPSBWZXJpZmllclNsb3RWaXNp
dG9yOjoKIAogY29uc3RleHByIGludCBtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUgPSAx
MDA7CiAKLU1hcmtlckRhdGE6Ok1hcmtlckRhdGEoSGVhcENlbGwqIHBhcmVudCwgc3RkOjp1bmlx
dWVfcHRyPFN0YWNrVHJhY2U+JiYgc3RhY2spCi0gICAgOiBwYXJlbnQocGFyZW50KQotICAgICwg
c3RhY2soV1RGTW92ZShzdGFjaykpCitNYXJrZXJEYXRhOjpNYXJrZXJEYXRhKFJlZmVycmVyVG9r
ZW4gcmVmZXJyZXIsIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmIHN0YWNrKQorICAgIDog
bV9yZWZlcnJlcihyZWZlcnJlcikKKyAgICAsIG1fc3RhY2soV1RGTW92ZShzdGFjaykpCiB7CiB9
CiAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpNYXJrZWRCbG9j
a0RhdAogY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90VmlzaXRvcjo6TWFya2VkQmxvY2tE
YXRhOjptYXJrZXJEYXRhKHVuc2lnbmVkIGF0b21OdW1iZXIpIGNvbnN0CiB7CiAgICAgYXV0byYg
bWFya2VyID0gbV9tYXJrZXJzW2F0b21OdW1iZXJdOwotICAgIGlmIChtYXJrZXIuc3RhY2spCisg
ICAgaWYgKG1hcmtlci5zdGFjaygpKQogICAgICAgICByZXR1cm4gJm1hcmtlcjsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KQEAgLTc0LDcgKzc0LDcgQEAgVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJl
Y2lzZUFsbG9jYXRpb25EYQogCiBjb25zdCBNYXJrZXJEYXRhKiBWZXJpZmllclNsb3RWaXNpdG9y
OjpQcmVjaXNlQWxsb2NhdGlvbkRhdGE6Om1hcmtlckRhdGEoKSBjb25zdAogewotICAgIGlmICht
X21hcmtlci5zdGFjaykKKyAgICBpZiAobV9tYXJrZXIuc3RhY2soKSkKICAgICAgICAgcmV0dXJu
ICZtX21hcmtlcjsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTg0LDkgKzg0LDIyIEBAIHZv
aWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6UHJlY2lzZUFsbG9jYXQKICAgICBtX21hcmtlciA9IFdU
Rk1vdmUobWFya2VyKTsKIH0KIAorY29uc3QgTWFya2VyRGF0YSogVmVyaWZpZXJTbG90VmlzaXRv
cjo6T3BhcXVlUm9vdERhdGE6Om1hcmtlckRhdGEoKSBjb25zdAoreworICAgIGlmIChtX21hcmtl
ci5zdGFjaygpKQorICAgICAgICByZXR1cm4gJm1fbWFya2VyOworICAgIHJldHVybiBudWxscHRy
OworfQorCit2b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6Ok9wYXF1ZVJvb3REYXRhOjphZGRNYXJr
ZXJEYXRhKE1hcmtlckRhdGEmJiBtYXJrZXIpCit7CisgICAgbV9tYXJrZXIgPSBXVEZNb3ZlKG1h
cmtlcik7Cit9CisKIFZlcmlmaWVyU2xvdFZpc2l0b3I6OlZlcmlmaWVyU2xvdFZpc2l0b3IoSGVh
cCYgaGVhcCkKICAgICA6IEJhc2UoaGVhcCwgIlZlcmlmaWVyIiwgbV9vcGFxdWVSb290U3RvcmFn
ZSkKIHsKKyAgICBtX25lZWRzRXh0cmFPcGFxdWVSb290SGFuZGxpbmcgPSB0cnVlOwogfQogCiBW
ZXJpZmllclNsb3RWaXNpdG9yOjp+VmVyaWZpZXJTbG90VmlzaXRvcigpCkBAIC0xNjksNiArMTgy
LDI0IEBAIHZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW4KICAgICBhcHBl
bmRVbmJhcnJpZXJlZChjZWxsKTsKIH0KIAordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkaWRB
ZGRPcGFxdWVSb290KHZvaWQqIG9wYXF1ZVJvb3QpCit7CisgICAgaWYgKCFPcHRpb25zOjp2ZXJi
b3NlVmVyaWZ5R0MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp1bmlxdWVfcHRyPE9w
YXF1ZVJvb3REYXRhPiYgZGF0YSA9IG1fb3BhcXVlUm9vdE1hcC5hZGQob3BhcXVlUm9vdCwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghZGF0YSkKKyAgICAgICAgZGF0YSA9IG1h
a2VVbmlxdWU8T3BhcXVlUm9vdERhdGE+KCk7CisgICAgZGF0YS0+YWRkTWFya2VyRGF0YSh7IHJl
ZmVycmVyKCksIFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0Zy
YW1lc1RvQ2FwdHVyZSwgMSkgfSk7Cit9CisKK3ZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZGlk
RmluZE9wYXF1ZVJvb3Qodm9pZCogb3BhcXVlUm9vdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2NvbnRleHQgJiYgbV9jb250ZXh0LT5pc09wYXF1ZVJvb3RDb250ZXh0KCkpOworICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2NvbnRleHQtPnJlZmVycmVyKCkpOworICAgIG1fY29udGV4dC0+c2V0UmVm
ZXJyZXIoUmVmZXJyZXJUb2tlbihPcGFxdWVSb290LCBvcGFxdWVSb290KSk7Cit9CisKIHZvaWQg
VmVyaWZpZXJTbG90VmlzaXRvcjo6ZHJhaW4oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fbXV0
YXRvclN0YWNrLmlzRW1wdHkoKSk7CkBAIC0xODIsNDMgKzIxMyw5MyBAQCB2b2lkIFZlcmlmaWVy
U2xvdFZpc2l0b3I6OmRyYWluKCkKICAgICAgICAgdmlzaXRDaGlsZHJlbihzdGFjay5yZW1vdmVM
YXN0KCkpOwogfQogCi12b2lkIFZlcmlmaWVyU2xvdFZpc2l0b3I6OmR1bXBNYXJrZXJEYXRhKEhl
YXBDZWxsKiBjZWxsKQordm9pZCBWZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7Ci0gICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIGR1bXBNYXJrZXJEYXRhKGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCksIGNl
bGwpOwotICAgIHJldHVybiBkdW1wTWFya2VyRGF0YShjZWxsLT5tYXJrZWRCbG9jaygpLCBjZWxs
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpOworICAgIG91
dC5wcmludCgiVmVyaWZpZXIgY29sbGVjdG9yIHN0YWNrOiAiLCBtX2NvbGxlY3RvclN0YWNrLnNp
emUoKSk7CiB9CiAKLXZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoUHJl
Y2lzZUFsbG9jYXRpb24mIGFsbG9jYXRpb24sIEhlYXBDZWxsKiBjZWxsKQordm9pZCBWZXJpZmll
clNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShIZWFwQ2VsbCogY2VsbCkKIHsKLSAgICBhdXRv
IGl0ZXJhdG9yID0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5maW5kKCZhbGxvY2F0aW9uKTsKLSAg
ICBpZiAoaXRlcmF0b3IgIT0gbV9wcmVjaXNlQWxsb2NhdGlvbk1hcC5lbmQoKSkgewotICAgICAg
ICBkdW1wTWFya2VyRGF0YShjZWxsLCBpdGVyYXRvci0+dmFsdWUtPm1hcmtlckRhdGEoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZGF0YUxvZ0xuKCJDZWxsICIsIFJhd1BvaW50ZXIo
Y2VsbCksICIgbm90IGZvdW5kIik7Ci19CisgICAgYXV0byBtYXJrZXJEYXRhRm9yUHJlY2lzZUFs
bG9jYXRpb24gPSBbJl0gKFByZWNpc2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKSAtPiBjb25zdCBN
YXJrZXJEYXRhKiB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ByZWNpc2VBbGxvY2F0aW9u
TWFwLmZpbmQoJmFsbG9jYXRpb24pOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9wcmVjaXNl
QWxsb2NhdGlvbk1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKCk7CisgICAgfTsKIAotdm9pZCBW
ZXJpZmllclNsb3RWaXNpdG9yOjpkdW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYgYmxvY2ssIEhl
YXBDZWxsKiBjZWxsKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtlZEJsb2NrTWFwLmZp
bmQoJmJsb2NrKTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZWRCbG9ja01hcC5lbmQoKSkg
eworICAgIGF1dG8gbWFya2VyRGF0YUZvck1hcmtlZEJsb2NrQ2VsbCA9IFsmXSAoTWFya2VkQmxv
Y2smIGJsb2NrLCBIZWFwQ2VsbCogY2VsbCkgLT4gY29uc3QgTWFya2VyRGF0YSogeworICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9tYXJrZWRCbG9ja01hcC5maW5kKCZibG9jayk7CisgICAgICAg
IGlmIChpdGVyYXRvciA9PSBtX21hcmtlZEJsb2NrTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVt
YmVyKGNlbGwpOwotICAgICAgICBkdW1wTWFya2VyRGF0YShjZWxsLCBpdGVyYXRvci0+dmFsdWUt
Pm1hcmtlckRhdGEoYXRvbU51bWJlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRh
dGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIG5vdCBmb3VuZCIpOwotfQorICAg
ICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLT5tYXJrZXJEYXRhKGF0b21OdW1iZXIpOworICAg
IH07CiAKLXZvaWQgVmVyaWZpZXJTbG90VmlzaXRvcjo6ZHVtcE1hcmtlckRhdGEoSGVhcENlbGwq
IGNlbGwsIGNvbnN0IE1hcmtlckRhdGEqIG1hcmtlcikKLXsKLSAgICBpZiAoIW1hcmtlcikgewot
ICAgICAgICBkYXRhTG9nTG4oIk1hcmtlciBkYXRhIGlzIG5vdCBhdmFpbGFibGUgZm9yIGNlbGwg
IiwgUmF3UG9pbnRlcihjZWxsKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBt
YXJrZXJEYXRhRm9yT3BhcXVlUm9vdCA9IFsmXSAodm9pZCogb3BhcXVlUm9vdCkgLT4gY29uc3Qg
TWFya2VyRGF0YSogeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9vcGFxdWVSb290TWFwLmZp
bmQob3BhcXVlUm9vdCk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX29wYXF1ZVJvb3RNYXAu
ZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZS0+bWFya2VyRGF0YSgpOworICAgIH07CisKKyAgICBXVEY6OmRhdGFGaWxlKCku
Zmx1c2goKTsKKworICAgIHZvaWQqIG9wYXF1ZVJvb3QgPSBudWxscHRyOworICAgIGRvIHsKKyAg
ICAgICAgY29uc3QgTWFya2VyRGF0YSogbWFya2VyRGF0YSA9IG51bGxwdHI7CisKKyAgICAgICAg
aWYgKGNlbGwpIHsKKyAgICAgICAgICAgIGlmIChpc0pTQ2VsbEtpbmQoY2VsbC0+Y2VsbEtpbmQo
KSkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKEpTVmFsdWUoc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oY2VsbCkpKTsKKyAgICAgICAgICAgIGlmIChjZWxsLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkp
CisgICAgICAgICAgICAgICAgbWFya2VyRGF0YSA9IG1hcmtlckRhdGFGb3JQcmVjaXNlQWxsb2Nh
dGlvbihjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtYXJrZXJEYXRhID0gbWFya2VyRGF0YUZvck1hcmtlZEJsb2NrQ2VsbChjZWxs
LT5tYXJrZWRCbG9jaygpLCBjZWxsKTsKKyAgICAgICAgICAgIGlmICghbWFya2VyRGF0YSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTWFya2VyIGRhdGEgaXMgbm90IGF2YWlsYWJsZSBm
b3IgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIkNlbGwgIiwgUmF3UG9pbnRlcihjZWxs
KSwgIiB3YXMgdmlzaXRlZCIpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChvcGFxdWVSb290KTsKKworICAgICAgICAgICAgYm9vbCBjb250YWluc09wYXF1
ZVJvb3QgPSBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFpbnMob3BhcXVlUm9vdCk7CisgICAg
ICAgICAgICBjb25zdCBjaGFyKiB3YXNPcldhc05vdCA9IGNvbnRhaW5zT3BhcXVlUm9vdCA/ICJ3
YXMiIDogIndhcyBOT1QiOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJJbiB0aGUgcmVhbCBHQywg
b3BhcXVlIHJvb3QiLCBSYXdQb2ludGVyKG9wYXF1ZVJvb3QpLCAiICIsIHdhc09yV2FzTm90LCAi
IGFkZGVkIHRvIHRoZSBoZWFwJ3Mgb3BhcXVlIHJvb3RzLiIpOworCisgICAgICAgICAgICBtYXJr
ZXJEYXRhID0gbWFya2VyRGF0YUZvck9wYXF1ZVJvb3Qob3BhcXVlUm9vdCk7CisgICAgICAgICAg
ICBpZiAoIW1hcmtlckRhdGEpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1hcmtlciBk
YXRhIGlzIG5vdCBhdmFpbGFibGUgZm9yIG9wYXF1ZSByb290ICIsIFJhd1BvaW50ZXIob3BhcXVl
Um9vdCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGF0YUxvZygiT3BhcXVlIHJvb3QgIiwgUmF3UG9pbnRlcihvcGFxdWVSb290KSwgIiB3YXMg
YWRkZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZmVycmVyVG9rZW4gcmVmZXJyZXIgPSBt
YXJrZXJEYXRhLT5yZWZlcnJlcigpOworICAgICAgICBpZiAoYXV0byogcmVmZXJyZXJDZWxsID0g
cmVmZXJyZXIuYXNDZWxsKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiIHZpYSBjZWxsICIs
IFJhd1BvaW50ZXIocmVmZXJyZXJDZWxsKSwgIiBhdDoiKTsKKyAgICAgICAgICAgIGNlbGwgPSBy
ZWZlcnJlckNlbGw7CisgICAgICAgICAgICBvcGFxdWVSb290ID0gbnVsbHB0cjsKKyAgICAgICAg
fSBlbHNlIGlmIChhdXRvKiByZWZlcnJlck9wYXF1ZVJvb3QgPSByZWZlcnJlci5hc09wYXF1ZVJv
b3QoKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCIgdmlhIG9wYXF1ZSByb290ICIsIFJhd1Bv
aW50ZXIocmVmZXJyZXJPcGFxdWVSb290KSwgIiBhdDoiKTsKKyAgICAgICAgICAgIGNlbGwgPSBu
dWxscHRyOworICAgICAgICAgICAgb3BhcXVlUm9vdCA9IHJlZmVycmVyT3BhcXVlUm9vdDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcmVhc29uID0gcmVmZXJyZXIuYXNSb290
TWFya1JlYXNvbigpOworICAgICAgICAgICAgaWYgKHJlYXNvbiAhPSBSb290TWFya1JlYXNvbjo6
Tm9uZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIiBmcm9tIHNjYW4gb2YgIiwgcmVhc29u
LCAiIHJvb3RzIGF0OiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiIGF0OiIpOworICAgICAgICAgICAgY2VsbCA9IG51bGxwdHI7CisgICAgICAgICAgICBv
cGFxdWVSb290ID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIG1hcmtlckRhdGEtPnN0
YWNrKCktPmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIpOworICAgICAgICBkYXRhTG9nTG4o
KTsKIAotICAgIGRhdGFMb2dMbigiQ2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiIHdhcyByZWFj
aGFibGUgdmlhIGNlbGwgIiwgUmF3UG9pbnRlcihtYXJrZXItPnBhcmVudCksICIgYXQ6Iik7Ci0g
ICAgbWFya2VyLT5zdGFjay0+ZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIik7CisgICAgfSB3
aGlsZSAoY2VsbCB8fCBvcGFxdWVSb290KTsKIH0KIAogYm9vbCBWZXJpZmllclNsb3RWaXNpdG9y
Ojppc0ZpcnN0VmlzaXQoKSBjb25zdApAQCAtMjgxLDcgKzM2Miw3IEBAIGJvb2wgVmVyaWZpZXJT
bG90VmlzaXRvcjo6dGVzdEFuZFNldE1hcmsKICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgZGF0
YSA9IG1ha2VVbmlxdWU8UHJlY2lzZUFsbG9jYXRpb25EYXRhPigmYWxsb2NhdGlvbik7CiAgICAg
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkpCi0gICAgICAgICAg
ICBkYXRhLT5hZGRNYXJrZXJEYXRhKHsgcGFyZW50Q2VsbCgpLCBTdGFja1RyYWNlOjpjYXB0dXJl
U3RhY2tUcmFjZShtYXhNYXJraW5nU3RhY2tGcmFtZXNUb0NhcHR1cmUsIDIpIH0pOworICAgICAg
ICAgICAgZGF0YS0+YWRkTWFya2VyRGF0YSh7IHJlZmVycmVyKCksIFN0YWNrVHJhY2U6OmNhcHR1
cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2FwdHVyZSwgMikgfSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMDEsNyArMzgy
LDcgQEAgYm9vbCBWZXJpZmllclNsb3RWaXNpdG9yOjp0ZXN0QW5kU2V0TWFyawogICAgIHVuc2ln
bmVkIGF0b21OdW1iZXIgPSBibG9jay5hdG9tTnVtYmVyKGNlbGwpOwogICAgIGJvb2wgYWxyZWFk
eVNldCA9IGRhdGEtPnRlc3RBbmRTZXRNYXJrZWQoYXRvbU51bWJlcik7CiAgICAgaWYgKCFhbHJl
YWR5U2V0ICYmIFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKSkKLSAgICAgICAg
ZGF0YS0+YWRkTWFya2VyRGF0YShhdG9tTnVtYmVyLCB7IHBhcmVudENlbGwoKSwgU3RhY2tUcmFj
ZTo6Y2FwdHVyZVN0YWNrVHJhY2UobWF4TWFya2luZ1N0YWNrRnJhbWVzVG9DYXB0dXJlLCAyKSB9
KTsKKyAgICAgICAgZGF0YS0+YWRkTWFya2VyRGF0YShhdG9tTnVtYmVyLCB7IHJlZmVycmVyKCks
IFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1RyYWNlKG1heE1hcmtpbmdTdGFja0ZyYW1lc1RvQ2Fw
dHVyZSwgMikgfSk7CiAgICAgcmV0dXJuIGFscmVhZHlTZXQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WZXJpZmllclNsb3RWaXNpdG9yLmgJKHJldmlzaW9u
IDI3NDU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZlcmlmaWVyU2xvdFZpc2l0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTQgKzU4LDIwIEBAIGNsYXNzIFZlcmlmaWVyU2xv
dFZpc2l0b3IgOiBwdWJsaWMgQWJzdHIKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAg
ICB1c2luZyBCYXNlID0gQWJzdHJhY3RTbG90VmlzaXRvcjsKIHB1YmxpYzoKKyAgICB1c2luZyBS
ZWZlcnJlclRva2VuID0gQWJzdHJhY3RTbG90VmlzaXRvcjo6UmVmZXJyZXJUb2tlbjsKKwogICAg
IHN0cnVjdCBNYXJrZXJEYXRhIHsKICAgICAgICAgTWFya2VyRGF0YSgpID0gZGVmYXVsdDsKICAg
ICAgICAgTWFya2VyRGF0YShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsKLSAgICAgICAgTWFya2Vy
RGF0YShIZWFwQ2VsbCosIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiYmKTsKKyAgICAgICAg
TWFya2VyRGF0YShSZWZlcnJlclRva2VuLCBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4mJik7
CiAgICAgICAgIE1hcmtlckRhdGEmIG9wZXJhdG9yPShNYXJrZXJEYXRhJiYpID0gZGVmYXVsdDsK
IAotICAgICAgICBIZWFwQ2VsbCogcGFyZW50IHsgbnVsbHB0ciB9OwotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U3RhY2tUcmFjZT4gc3RhY2s7CisgICAgICAgIFJlZmVycmVyVG9rZW4gcmVmZXJy
ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlZmVycmVyOyB9CisgICAgICAgIFN0YWNrVHJhY2UqIHN0
YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5nZXQoKTsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgUmVmZXJyZXJUb2tlbiBtX3JlZmVycmVyOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U3RhY2tUcmFjZT4gbV9zdGFjazsKICAgICB9OwogCiAgICAgVmVyaWZpZXJTbG90VmlzaXRvcihI
ZWFwJik7CkBAIC04OSw4ICs5NSwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIG11dGF0b3JJc1N0
b3BwZWQoKSBjb25zdCBmaW5hbDsKIAorICAgIHZvaWQgZGlkQWRkT3BhcXVlUm9vdCh2b2lkKikg
ZmluYWw7CisgICAgdm9pZCBkaWRGaW5kT3BhcXVlUm9vdCh2b2lkKikgZmluYWw7CisKICAgICB2
b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5JikgZmluYWwgeyB9Ci0gICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3QgZmluYWwgeyB9CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2Vs
bCopIGZpbmFsOwogCkBAIC0xNDUsOCArMTU0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIE1hcmtl
ckRhdGEgbV9tYXJrZXI7CiAgICAgfTsKIAorICAgIGNsYXNzIE9wYXF1ZVJvb3REYXRhIHsKKyAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE9wYXF1ZVJvb3REYXRhKTsKKyAgICBwdWJsaWM6CisgICAgICAgIE9wYXF1ZVJvb3REYXRh
KCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgYWRkTWFya2VyRGF0YShNYXJrZXJEYXRhJiYp
OworICAgICAgICBjb25zdCBNYXJrZXJEYXRhKiBtYXJrZXJEYXRhKCkgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBNYXJrZXJEYXRhIG1fbWFya2VyOworICAgIH07CisKICAgICB1c2lu
ZyBNYXJrZWRCbG9ja01hcCA9IEhhc2hNYXA8TWFya2VkQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8
TWFya2VkQmxvY2tEYXRhPj47CiAgICAgdXNpbmcgUHJlY2lzZUFsbG9jYXRpb25NYXAgPSBIYXNo
TWFwPFByZWNpc2VBbGxvY2F0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPFByZWNpc2VBbGxvY2F0aW9u
RGF0YT4+OworICAgIHVzaW5nIE9wYXF1ZVJvb3RNYXAgPSBIYXNoTWFwPHZvaWQqLCBzdGQ6OnVu
aXF1ZV9wdHI8T3BhcXVlUm9vdERhdGE+PjsKIAogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2so
SlNDZWxsKik7CiAgICAgdm9pZCBhcHBlbmRTbG93KEpTQ2VsbCogY2VsbCkgeyBzZXRNYXJrZWRB
bmRBcHBlbmRUb01hcmtTdGFjayhjZWxsKTsgfQpAQCAtMTU5LDEwICsxODIsNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogCi0gICAgdm9pZCBk
dW1wTWFya2VyRGF0YShQcmVjaXNlQWxsb2NhdGlvbiYsIEhlYXBDZWxsKik7Ci0gICAgdm9pZCBk
dW1wTWFya2VyRGF0YShNYXJrZWRCbG9jayYsIEhlYXBDZWxsKik7Ci0gICAgdm9pZCBkdW1wTWFy
a2VyRGF0YShIZWFwQ2VsbCosIGNvbnN0IE1hcmtlckRhdGEqKTsKLQorICAgIE9wYXF1ZVJvb3RN
YXAgbV9vcGFxdWVSb290TWFwOwogICAgIFByZWNpc2VBbGxvY2F0aW9uTWFwIG1fcHJlY2lzZUFs
bG9jYXRpb25NYXA7CiAgICAgTWFya2VkQmxvY2tNYXAgbV9tYXJrZWRCbG9ja01hcDsKICAgICBD
b25jdXJyZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RTdG9yYWdlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyNzQ1OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjEsNiArMTIxLDggQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgog
ICAgICAgICBpZiAoVU5MSUtFTFkoaGVhcEFuYWx5emVyKSkKICAgICAgICAgICAgIHJlYXNvblB0
ciA9ICZyZWFzb247CiAKKyAgICAgICAgdHlwZW5hbWUgVmlzaXRvcjo6UmVmZXJyZXJDb250ZXh0
IGNvbnRleHQodmlzaXRvciwgVmlzaXRvcjo6T3BhcXVlUm9vdCk7CisKICAgICAgICAgaWYgKCF3
ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3du
Pjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNv
bnRleHQoKSwgdmlzaXRvciwgcmVhc29uUHRyKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCg==
</data>
<flag name="review"
          id="442928"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>