<?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>99349</bug_id>
          
          <creation_ts>2012-10-15 12:26:40 -0700</creation_ts>
          <short_desc>Bytecode should not have responsibility for determining how to perform non-local resolves</short_desc>
          <delta_ts>2012-10-23 00:00:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>99538</dependson>
    
    <dependson>99545</dependson>
    
    <dependson>99814</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>dw.im</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>mark.lam</cc>
    
    <cc>ossy</cc>
    
    <cc>philn</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yuqiang.xian</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>742274</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-10-15 12:26:40 -0700</bug_when>
    <thetext>Bytecode should not have responsibility for determining how to perform non-local resolves</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742317</commentid>
    <comment_count>1</comment_count>
      <attachid>168762</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-10-15 12:47:41 -0700</bug_when>
    <thetext>Created attachment 168762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742487</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-15 14:56:54 -0700</bug_when>
    <thetext>Attachment 168762 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1980:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3000:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3001:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3002:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3008:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3009:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 51 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742693</commentid>
    <comment_count>3</comment_count>
      <attachid>168762</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-15 18:21:31 -0700</bug_when>
    <thetext>Comment on attachment 168762
Patch

Attachment 168762 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14296866

New failing tests:
fast/workers/worker-event-listener.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742989</commentid>
    <comment_count>4</comment_count>
      <attachid>168762</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-10-16 02:25:44 -0700</bug_when>
    <thetext>Comment on attachment 168762
Patch

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

&gt; Source/JavaScriptCore/bytecode/ResolveOperation.h:153
&gt; +    enum Kind { Uninitialised, Generic, Readonly, GlobalVariablePut, GlobalVariablePutChecked, GlobalPropertyPut, VariablePut };

ResolveOperation &lt;-&gt; ResolveOperationType
PutToBaseOperation &lt;-&gt; PutToBaseOperation::Kind

Seems like these could be more consistent.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1411
&gt;      // We can&apos;t optimise at all :-(

I think this comment is now misleading – we don&apos;t try to optimize at this stage, so no need for sadface.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1425
&gt;      // We can&apos;t optimise at all :-(

ditto

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1472
&gt;      switch (resolveResult.type()) {

I think this switch only handles two cases, and does so in the same way.
Can we replace the switch with:
    ASSERT(resolveResult.type() == ResolveResult::Register || resolveResult.type() == ResolveResult::ReadOnlyRegister);
?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1874
&gt; +bool ByteCodeParser::parseResolveOperations(SpeculatedType prediction, unsigned identifier, unsigned operations, unsigned putToBaseOperation, NodeIndex* base, NodeIndex* value)

In cases where parseResolveOperations returns false, no nodes may be inserted into the graph that would reference the values of base &amp; value.  This makes me think that in cases where we hit one of the forced OSR exits, the base or value could have been incorrectly removed by DCE.  What prevents this from happening?, could we add test cases to cover this?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3039
&gt; +                addToGraph(PutById, OpInfo(identifier), get(base), get(value));

Personally, I like a break at the end of a switch, to avoid accidental fall-through if someone adds an extra case.  Just a thought.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3088
&gt; +                set(valueDst, addToGraph(GarbageValue));

What&apos;s the purpose of these garbage values? - please comment.

&gt; Source/JavaScriptCore/dfg/DFGCapabilities.h:123
&gt; +        return CanCompile;

return CannotCompile; ?
Otherwise, this entire function can be much simpler!

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:196
&gt; +    while (nextNode-&gt;codeOrigin == at(m_compileIndex).codeOrigin) {

Is this code in this patch to handle the fact that a resolve node may have multiple register results? – a comment would help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742993</commentid>
    <comment_count>5</comment_count>
      <attachid>168762</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-10-16 02:28:26 -0700</bug_when>
    <thetext>Comment on attachment 168762
Patch

My one major concern was the DCE thing – could omitting inserting any node that references base/value result in these values not being generated &amp; handed back out the the baseline JIT, in the cases this patch forceOSRExits.  Since I&apos;m out of office tomorrow, please discuss with Filip – if he agrees with you that this is safe as is, r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743411</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-10-16 12:19:33 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 168762 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168762&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/ResolveOperation.h:153
&gt; &gt; +    enum Kind { Uninitialised, Generic, Readonly, GlobalVariablePut, GlobalVariablePutChecked, GlobalPropertyPut, VariablePut };
&gt; 
&gt; ResolveOperation &lt;-&gt; ResolveOperationType
&gt; PutToBaseOperation &lt;-&gt; PutToBaseOperation::Kind
&gt; 
&gt; Seems like these could be more consistent.

Yup. Fixed. 
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1411
&gt; &gt;      // We can&apos;t optimise at all :-(
&gt; 
&gt; I think this comment is now misleading – we don&apos;t try to optimize at this stage, so no need for sadface.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1425
&gt; &gt;      // We can&apos;t optimise at all :-(
&gt; 
&gt; ditto

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1472
&gt; &gt;      switch (resolveResult.type()) {
&gt; 
&gt; I think this switch only handles two cases, and does so in the same way.
&gt; Can we replace the switch with:
&gt;     ASSERT(resolveResult.type() == ResolveResult::Register || resolveResult.type() == ResolveResult::ReadOnlyRegister);
&gt; ?

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1874
&gt; &gt; +bool ByteCodeParser::parseResolveOperations(SpeculatedType prediction, unsigned identifier, unsigned operations, unsigned putToBaseOperation, NodeIndex* base, NodeIndex* value)
&gt; 
&gt; In cases where parseResolveOperations returns false, no nodes may be inserted into the graph that would reference the values of base &amp; value.  This makes me think that in cases where we hit one of the forced OSR exits, the base or value could have been incorrectly removed by DCE.  What prevents this from happening?, could we add test cases to cover this?

We already do -- now that many resolves end up producing resolve_with_* almost every test the dfg has triggers these code paths, as do a bunch of other random tests in jsc-tests and general layout tests (I verified by adding breakpoints when these paths were hit, and &apos;lo many tests crashed (EXC_BREAKPOINT ftw!)

wrt to what happens if we have an OSR we come to:

&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3088
&gt; &gt; +                set(valueDst, addToGraph(GarbageValue));
&gt; 
&gt; What&apos;s the purpose of these garbage values? - please comment.
&gt;

GarbageValue is a node type, it follows the osr exits (as we need to actually produce the results nodes in the graph if we aren&apos;t terminating the compilation), and by being a distinct Node we&apos;re able to kill all speculation that the CSE and CFA may try to do (which shouldn&apos;t matter as they should only exist immediately following a forced osr exit).  If we do get so far as to believe that we should codegen a GarbageValue node, we CRASH() because it means something has gone really, really wrong somewhere.
 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCapabilities.h:123
&gt; &gt; +        return CanCompile;
&gt; 
&gt; return CannotCompile; ?
&gt; Otherwise, this entire function can be much simpler!

Actually the function is completely unnecessary now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743637</commentid>
    <comment_count>7</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-10-16 15:28:28 -0700</bug_when>
    <thetext>Committed r131516: &lt;http://trac.webkit.org/changeset/131516&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743819</commentid>
    <comment_count>8</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-16 20:13:36 -0700</bug_when>
    <thetext>This seems to cause some problems if LLINT is disabled (but JIT and DFG_JIT are enabled).

Is this the expected behavior, i.e, supporting baseline JIT and DFG JIT implies that LLINT needs to be supported from now on?

Thanks.


Program received signal SIGSEGV, Segmentation fault.
0x000000000078eb41 in JSC::DFG::ByteCodeParser::parseResolveOperations (this=0x7fffffff8a20, prediction=32768, identifier=1, 
    operations=1, putToBaseOperation=0, base=0x0, value=0x7fffffff7c8c)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2025
2025            CRASH();
(gdb) bt
#0  0x000000000078eb41 in JSC::DFG::ByteCodeParser::parseResolveOperations (this=0x7fffffff8a20, prediction=32768, 
    identifier=1, operations=1, putToBaseOperation=0, base=0x0, value=0x7fffffff7c8c)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2025
#1  0x00000000007941b8 in JSC::DFG::ByteCodeParser::parseBlock (this=0x7fffffff8a20, limit=107)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2966
#2  0x00000000007974a0 in JSC::DFG::ByteCodeParser::parseCodeBlock (this=0x7fffffff8a20)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3664
#3  0x000000000079772b in JSC::DFG::ByteCodeParser::parse (this=0x7fffffff8a20)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3702
#4  0x0000000000797b49 in JSC::DFG::parse (exec=0x7fffb73d9178, graph=...)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3762
#5  0x00000000006376ee in JSC::DFG::compile (compileMode=JSC::DFG::CompileOther, exec=0x7fffb73d9178, codeBlock=0xe03590, 
    jitCode=..., jitCodeWithArityCheck=0x0, osrEntryBytecodeIndex=0)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/dfg/DFGDriver.cpp:102
#6  0x00000000006371e0 in JSC::DFG::tryCompile (exec=0x7fffb73d9178, codeBlock=0xe03590, jitCode=..., bytecodeIndex=0)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/dfg/DFGDriver.cpp:168
#7  0x0000000000513942 in JSC::jitCompileIfAppropriate&lt;JSC::EvalCodeBlock&gt; (exec=0x7fffb73d9178, codeBlock=..., jitCode=..., 
    jitType=JSC::JITCode::DFGJIT, bytecodeIndex=0, effort=JSC::JITCompilationCanFail)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/jit/JITDriver.h:57
#8  0x00000000005140c2 in JSC::prepareForExecution&lt;JSC::EvalCodeBlock&gt; (exec=0x7fffb73d9178, codeBlock=..., jitCode=..., 
    jitType=JSC::JITCode::DFGJIT, bytecodeIndex=0)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/runtime/ExecutionHarness.h:49
#9  0x000000000050e674 in JSC::EvalExecutable::compileInternal (this=0x7fffb73ca180, exec=0x7fffb73d9178, 
    scope=0x7fffb725ff60, jitType=JSC::JITCode::DFGJIT, bytecodeIndex=0)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/runtime/Executable.cpp:229
#10 0x000000000050ddab in JSC::EvalExecutable::compileOptimized (this=0x7fffb73ca180, exec=0x7fffb73d9178, 
    scope=0x7fffb725ff60, bytecodeIndex=0) at /home/yuqiang/WebKit/Source/JavaScriptCore/runtime/Executable.cpp:159
#11 0x0000000000612e57 in JSC::EvalCodeBlock::compileOptimized (this=0xdf6ac0, exec=0x7fffb73d9178, scope=0x7fffb725ff60, 
    bytecodeIndex=0) at /home/yuqiang/WebKit/Source/JavaScriptCore/bytecode/CodeBlock.cpp:2603
#12 0x00000000004ec7e8 in JSC::cti_optimize (args=0x7fffffffb610)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/jit/JITStubs.cpp:2087
#13 0x00000000004e8beb in JSC::JITThunks::tryCacheGetByID (callFrame=0xffffb510, 
    codeBlock=0x50ddab &lt;JSC::EvalExecutable::compileOptimized(JSC::ExecState*, JSC::JSScope*, unsigned int)+299&gt;, 
    returnAddress=..., baseValue=..., propertyName=..., slot=..., stubInfo=0x7fff00000000)
    at /home/yuqiang/WebKit/Source/JavaScriptCore/jit/JITStubs.cpp:1035
#14 0x00007fffffffb640 in ?? ()
#15 0x00007fff00000000 in ?? ()
#16 0x0000000000000000 in ?? ()
(gdb) l
2020            NodeIndex getScopeRegisters = addToGraph(GetScopeRegisters, localBase);
2021            *value = addToGraph(GetScopedVar, OpInfo(resolveValueOperation-&gt;m_offset), OpInfo(prediction), getScopeRegisters);
2022            return true;
2023        }
2024        default:
2025            CRASH();
2026            return false;
2027        }
2028
2029    }
(gdb) p resolveValueOperation-&gt;m_operation
$1 = JSC::ResolveOperation::CheckForDynamicEntriesBeforeGlobalScope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743820</commentid>
    <comment_count>9</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-16 20:15:45 -0700</bug_when>
    <thetext>Forgot to mention the failed cases: 10 of the JavaScriptCore tests. One example is
&quot;ecma/String/15.5.4.11-1.js&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743880</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-16 23:00:56 -0700</bug_when>
    <thetext>And it mad 500+ tests crash on 32 bit platforms - https://bugs.webkit.org/show_bug.cgi?id=99545</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743883</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-16 23:04:19 -0700</bug_when>
    <thetext>and it broke the GTK build as the EWS noticed you,
but you committed a non-buildable intentionally:

make: *** No rule to make target `Source/JavaScriptCore/bytecode/ResolveOperations.h&apos;, needed by `DerivedSources/JavaScriptCore/LLIntDesiredOffsets.h&apos;.  Stop.
make: *** Waiting for unfinished jobs....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743884</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-16 23:08:50 -0700</bug_when>
    <thetext>GTK buildfix landed in http://trac.webkit.org/changeset/131550</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743888</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-16 23:22:38 -0700</bug_when>
    <thetext>Reverted r131516 for reason:

It caused zillion different problem on different platforms

Committed r131552: &lt;http://trac.webkit.org/changeset/131552&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743909</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-16 23:48:32 -0700</bug_when>
    <thetext>Additionally it made perf tests crash on 64 bit platforms (Mac, Qt):

Mac crashes:
-------------
Running Dromaeo/dromaeo-object-array.html (47 of 102)
crash: Dromaeo/dromaeo-object-array.html
FAILED
Finished: 25.391377 s

Running Dromaeo/dromaeo-object-regexp.html (48 of 102)
crash: Dromaeo/dromaeo-object-regexp.html
FAILED
Finished: 4.725511 s

Running Dromaeo/dromaeo-object-string.html (49 of 102)
crash: Dromaeo/dromaeo-object-string.html
FAILED
Finished: 40.940793 s

Qt crashes:
------------
Running Dromaeo/cssquery-dojo.html (38 of 102)
error: Dromaeo/cssquery-dojo.html
1   0x7f0e1ddc4668 /home/webkitbuildbot/slaves/release64bit-perf/buildslave/qt-linux-64-release-perf-tests/build/WebKitBuild/Release/lib/libQtWebKitWidgets.so.5(+0x190e668) [0x7f0e1ddc4668]
2   0x7f0e1a292420 /lib/x86_64-linux-gnu/libc.so.6(+0x36420) [0x7f0e1a292420]
3   0x7f0dcf2fc10e [0x7f0dcf2fc10e]

FAILED
Finished: 86.213021 s

Running Dromaeo/dromaeo-object-array.html (47 of 102)
error: Dromaeo/dromaeo-object-array.html
1   0x7f20fa379668 /home/webkitbuildbot/slaves/release64bit-perf/buildslave/qt-linux-64-release-perf-tests/build/WebKitBuild/Release/lib/libQtWebKitWidgets.so.5(+0x190e668) [0x7f20fa379668]
2   0x7f20f6847420 /lib/x86_64-linux-gnu/libc.so.6(+0x36420) [0x7f20f6847420]
3   0x7f20ab8e4317 [0x7f20ab8e4317]

FAILED
Finished: 21.916984 s

Running Dromaeo/dromaeo-object-regexp.html (48 of 102)
error: Dromaeo/dromaeo-object-regexp.html
1   0x7fd7ff2fe668 /home/webkitbuildbot/slaves/release64bit-perf/buildslave/qt-linux-64-release-perf-tests/build/WebKitBuild/Release/lib/libQtWebKitWidgets.so.5(+0x190e668) [0x7fd7ff2fe668]
2   0x7fd7fb7cc420 /lib/x86_64-linux-gnu/libc.so.6(+0x36420) [0x7fd7fb7cc420]
3   0x7fd7b084c293 [0x7fd7b084c293]

FAILED
Finished: 1.047346 s

Running Dromaeo/dromaeo-object-string.html (49 of 102)
error: Dromaeo/dromaeo-object-string.html
1   0x7faaeefaa668 /home/webkitbuildbot/slaves/release64bit-perf/buildslave/qt-linux-64-release-perf-tests/build/WebKitBuild/Release/lib/libQtWebKitWidgets.so.5(+0x190e668) [0x7faaeefaa668]
2   0x7faaeb478420 /lib/x86_64-linux-gnu/libc.so.6(+0x36420) [0x7faaeb478420]
3   0x7faaa04e220d [0x7faaa04e220d]

FAILED
Finished: 86.067940 s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744633</commentid>
    <comment_count>15</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-10-17 14:42:40 -0700</bug_when>
    <thetext>Committed r131645: &lt;http://trac.webkit.org/changeset/131645&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744882</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-17 18:11:48 -0700</bug_when>
    <thetext>Was rolled out by Oliver in &lt;http://trac.webkit.org/changeset/131676&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745727</commentid>
    <comment_count>17</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-10-18 16:37:39 -0700</bug_when>
    <thetext>Committed r131822: &lt;http://trac.webkit.org/changeset/131822&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746045</commentid>
    <comment_count>18</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-18 23:26:32 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Committed r131822: &lt;http://trac.webkit.org/changeset/131822&gt;
and fix landed in http://trac.webkit.org/changeset/131830 without any reference ...

... and it made 500+ tests crash again on 32 bit platforms (Qt,GTK have 32 bit bots)

I really don&apos;t understand why do you commit a buggy patch again and 
again. Please don&apos;t do it in the future. Unfortunately I can&apos;t roll 
them out now because of conflicts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746050</commentid>
    <comment_count>19</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-18 23:29:10 -0700</bug_when>
    <thetext>I filed a new bug report to fix the regression you caused: https://bugs.webkit.org/show_bug.cgi?id=99349</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746184</commentid>
    <comment_count>20</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-19 03:18:34 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I filed a new bug report to fix the regression you caused: https://bugs.webkit.org/show_bug.cgi?id=99349

copy/paste error :) I meant https://bugs.webkit.org/show_bug.cgi?id=99814.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746418</commentid>
    <comment_count>21</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-10-19 10:25:50 -0700</bug_when>
    <thetext>
&gt; I really don&apos;t understand why do you commit a buggy patch again and 
&gt; again. Please don&apos;t do it in the future. Unfortunately I can&apos;t roll 
&gt; them out now because of conflicts.

Had it occurred to you that I might have thought I had fixed the various bugs in it?  Apparently not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748312</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-23 00:00:58 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; I really don&apos;t understand why do you commit a buggy patch again and 
&gt; &gt; again. Please don&apos;t do it in the future. Unfortunately I can&apos;t roll 
&gt; &gt; them out now because of conflicts.
&gt; 
&gt; Had it occurred to you that I might have thought I had fixed the various bugs in it?  Apparently not.

Looks like a slight misunderstanding :(

Anyway, thanks Oliver for fixing this! It is appreciated!

I&apos;ve re-enabled the LLINT for PLATFORM(QT) in r132067</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168762</attachid>
            <date>2012-10-15 12:47:41 -0700</date>
            <delta_ts>2012-10-17 23:07:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99349-20121015124631.patch</filename>
            <type>text/plain</type>
            <size>300763</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
YmNiMGI0ZDI1YjYwZjQxNDY0ZDA2ZjA0Y2NhY2ZkYWNlMzQ0YzQwLi42MDk4N2YwZjI2NWUzNzNj
ODJlZDk4ZDViNGY1MDc4ODFhMDc4NGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNDEgQEAKKzIwMTItMTAtMTUgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBCeXRlY29kZSBzaG91bGQgbm90IGhhdmUgcmVzcG9uc2liaWxpdHkgZm9yIGRl
dGVybWluaW5nIGhvdyB0byBwZXJmb3JtIG5vbi1sb2NhbCByZXNvbHZlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgbGV4
aWNhbCBhbmFseXNpcyBmcm9tIHRoZSBieXRlY29kZSBnZW5lcmF0aW9uLiAgVGhpcyBhbGxvd3MK
KyAgICAgICAgdXMgdG8gZGVsYXkgbG9va3VwIG9mIGEgbm9uLWxvY2FsIHZhcmlhYmxlcyB1bnRp
bCB0aGUgbG9va3VwIGlzIGFjdHVhbGx5IG5lY2Vzc2FyeSwKKyAgICAgICAgYW5kIHNpbXBsaWZp
ZXMgYSBsb3Qgb2YgdGhlIHJlc29sdmUgbG9naWMgaW4gQnl0ZWNvZGVHZW5lcmF0b3IuCisKKyAg
ICAgICAgT25jZSBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgd2UgY2FjaGUgdGhlIGxvb2t1cCBpbmZv
cm1hdGlvbiBpbiBhIHNldCBvZiBvdXQtb2YtbGluZQorICAgICAgICBidWZmZXJzIGluIENvZGVC
bG9jay4gIFRoaXMgYWxsb3dzIHN1YnNlcXVlbnQgbG9va3VwcyB0byBhdm9pZCB1bm5lY2Vzc2Fy
eSBoYXNoaW5nLAorICAgICAgICBldGMsIGFuZCBhbGxvd3MgdGhlIHJlc3BlY3RpdmUgSklUcyB0
byByZWNyZWF0ZWQgb3B0aW1hbCBsb29rdXAgY29kZS4KKworICAgICAgICBUaGlzIGlzIGN1cnJl
bnRseSBzdGlsbCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4gTExJbnQsIGJ1dCBtb3N0IG9m
IHRoZSByZW1haW5pbmcKKyAgICAgICAgcmVncmVzc2lvbiBpcyBjYXVzZWQgYnkgYSBsb3Qgb2Yg
aW5kaXJlY3Rpb24gdGhhdCBJJ2xsIHJlbW92ZSBpbiBmdXR1cmUgd29yaywgYXMgd2VsbAorICAg
ICAgICBhcyBzb21lIHdvcmsgbmVjZXNzYXJ5IHRvIGFsbG93IExMSW50IHRvIHBlcmZvcm0gaW4g
bGluZSBpbnN0cnVjdGlvbiByZXBhdGNoaW5nLgorICAgICAgICBXZSB3aWxsIGFsc28gd2FudCB0
byBpbXByb3ZlIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGJhc2VsaW5lIEpJVCBmb3Igc29tZSBvZiB0
aGUgbG9va3VwCisgICAgICAgIG9wZXJhdGlvbnMsIGhvd2V2ZXIgdGhpcyBwYXRjaCB3YXMgZ2V0
dGluZyBxdWl0ZSBsYXJnZSBhbHJlYWR5IHNvIEknbSBsYW5kaW5nIGl0IG5vdworICAgICAgICB0
aGF0IHdlJ3ZlIHJlYWNoZWQgdGhlIGJhciBvZiAicGVyZm9ybWFuY2UtbmV1dHJhbCIuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50U3RydWN0dXJl
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdFN0cnVjdHVy
ZXMpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hyaW5rVG9GaXQpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmFkZFJlc29sdmUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZFB1dFRvQmFzZSk6Cisg
ICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlc29sdmVPcGVy
YXRpb25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwdXRUb0Jhc2VPcGVyYXRpb24pOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mUmVzb2x2ZU9wZXJhdGlvbnMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mUHV0VG9CYXNlT3BlcmF0aW9ucyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Z2xvYmFsT2JqZWN0Q29uc3RhbnQpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnNldEdsb2JhbE9iamVjdENvbnN0YW50KToKKyAgICAgICAgKiBieXRlY29k
ZS9HbG9iYWxSZXNvbHZlSW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL09wY29k
ZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6cGFkT3Bjb2RlTmFtZSk6CisgICAg
ICAgICogYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OmNv
bXB1dGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpSZXNvbHZlR2xvYmFsU3RhdHVzOjpj
b21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoUmVzb2x2ZUdsb2JhbFN0YXR1cyk6CisgICAgICAgICog
Ynl0ZWNvZGUvUmVzb2x2ZU9wZXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgICBUaGUgbmV3IHR5
cGVzIGFuZCBsb2dpYyB3ZSB1c2UgdG8gcGVyZm9ybSB0aGUgY2FjaGVkIGxvb2t1cHMuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoUmVzb2x2ZU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OlJl
c29sdmVPcGVyYXRpb246OmdldEFuZFJldHVyblNjb3BlZFZhcik6CisgICAgICAgIChKU0M6OlJl
c29sdmVPcGVyYXRpb246OmNoZWNrRm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9iYWxTY29wZSk6
CisgICAgICAgIChKU0M6OlJlc29sdmVPcGVyYXRpb246OmdldEFuZFJldHVybkdsb2JhbFZhcik6
CisgICAgICAgIChKU0M6OlJlc29sdmVPcGVyYXRpb246OmdldEFuZFJldHVybkdsb2JhbFByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wZXJhdGlvbjo6cmVzb2x2ZUZhaWwpOgorICAg
ICAgICAoSlNDOjpSZXNvbHZlT3BlcmF0aW9uOjpza2lwVG9wU2NvcGVOb2RlKToKKyAgICAgICAg
KEpTQzo6UmVzb2x2ZU9wZXJhdGlvbjo6c2tpcFNjb3Blcyk6CisgICAgICAgIChKU0M6OlJlc29s
dmVPcGVyYXRpb246OnJldHVybkdsb2JhbE9iamVjdEFzQmFzZSk6CisgICAgICAgIChKU0M6OlJl
c29sdmVPcGVyYXRpb246OnNldEJhc2VUb0dsb2JhbCk6CisgICAgICAgIChKU0M6OlJlc29sdmVP
cGVyYXRpb246OnNldEJhc2VUb1VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OlJlc29sdmVPcGVy
YXRpb246OnNldEJhc2VUb1Njb3BlKToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wZXJhdGlvbjo6
cmV0dXJuU2NvcGVBc0Jhc2UpOgorICAgICAgICAoSlNDOjpQdXRUb0Jhc2VPcGVyYXRpb246OlB1
dFRvQmFzZU9wZXJhdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSk6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ29uc3REZWNsKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnNob3VsZEF2b2lkUmVzb2x2ZUdsb2JhbCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZSk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2UpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNlRm9yUHV0KToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRoVGhpcyk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0TG9jYWxWYXIpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluaXRHbG9iYWxDb25zdCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG9CYXNlKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZVJlc3VsdDo6cmVnaXN0
ZXJSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUp
OgorICAgICAgICAoUmVzb2x2ZVJlc3VsdCk6CisgICAgICAgIChKU0M6OlJlc29sdmVSZXN1bHQ6
OlJlc29sdmVSZXN1bHQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKE5vbmxvY2FsUmVzb2x2
ZUluZm8pOgorICAgICAgICAoSlNDOjpOb25sb2NhbFJlc29sdmVJbmZvOjpOb25sb2NhbFJlc29s
dmVJbmZvKToKKyAgICAgICAgKEpTQzo6Tm9ubG9jYWxSZXNvbHZlSW5mbzo6fk5vbmxvY2FsUmVz
b2x2ZUluZm8pOgorICAgICAgICAoSlNDOjpOb25sb2NhbFJlc29sdmVJbmZvOjpyZXNvbHZlZCk6
CisgICAgICAgIChKU0M6Ok5vbmxvY2FsUmVzb2x2ZUluZm86OnB1dCk6CisgICAgICAgIChCeXRl
Y29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZXRSZXNv
bHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZXRSZXNv
bHZlV2l0aFRoaXNPcGVyYXRpb25zKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmdldFJlc29sdmVCYXNlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjpnZXRSZXNvbHZlQmFzZUZvclB1dE9wZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6Z2V0UmVzb2x2ZVdpdGhCYXNlRm9yUHV0T3BlcmF0aW9ucyk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZXRQdXRUb0Jhc2VPcGVyYXRpb24pOgorICAg
ICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpSZXNv
bHZlTm9kZTo6aXNQdXJlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjplbWl0UmVzb2x2ZSk6
CisgICAgICAgIChKU0M6OlByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6
UmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3Np
Z25SZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29uc3REZWNsTm9k
ZTo6ZW1pdENvZGVTaW5nbGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChJbmxpbmVTdGFj
a0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlP
ZmZzZXQpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VSZXNvbHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJ
bmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKiBkZmcvREZHQ2Fw
YWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZVJlc29sdmVPcGVyYXRp
b25zKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZVB1dFRv
QmFzZU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9wY29kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguaDoKKyAgICAgICAgKFJlc29sdmVHbG9iYWxEYXRhKToKKyAgICAgICAgKFJlc29sdmVPcGVy
YXRpb25EYXRhKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChQdXRUb0Jhc2VPcGVyYXRpb25E
YXRhKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Omhhc0lkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KToKKyAgICAgICAgKE5vZGUpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAg
ICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAgICAgKE9TUkV4aXQpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAq
IGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnJlc29sdmVPcGVyYXRpb25zKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cHV0VG9CYXNlT3BlcmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKiBq
aXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgICog
aml0L0pJVC5oOgorICAgICAgICAoSklUKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYmFzZSk6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfcmVzb2x2ZV9vcGVyYXRpb25zKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19saW5rX3Jlc29sdmVfb3BlcmF0aW9ucyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9yZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfYmFzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9iYXNlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Jlc29sdmVfd2l0aF9iYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9yZXNvbHZlX3dpdGhfYmFzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcmVz
b2x2ZV93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF90b19i
YXNlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF90b19iYXNlKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luaXRf
Z2xvYmFsX2NvbnN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2Nv
bnN0X2NoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbml0X2dsb2JhbF9j
b25zdF9jaGVjayk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2spOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKToKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50
L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKEpTQzo6TExJ
bnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRo
cy5oOgorICAgICAgICAoTExJbnQpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50
aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpMb29rdXBSZXN1bHQ6OmJhc2UpOgorICAg
ICAgICAoSlNDOjpMb29rdXBSZXN1bHQ6OnZhbHVlKToKKyAgICAgICAgKEpTQzo6TG9va3VwUmVz
dWx0OjpzZXRCYXNlKToKKyAgICAgICAgKEpTQzo6TG9va3VwUmVzdWx0OjpzZXRWYWx1ZSk6Cisg
ICAgICAgIChMb29rdXBSZXN1bHQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6c2V0
UHV0UHJvcGVydHlBY2Nlc3NPZmZzZXQpOgorICAgICAgICAoSlNDOjpleGVjdXRlUmVzb2x2ZU9w
ZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3Bl
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkpTU2Nv
cGU6OnJlc29sdmVCYXNlKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNl
KToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKToKKyAgICAgICAgKEpT
Qzo6SlNTY29wZTo6cmVzb2x2ZVB1dCk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVH
bG9iYWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5oOgorICAgICAgICAoSlNTY29wZSk6
CisgICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU1Zhcmlh
YmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUpOgorICAgICAgICAoU3Ry
dWN0dXJlKToKKwogMjAxMi0xMC0xNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCiAgICAgICAgIE1ha2UgQ29waWVkU3BhY2UgYW5kIE1hcmtlZFNwYWNlIHJlZ2lv
bnMgaW5kZXBlbmRlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggYWU1ODU0YjkxMTc0MTA0Y2Q1YjIxY2NhOTVmNDZmNmE5NGZlMmRhNi4uN2Y3Nzk2YmVl
ZmI3MDFhZDk0YTllNzIyY2UwNjliOWU4Mjk4M2Q2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTEwNiw3ICsxMDYsNiBAQCBqYXZhc2NyaXB0Y29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhwcmVzc2lvblJh
bmdlSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgg
XAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HbG9iYWxSZXNvbHZlSW5mby5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuY3BwIFwKQEAgLTEzMyw2ICsxMzIsNyBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0S2luZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2Jh
bFN0YXR1cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xv
YmFsU3RhdHVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlT3Bl
cmF0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29s
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oKaW5kZXggMGY5NmE2MGVkZDEyNDk0N2Y5YzA3MGQ5OTk1ZjUxZWQ5M2ZjMmI3Mi4uYTdjZjQz
YTU3ZjdlMDI4ZTkzZDdhYjZiZTQ1MGFkNDQ5MWE4ZTYwMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKQEAgLTE2NDYsMTAg
KzE2NDYsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxieXRlY29kZVxHbG9iYWxSZXNvbHZlSW5mby5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxIYW5kbGVySW5mby5o
IgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE3MTQsNiArMTcxMCwxMCBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxSZXNvbHZl
T3BlcmF0aW9ucy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxieXRlY29kZVxTcGVjaWFsUG9pbnRlci5jcHAiCiAJCQkJPgogCQkJPC9GaWxl
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyOGMyNzQ2ZGRjMDQxNmY2Y2YzZWJh
NTY5NDMzN2ExNDdlNmZlMjk0Li4xY2YxMDlhMGI4YzcwN2Y0YjMyOGVhMzI0MjY3MjQwM2E1YjZi
ODkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzEsNyArNzEsNiBAQAogCQkw
RjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNBRjE0QkNGNzE0MDA4ODVCNEYg
LyogQ2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYwQjgzQjQxNEJDRjg2MDAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5m
by5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBC
ODNCMjE0QkNGODVFMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExpbmtJbmZvLmNwcCAqLzsgfTsKIAkJ
MEYwQjgzQjUxNEJDRjg2MjAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQjMxNEJDRjg1RTAw
ODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMEI4M0I3MTRCQ0Y4RTEwMDg4NUI0RiAvKiBHbG9i
YWxSZXNvbHZlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQjgzQjYxNEJDRjhERjAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzQjkx
NEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNCODE0QkNG
OTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBDRDRDMjE1RjFB
NjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0
RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
Q0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovOyB9OwpA
QCAtNTg4LDYgKzU4Nyw3IEBACiAJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLzsgfTsKIAkJ
QTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAv
KiBBU1RCdWlsZGVyLmggKi87IH07CiAJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50
YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovOyB9OworCQlB
N0FGQzE3OTE1RjdFRkUzMDA0OEY1N0IgLyogUmVzb2x2ZU9wZXJhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBRkMxNzcxNUY3RUZFMzAwNDhG
NTdCIC8qIFJlc29sdmVPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAg
Ki87IH07CiAJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNEFDQUUxNDg0
QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3Rjk4IC8qIEpJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwICovOyB9OwpAQCAtODU1LDcgKzg1NSw2IEBACiAJCTBGMEI4M0FGMTRCQ0Y3
MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4
M0IyMTRCQ0Y4NUUwMDg4NUI0RiAvKiBNZXRob2RDYWxsTGlua0luZm8uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWV0aG9kQ2FsbExpbmtJbmZvLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjgzQjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhv
ZENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRob2RD
YWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwQjgzQjYxNEJD
RjhERjAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdsb2JhbFJlc29sdmVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRl
Y29kZU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsUmV0dXJu
T2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJy
YXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzOTAs
NiArMTM4OSw3IEBACiAJCUE3OUVEQjA4MTE1MzFDRDYwMDE5RTkxMiAvKiBKU09iamVjdFJlZlBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPYmplY3RSZWZQcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc0MTFCOThCOEQwMDY1
QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFT
VEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VFNzcxMUI5OEI4
RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ludGF4Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0FG
QzE3NzE1RjdFRkUzMDA0OEY1N0IgLyogUmVzb2x2ZU9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvbHZlT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNDhEQjYwRUU3NENGQzAwRENC
REI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4cG9ydE1hY3Jvcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUyMCw2ICsyNTIwLDE0IEBACiAJCQkJMEYwQjgzQUYx
NEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdE
QzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOTQxNENBN0RD
MTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8sCisJCQkJMEY5MzMyOTUxNENBN0RDMTAw
ODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1
RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmggKi8sCisJCQkJMEY5MzMyOTcxNENBN0RDMTAwODVGM0M2
IC8qIE1ldGhvZENhbGxMaW5rU3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5ODE0Q0E3REMxMDA4
NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuaCAqLywKKwkJCQkwRjkzMzI5OTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOUExNENBN0RDMTAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKKwkJCQlBN0FGQzE3NzE1RjdFRkUzMDA0OEY1
N0IgLyogUmVzb2x2ZU9wZXJhdGlvbi5oICovLAorCQkJCTBGOTMzMjlCMTRDQTdEQzEwMDg1RjND
NiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLywKIAkJCQkwRjBCODNCODE0QkNGOTVCMDA4ODVCNEYgLyog
Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLywKIAkJCQk5NjlBMDc5MDBFRDFE
M0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQk5NjlBMDc5MTBFRDFEM0FFMDBG
MUY2ODEgLyogQ29kZUJsb2NrLmggKi8sCkBAIC0yNTM1LDcgKzI1NDMsNiBAQAogCQkJCTBGMEI4
M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggKi8sCiAJCQkJMEY5
MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMz
Mjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmggKi8sCi0JCQkJMEYwQjgzQjYx
NEJDRjhERjAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8sCiAJCQkJMEYwQjgzQTgx
NEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8sCiAJCQkJOTY5QTA3OTMwRUQxRDNB
RTAwRjFGNjgxIC8qIEluc3RydWN0aW9uLmggKi8sCiAJCQkJQkNGRDhDOTAwRUVCMkVFNzAwMjgz
ODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi8sCkBAIC0yODk0LDcgKzI5MDEsNiBAQAogCQkJCTBGMEI4
M0FEMTRCQ0Y2MDQwMDg4NUI0RiAvKiBMaW5lSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwQjgzQjUxNEJDRjg2MjAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEYwQjgzQjcxNEJDRjhFMTAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2Fs
bFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEZD
NDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyMUMyNjgxNEJFNUY2ODAwQURDNjRCIC8qIEpJVERyaXZlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yOTg3LDYgKzI5OTMsNyBAQAogCQkJCTE0ODc0QUU2MTVFQkRFNEEwMDJFMzU4NyAv
KiBKU1Njb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEg
LyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2
QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdBRkMxNzkxNUY3RUZF
MzAwNDhGNTdCIC8qIFJlc29sdmVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdG
Mzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
aW5kZXggOWI4MjYwYTc5Yjg4Yjg2YTAxZGJjNjNiZTA3OWVlNWMyZmRmYTNhMi4uZmRiMGZmZWFl
M2YxNmRhZTdjYjVhMzBhMzM3ZTg4NjU2MWJmMjU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQzOSwzNCArNDM5LDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OnByaW50UHV0QnlJZE9wKEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBWZWN0
b3I8SW5zdHJ1Y3Rpb24KICAgICBpdCArPSA1OwogfQogCi0jaWYgRU5BQkxFKEpJVCkKLXN0YXRp
YyBib29sIGlzR2xvYmFsUmVzb2x2ZShPcGNvZGVJRCBvcGNvZGVJRCkKLXsKLSAgICByZXR1cm4g
b3Bjb2RlSUQgPT0gb3BfcmVzb2x2ZV9nbG9iYWwgfHwgb3Bjb2RlSUQgPT0gb3BfcmVzb2x2ZV9n
bG9iYWxfZHluYW1pYzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0Rm9y
TnRoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYg
aW5zdHJ1Y3Rpb25zLCBpbnQgbnRoLCBib29sICgqcHJlZGljYXRlKShPcGNvZGVJRCkpCi17Ci0g
ICAgc2l6ZV90IGkgPSAwOwotICAgIHdoaWxlIChpIDwgaW5zdHJ1Y3Rpb25zLnNpemUoKSkgewot
ICAgICAgICBPcGNvZGVJRCBjdXJyZW50T3Bjb2RlID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0
T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW2ldLnUub3Bjb2RlKTsKLSAgICAgICAgaWYgKHByZWRpY2F0
ZShjdXJyZW50T3Bjb2RlKSkgewotICAgICAgICAgICAgaWYgKCEtLW50aCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgICAgICBpICs9IG9wY29kZUxlbmd0aHNbY3Vy
cmVudE9wY29kZV07Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50R2xvYmFsUmVzb2x2ZUluZm8oY29uc3QgR2xv
YmFsUmVzb2x2ZUluZm8mIHJlc29sdmVJbmZvLCB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCkK
LXsKLSAgICBkYXRhTG9nKCIgIFslNGRdICVzOiAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJy
ZXNvbHZlX2dsb2JhbCIsIHBvaW50ZXJUb1NvdXJjZVN0cmluZyhyZXNvbHZlSW5mby5zdHJ1Y3R1
cmUpLnV0ZjgoKS5kYXRhKCkpOwotfQotI2VuZGlmCi0KIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0
cnVjdHVyZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDLCBpbnQgb3Bl
cmFuZCkKIHsKICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IHZQQyAtIGluc3RydWN0
aW9ucygpLmJlZ2luKCk7CkBAIC01MDYsMTQgKzQ3OCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmlu
dFN0cnVjdHVyZXMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQykKICAgICAgICAgcHJpbnRTdHJ1Y3R1
cmUoInB1dF9ieV9pZF9yZXBsYWNlIiwgdlBDLCA0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfcmVz
b2x2ZV9nbG9iYWwpKSB7Ci0gICAgICAgIHByaW50U3RydWN0dXJlKCJyZXNvbHZlX2dsb2JhbCIs
IHZQQywgNCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHZQQ1swXS51Lm9wY29k
ZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMpKSB7
Ci0gICAgICAgIHByaW50U3RydWN0dXJlKCJyZXNvbHZlX2dsb2JhbF9keW5hbWljIiwgdlBDLCA0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8vIFRoZXNlIG1faW5zdHJ1Y3Rpb25z
IGRvZXNuJ3QgcmVmIFN0cnVjdHVyZXMuCiAgICAgQVNTRVJUKHZQQ1swXS51Lm9wY29kZSA9PSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKSB8fCB2UENbMF0udS5v
cGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9wdXRfYnlfaWRfZ2VuZXJpYykgfHwg
dlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfY2FsbCkgfHwgdlBD
WzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfY2FsbF9ldmFsKSB8fCB2
UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9jb25zdHJ1Y3QpKTsK
QEAgLTU3NywxNiArNTQxLDggQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVj
KQogICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCFtX2dsb2JhbFJlc29sdmVJbmZv
cy5pc0VtcHR5KCkgfHwgIW1fc3RydWN0dXJlU3R1YkluZm9zLmlzRW1wdHkoKSkKKyAgICBpZiAo
IW1fc3RydWN0dXJlU3R1YkluZm9zLmlzRW1wdHkoKSkKICAgICAgICAgZGF0YUxvZygiXG5TdHJ1
Y3R1cmVzOlxuIik7Ci0KLSAgICBpZiAoIW1fZ2xvYmFsUmVzb2x2ZUluZm9zLmlzRW1wdHkoKSkg
ewotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICBwcmlu
dEdsb2JhbFJlc29sdmVJbmZvKG1fZ2xvYmFsUmVzb2x2ZUluZm9zW2ldLCBpbnN0cnVjdGlvbk9m
ZnNldEZvck50aChleGVjLCBpbnN0cnVjdGlvbnMoKSwgaSArIDEsIGlzR2xvYmFsUmVzb2x2ZSkp
OwotICAgICAgICAgICAgICsraTsKLSAgICAgICAgfSB3aGlsZSAoaSA8IG1fZ2xvYmFsUmVzb2x2
ZUluZm9zLnNpemUoKSk7Ci0gICAgfQogI2VuZGlmCiAKICAgICBpZiAobV9yYXJlRGF0YSAmJiAh
bV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5pc0VtcHR5KCkpIHsKQEAgLTkwMiw5MiAr
ODU4LDMwIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVj
dG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImCiAgICAgICAgICAgICBwcmludEJpbmFy
eU9wKGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29sdmU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcmVzb2x2ZVx0XHQgJXMsICVzIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZp
ZXJzW2lkMF0pLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3
TGluZShsb2NhdGlvbik7Ci0gICAgICAgICAgICBpdCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3NraXA6IHsKLSAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNraXBMZXZlbHMgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHJlc29sdmVfc2tpcFx0ICVzLCAlcywgJWQi
LCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIG1f
aWRlbnRpZmllcnNbaWQwXSkuZGF0YSgpLCBza2lwTGV2ZWxzKTsKLSAgICAgICAgICAgIGR1bXBC
eXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIGl0Kys7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xv
YmFsOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
Y2FzZSBvcF9wdXRfdG9fYmFzZV92YXJpYWJsZToKKyAgICAgICAgY2FzZSBvcF9wdXRfdG9fYmFz
ZTogeworICAgICAgICAgICAgaW50IGJhc2UgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAg
ICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlsl
NGRdIHJlc29sdmVfZ2xvYmFsXHQgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVj
LCByMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSk7Cisg
ICAgICAgICAgICBpbnQgdmFsdWUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByZXNvbHZlSW5mbyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygi
WyU0ZF0gcHV0X3RvX2Jhc2VcdCAlcywgJXMsICVzLCAlZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5h
bWUoZXhlYywgYmFzZSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHZhbHVlKS5kYXRhKCksIHJlc29sdmVJbmZvKTsKICAg
ICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKLSAgICAg
ICAgICAgIGl0ICs9IDM7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWM6IHsKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZl
OgorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsX3Byb3BlcnR5OgorICAgICAgICBjYXNl
IG9wX3Jlc29sdmVfZ2xvYmFsX3ZhcjoKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlZF92
YXI6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZWRfdmFyX29uX3RvcF9zY29wZToKKyAg
ICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlZF92YXJfd2l0aF90b3Bfc2NvcGVfY2hlY2s6IHsK
ICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50
IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSBzY29wZSA9IEpT
VmFsdWUoKCsraXQpLT51LmpzQ2VsbC5nZXQoKSk7Ci0gICAgICAgICAgICArK2l0OwotICAgICAg
ICAgICAgaW50IGRlcHRoID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9n
KCJbJTRkXSByZXNvbHZlX2dsb2JhbF9keW5hbWljXHQgJXMsICVzLCAlcywgJWQiLCBsb2NhdGlv
biwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhl
Yywgc2NvcGUpLnV0ZjgoKS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSku
ZGF0YSgpLCBkZXB0aCk7Ci0gICAgICAgICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGlu
ZShsb2NhdGlvbik7Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfc2NvcGVkX3ZhcjogewotICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBza2lwTGV2ZWxzID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBnZXRfc2NvcGVkX3Zhclx0ICVzLCAlZCwg
JWQiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIGluZGV4LCBza2lw
TGV2ZWxzKTsKLSAgICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0
aW9uKTsKLSAgICAgICAgICAgIGl0Kys7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3B1dF9zY29wZWRfdmFyOiB7Ci0gICAgICAgICAgICBpbnQgaW5kZXgg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBza2lwTGV2ZWxzID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGRhdGFMb2coIlslNGRdIHB1dF9zY29wZWRfdmFyXHQgJWQsICVkLCAlcyIsIGxv
Y2F0aW9uLCBpbmRleCwgc2tpcExldmVscywgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkp
OwotICAgICAgICAgICAgZHVtcEJ5dGVjb2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFs
X3ZhcjogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9ICgrK2l0KS0+dS5y
ZWdpc3RlclBvaW50ZXI7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBnZXRfZ2xvYmFsX3Zh
clx0ICVzLCBnJWQoJXApIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgp
LCBtX2dsb2JhbE9iamVjdC0+ZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKSwgcmVn
aXN0ZXJQb2ludGVyKTsKKyAgICAgICAgICAgIGludCByZXNvbHZlSW5mbyA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcmVzb2x2ZVx0XHQgJXMsICVzLCAl
ZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgaWROYW1lKGlkMCwg
bV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCksIHJlc29sdmVJbmZvKTsKICAgICAgICAgICAgIGR1
bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGl0Kys7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9nbG9i
YWxfdmFyX3dhdGNoYWJsZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9
ICgrK2l0KS0+dS5yZWdpc3RlclBvaW50ZXI7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBn
ZXRfZ2xvYmFsX3Zhcl93YXRjaGFibGVcdCAlcywgZyVkKCVwKSIsIGxvY2F0aW9uLCByZWdpc3Rl
ck5hbWUoZXhlYywgcjApLmRhdGEoKSwgbV9nbG9iYWxPYmplY3QtPmZpbmRSZWdpc3RlckluZGV4
KHJlZ2lzdGVyUG9pbnRlciksIHJlZ2lzdGVyUG9pbnRlcik7Ci0gICAgICAgICAgICBkdW1wQnl0
ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7Ci0gICAgICAgICAgICBpdCsrOwotICAg
ICAgICAgICAgaXQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfcHV0X2dsb2JhbF92YXI6IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogcmVnaXN0ZXJQb2ludGVyID0gKCsraXQpLT51LnJlZ2lzdGVyUG9pbnRlcjsKLSAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgZGF0YUxvZygiWyU0
ZF0gcHV0X2dsb2JhbF92YXJcdCBnJWQoJXApLCAlcyIsIGxvY2F0aW9uLCBtX2dsb2JhbE9iamVj
dC0+ZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKSwgcmVnaXN0ZXJQb2ludGVyLCBy
ZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wQnl0ZWNvZGVD
b21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3B1dF9nbG9iYWxfdmFyX2NoZWNrOiB7Ci0gICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9ICgrK2l0KS0+dS5yZWdpc3Rl
clBvaW50ZXI7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGRhdGFMb2coIlslNGRdIHB1dF9nbG9iYWxfdmFyX2NoZWNrXHQgZyVkKCVwKSwgJXMi
LCBsb2NhdGlvbiwgbV9nbG9iYWxPYmplY3QtPmZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9p
bnRlciksIHJlZ2lzdGVyUG9pbnRlciwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOwot
ICAgICAgICAgICAgZHVtcEJ5dGVjb2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwotICAg
ICAgICAgICAgaXQrKzsKLSAgICAgICAgICAgIGl0Kys7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OiB7CiAgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9ICgrK2l0KS0+dS5yZWdp
c3RlclBvaW50ZXI7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKQEAg
LTEwMDQsMTEgKzg5OCwxNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJgogICAgICAgICAgICAg
aXQrKzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcmVz
b2x2ZV9iYXNlX3RvX2dsb2JhbDoKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fZ2xv
YmFsX2R5bmFtaWM6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3RvX3Njb3BlOgorICAg
ICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90b19zY29wZV93aXRoX3RvcF9zY29wZV9jaGVjazoK
ICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6IHsKICAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwogICAgICAgICAgICAgaW50IGlzU3RyaWN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBkYXRhTG9nKCJbJTRkXSByZXNvbHZlX2Jhc2Ulc1x0ICVzLCAlcyIsIGxvY2F0aW9uLCBp
c1N0cmljdCA/ICJfc3RyaWN0IiA6ICIiLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwg
aWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCkpOworICAgICAgICAgICAgaW50
IHJlc29sdmVJbmZvID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHV0VG9C
YXNlSW5mbyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0g
cmVzb2x2ZV9iYXNlJXNcdCAlcywgJXMsICVkLCAlZCIsIGxvY2F0aW9uLCBpc1N0cmljdCA/ICJf
c3RyaWN0IiA6ICIiLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgaWROYW1lKGlkMCwg
bV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCksIHJlc29sdmVJbmZvLCBwdXRUb0Jhc2VJbmZvKTsK
ICAgICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKICAg
ICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMjQsNyArOTI0LDkgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1
Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9nKCJb
JTRkXSByZXNvbHZlX3dpdGhfYmFzZSAlcywgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgaWROYW1l
KGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCkpOworICAgICAgICAgICAgaW50IHJlc29s
dmVJbmZvID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHV0VG9CYXNlSW5m
byA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcmVzb2x2
ZV93aXRoX2Jhc2UgJXMsICVzLCAlcywgJWQsICVkIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShl
eGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgaWROYW1lKGlk
MCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCksIHJlc29sdmVJbmZvLCBwdXRUb0Jhc2VJbmZv
KTsKICAgICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsK
ICAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMzMsNyArOTM1LDgg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5z
dHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9n
KCJbJTRkXSByZXNvbHZlX3dpdGhfdGhpcyAlcywgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVy
TmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgaWRO
YW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCkpOworICAgICAgICAgICAgaW50IHJl
c29sdmVJbmZvID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRk
XSByZXNvbHZlX3dpdGhfdGhpcyAlcywgJXMsICVzLCAlZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5h
bWUoZXhlYywgcjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCksIGlkTmFt
ZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuZGF0YSgpLCByZXNvbHZlSW5mbyk7CiAgICAgICAg
ICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7CiAgICAgICAgICAg
ICBpdCsrOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjk3LDYgKzE2MDAsNyBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCiAgICAg
LCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdpc3RlcikKICAgICAsIG1fYXJndW1lbnRz
UmVnaXN0ZXIob3RoZXIubV9hcmd1bWVudHNSZWdpc3RlcikKICAgICAsIG1fYWN0aXZhdGlvblJl
Z2lzdGVyKG90aGVyLm1fYWN0aXZhdGlvblJlZ2lzdGVyKQorICAgICwgbV9nbG9iYWxPYmplY3RD
b25zdGFudChvdGhlci5tX2dsb2JhbE9iamVjdENvbnN0YW50KQogICAgICwgbV9uZWVkc0Z1bGxT
Y29wZUNoYWluKG90aGVyLm1fbmVlZHNGdWxsU2NvcGVDaGFpbikKICAgICAsIG1fdXNlc0V2YWwo
b3RoZXIubV91c2VzRXZhbCkKICAgICAsIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKG90aGVy
Lm1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKQpAQCAtMTcwNCw5ICsxNjA4LDYgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQogICAg
ICwgbV9jb2RlVHlwZShvdGhlci5tX2NvZGVUeXBlKQogICAgICwgbV9zb3VyY2Uob3RoZXIubV9z
b3VyY2UpCiAgICAgLCBtX3NvdXJjZU9mZnNldChvdGhlci5tX3NvdXJjZU9mZnNldCkKLSNpZiBF
TkFCTEUoSklUKQotICAgICwgbV9nbG9iYWxSZXNvbHZlSW5mb3Mob3RoZXIubV9nbG9iYWxSZXNv
bHZlSW5mb3Muc2l6ZSgpKQotI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAg
ICwgbV9leGVjdXRpb25FbnRyeUNvdW50KDApCiAjZW5kaWYKQEAgLTE3MjEsNiArMTYyMiw4IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhl
cikKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCiAgICAgLCBtX3Jlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKDApCiAgICAgLCBtX2xpbmVJbmZvKG90aGVyLm1fbGluZUluZm8p
CisgICAgLCBtX3Jlc29sdmVPcGVyYXRpb25zKG90aGVyLm1fcmVzb2x2ZU9wZXJhdGlvbnMpCisg
ICAgLCBtX3B1dFRvQmFzZU9wZXJhdGlvbnMob3RoZXIubV9wdXRUb0Jhc2VPcGVyYXRpb25zKQog
I2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKICAgICAsIG1fYnl0ZWNvZGVDb21tZW50SXRl
cmF0b3IoMCkKICNlbmRpZgpAQCAtMTczMiwxMSArMTYzNSw2IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKICAgICBvcHRpbWl6ZUFm
dGVyV2FybVVwKCk7CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAotI2lmIEVOQUJMRShKSVQpCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9nbG9iYWxSZXNvbHZlSW5mb3Muc2l6ZSgpOyBpLS07KQot
ICAgICAgICBtX2dsb2JhbFJlc29sdmVJbmZvc1tpXSA9IEdsb2JhbFJlc29sdmVJbmZvKG90aGVy
Lm1fZ2xvYmFsUmVzb2x2ZUluZm9zW2ldLmJ5dGVjb2RlT2Zmc2V0KTsKLSNlbmRpZgotCiAgICAg
aWYgKG90aGVyLm1fcmFyZURhdGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOwogICAgICAgICAKQEAgLTE3ODAsMTMgKzE2NzgsMTYgQEAgQ29kZUJsb2NrOjpDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwg
SlNHbG8KICNlbmRpZgogewogICAgIEFTU0VSVChtX3NvdXJjZSk7Ci0gICAgCisKICAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogI2lmIERVTVBfQ09E
RV9CTE9DS19TVEFUSVNUSUNTCiAgICAgbGl2ZUNvZGVCbG9ja1NldC5hZGQodGhpcyk7CiAjZW5k
aWYKKyAgICAvLyBXZSBoYXZlIGEgc3R1YiBwdXRUb0Jhc2Ugb3BlcmF0aW9uIHRvIGFsbG93IHJl
c29sdmVfYmFzZSB0bworICAgIC8vIHJlbWFpbiBicmFuY2hsZXNzCisgICAgbV9wdXRUb0Jhc2VP
cGVyYXRpb25zLmFwcGVuZChQdXRUb0Jhc2VPcGVyYXRpb24oaXNTdHJpY3RNb2RlKCkpKTsKIH0K
IAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKQEAgLTE4ODUsMTEgKzE3ODYsNiBAQCB2b2lkIENv
ZGVCbG9jazo6dmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBJbnN0cnVjdGlv
biogdlBDKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdlBDWzRdLnUuc3RydWN0dXJlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJl
dGVyLT5nZXRPcGNvZGUob3BfcmVzb2x2ZV9nbG9iYWwpIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMpKSB7Ci0gICAg
ICAgIGlmICh2UENbM10udS5zdHJ1Y3R1cmUpCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
dlBDWzNdLnUuc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8vIFRo
ZXNlIGluc3RydWN0aW9ucyBkb24ndCByZWYgdGhlaXIgU3RydWN0dXJlcy4KICAgICBBU1NFUlQo
dlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkKSB8
fCB2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9wdXRfYnlfaWQp
IHx8IHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9p
ZF9nZW5lcmljKSB8fCB2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShv
cF9wdXRfYnlfaWRfZ2VuZXJpYykgfHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5n
ZXRPcGNvZGUob3BfZ2V0X2FycmF5X2xlbmd0aCkgfHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVy
cHJldGVyLT5nZXRPcGNvZGUob3BfZ2V0X3N0cmluZ19sZW5ndGgpKTsKQEAgLTIwNDEsNyArMTkz
Nyw3IEBAIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSB0cnVlOwogI2Vsc2UK
IHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSBmYWxzZTsKICNlbmRpZgotICAg
IAorCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogewogI2lmIEVO
QUJMRShMTElOVCkKQEAgLTIwODYsMTcgKzE5ODIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoKQogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBt
X2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0gJmluc3RydWN0aW9u
cygpW21fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uc1tpXV07Ci0gICAgICAgICAgICBBU1NFUlQo
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1ckluc3RydWN0aW9uWzBdLnUub3Bjb2RlKSA9PSBv
cF9yZXNvbHZlX2dsb2JhbAotICAgICAgICAgICAgICAgICAgIHx8IGludGVycHJldGVyLT5nZXRP
cGNvZGVJRChjdXJJbnN0cnVjdGlvblswXS51Lm9wY29kZSkgPT0gb3BfcmVzb2x2ZV9nbG9iYWxf
ZHluYW1pYyk7Ci0gICAgICAgICAgICBpZiAoIWN1ckluc3RydWN0aW9uWzNdLnUuc3RydWN0dXJl
IHx8IEhlYXA6OmlzTWFya2VkKGN1ckluc3RydWN0aW9uWzNdLnUuc3RydWN0dXJlLmdldCgpKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlVW5saW5r
aW5nKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIExMSW50IGdsb2JhbCByZXNv
bHZlIGNhY2hlIHdpdGggc3RydWN0dXJlICVwLlxuIiwgY3VySW5zdHJ1Y3Rpb25bM10udS5zdHJ1
Y3R1cmUuZ2V0KCkpOwotICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bM10udS5zdHJ1Y3R1cmUu
Y2xlYXIoKTsKLSAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzRdLnUub3BlcmFuZCA9IDA7Ci0g
ICAgICAgIH0KKwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sbGludENhbGxM
aW5rSW5mb3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChtX2xsaW50Q2FsbExpbmtJ
bmZvc1tpXS5pc0xpbmtlZCgpICYmICFIZWFwOjppc01hcmtlZChtX2xsaW50Q2FsbExpbmtJbmZv
c1tpXS5jYWxsZWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtp
bmcpCkBAIC0yMTIzLDcgKzIwMDksMjkgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKLSAgICAKKworICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX3B1dFRvQmFzZU9wZXJhdGlv
bnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAobV9wdXRUb0Jh
c2VPcGVyYXRpb25zW2ldLm1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3B1dFRvQmFz
ZU9wZXJhdGlvbnNbaV0ubV9zdHJ1Y3R1cmUuZ2V0KCkpKSB7CisgICAgICAgICAgICBpZiAodmVy
Ym9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBwdXRUb0Jh
c2UgaW5mbyBpbiAlcC5cbiIsIHRoaXMpOworICAgICAgICAgICAgbV9wdXRUb0Jhc2VPcGVyYXRp
b25zW2ldLm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChz
aXplX3Qgc2l6ZSA9IG1fcmVzb2x2ZU9wZXJhdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICBpZiAobV9yZXNvbHZlT3BlcmF0aW9uc1tpXS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGZvciAoc2l6ZV90
IGluc25TaXplID0gbV9yZXNvbHZlT3BlcmF0aW9uc1tpXS5zaXplKCkgLSAxLCBrID0gMDsgayA8
IGluc25TaXplOyArK2spCisgICAgICAgICAgICBBU1NFUlQoIW1fcmVzb2x2ZU9wZXJhdGlvbnNb
aV1ba10ubV9zdHJ1Y3R1cmUpOworI2VuZGlmCisgICAgICAgIG1fcmVzb2x2ZU9wZXJhdGlvbnNb
aV0ubGFzdCgpLm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIGlmIChtX3Jlc29sdmVPcGVy
YXRpb25zW2ldLmxhc3QoKS5tX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9yZXNvbHZl
T3BlcmF0aW9uc1tpXS5sYXN0KCkubV9zdHJ1Y3R1cmUuZ2V0KCkpKSB7CisgICAgICAgICAgICBp
ZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBy
ZXNvbHZlIGluZm8gaW4gJXAuXG4iLCB0aGlzKTsKKyAgICAgICAgICAgIG1fcmVzb2x2ZU9wZXJh
dGlvbnNbaV0ubGFzdCgpLm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisK
ICNpZiBFTkFCTEUoSklUKQogICAgIC8vIEhhbmRsZSBpbmxpbmUgY2FjaGVzLgogICAgIGlmICgh
IWdldEpJVENvZGUoKSkgewpAQCAtMjEzOCwxNCArMjA0Niw2IEBAIHZvaWQgQ29kZUJsb2NrOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCiAgICAgICAgICAgICAgICAgJiYgIUhlYXA6OmlzTWFy
a2VkKGNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZS5nZXQoKSkpCiAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fZ2xvYmFsUmVzb2x2ZUluZm9zLnNpemUoKSwgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX2dsb2JhbFJlc29sdmVJbmZv
c1tpXS5zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsUmVzb2x2ZUluZm9zW2ld
LnN0cnVjdHVyZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2lu
ZykKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgcmVzb2x2ZSBpbmZvIGlu
ICVwLlxuIiwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9nbG9iYWxSZXNvbHZlSW5mb3NbaV0u
c3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBm
b3IgKHNpemVfdCBzaXplID0gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewogICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0g
bV9zdHJ1Y3R1cmVTdHViSW5mb3NbaV07CiAgICAgICAgICAgICAKQEAgLTI0MTUsNDMgKzIzMTUs
MTQgQEAgdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGQKICAgICByZXR1cm47CiB9CiAKLSNpZiBFTkFC
TEUoSklUKQotYm9vbCBDb2RlQmxvY2s6Omhhc0dsb2JhbFJlc29sdmVJbmZvQXRCeXRlY29kZU9m
ZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBpZiAobV9nbG9iYWxSZXNvbHZl
SW5mb3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgbG93ID0g
MDsKLSAgICBpbnQgaGlnaCA9IG1fZ2xvYmFsUmVzb2x2ZUluZm9zLnNpemUoKTsKLSAgICB3aGls
ZSAobG93IDwgaGlnaCkgewotICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8g
MjsKLSAgICAgICAgaWYgKG1fZ2xvYmFsUmVzb2x2ZUluZm9zW21pZF0uYnl0ZWNvZGVPZmZzZXQg
PD0gYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQotICAgIGlmICghbG93IHx8IG1f
Z2xvYmFsUmVzb2x2ZUluZm9zW2xvdyAtIDFdLmJ5dGVjb2RlT2Zmc2V0ICE9IGJ5dGVjb2RlT2Zm
c2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci1HbG9iYWxS
ZXNvbHZlSW5mbyYgQ29kZUJsb2NrOjpnbG9iYWxSZXNvbHZlSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxH
bG9iYWxSZXNvbHZlSW5mbywgdW5zaWduZWQsIGdldEdsb2JhbFJlc29sdmVJbmZvQnl0ZWNvZGVP
ZmZzZXQ+KG1fZ2xvYmFsUmVzb2x2ZUluZm9zLmJlZ2luKCksIG1fZ2xvYmFsUmVzb2x2ZUluZm9z
LnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQpKTsKLX0KLSNlbmRpZgotCiB2b2lkIENvZGVCbG9jazo6
c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQogewogICAgIG1fcHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2dsb2JhbFJlc29sdmVJbnN0cnVj
dGlvbnMuc2hyaW5rVG9GaXQoKTsKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgbV9sbGludENhbGxM
aW5rSW5mb3Muc2hyaW5rVG9GaXQoKTsKICNlbmRpZgogI2lmIEVOQUJMRShKSVQpCiAgICAgbV9z
dHJ1Y3R1cmVTdHViSW5mb3Muc2hyaW5rVG9GaXQoKTsKLSAgICBpZiAoc2hyaW5rTW9kZSA9PSBF
YXJseVNocmluaykKLSAgICAgICAgbV9nbG9iYWxSZXNvbHZlSW5mb3Muc2hyaW5rVG9GaXQoKTsK
ICAgICBtX2NhbGxMaW5rSW5mb3Muc2hyaW5rVG9GaXQoKTsKICAgICBtX21ldGhvZENhbGxMaW5r
SW5mb3Muc2hyaW5rVG9GaXQoKTsKICNlbmRpZgpAQCAtMjQ3MCw2ICsyMzQxLDcgQEAgdm9pZCBD
b2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKICAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOwogICAgIH0gLy8gZWxzZSBkb24ndCBzaHJp
bmsgdGhlc2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9pbnRlcnMg
aW50byB0aGVzZSB0YWJsZXMuCiAKKyAgICBtX3Jlc29sdmVPcGVyYXRpb25zLnNocmlua1RvRml0
KCk7CiAgICAgbV9saW5lSW5mby5zaHJpbmtUb0ZpdCgpOwogICAgIGlmIChtX3JhcmVEYXRhKSB7
CiAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2hyaW5rVG9GaXQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCAwMWE4ZWY0
YTFlMGY4NjI5YTI0ZjVmOWZkNmIyNTZhMTk3ZmY2NmIzLi5mZTU4OGM3ODc5NTI3ZDUyNjMzNjcy
ZDJiNWNiNzQ2NzUxMmM4Y2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgog
I2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJ
bmZvLmgiCi0jaW5jbHVkZSAiR2xvYmFsUmVzb2x2ZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVy
SW5mby5oIgogI2luY2x1ZGUgIk1ldGhvZENhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKQEAgLTY0LDYgKzYzLDcgQEAKICNpbmNsdWRlICJMaW5lSW5mby5oIgogI2luY2x1ZGUg
Ik5vZGVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVzb2x2ZU9w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiVW5j
b25kaXRpb25hbEZpbmFsaXplci5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtMTk3
LDYgKzE5NywzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IGxpbmVOdW1iZXJGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgIHZvaWQgZXhw
cmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGlu
dCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KTsKIAorICAgICAgICB1
aW50MzJfdCBhZGRSZXNvbHZlKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9yZXNvbHZlT3Bl
cmF0aW9ucy5ncm93KG1fcmVzb2x2ZU9wZXJhdGlvbnMuc2l6ZSgpICsgMSk7CisgICAgICAgICAg
ICByZXR1cm4gbV9yZXNvbHZlT3BlcmF0aW9ucy5zaXplKCkgLSAxOworICAgICAgICB9CisgICAg
ICAgIHVpbnQzMl90IGFkZFB1dFRvQmFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcHV0
VG9CYXNlT3BlcmF0aW9ucy5hcHBlbmQoUHV0VG9CYXNlT3BlcmF0aW9uKGlzU3RyaWN0TW9kZSgp
KSk7CisgICAgICAgICAgICByZXR1cm4gbV9wdXRUb0Jhc2VPcGVyYXRpb25zLnNpemUoKSAtIDE7
CisgICAgICAgIH0KKworICAgICAgICBSZXNvbHZlT3BlcmF0aW9ucyogcmVzb2x2ZU9wZXJhdGlv
bnModWludDMyX3QgaSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZtX3Jlc29sdmVP
cGVyYXRpb25zW2ldOworICAgICAgICB9CisKKyAgICAgICAgUHV0VG9CYXNlT3BlcmF0aW9uKiBw
dXRUb0Jhc2VPcGVyYXRpb24odWludDMyX3QgaSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICZtX3B1dFRvQmFzZU9wZXJhdGlvbnNbaV07CisgICAgICAgIH0KKworICAgICAgICBzaXpl
X3QgbnVtYmVyT2ZSZXNvbHZlT3BlcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZU9w
ZXJhdGlvbnMuc2l6ZSgpOyB9CisgICAgICAgIHNpemVfdCBudW1iZXJPZlB1dFRvQmFzZU9wZXJh
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3B1dFRvQmFzZU9wZXJhdGlvbnMuc2l6ZSgpOyB9CisK
ICNpZiBFTkFCTEUoSklUKQogCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBnZXRTdHViSW5m
byhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MDAsMTEgKzYyNCw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKTsKICAgICAgICAgfQot
ICAgICAgICB2b2lkIGFkZEdsb2JhbFJlc29sdmVJbnN0cnVjdGlvbih1bnNpZ25lZCBnbG9iYWxS
ZXNvbHZlSW5zdHJ1Y3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZ2xvYmFsUmVzb2x2
ZUluc3RydWN0aW9ucy5hcHBlbmQoZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uKTsKLSAgICAgICAg
fQotICAgICAgICBib29sIGhhc0dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbkF0Qnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogI2lmIEVOQUJMRShMTElOVCkKICAgICAgICAg
TExJbnRDYWxsTGlua0luZm8qIGFkZExMSW50Q2FsbExpbmtJbmZvKCkKICAgICAgICAgewpAQCAt
NjIxLDE1ICs2NDAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IG51bWJlck9m
QnlWYWxJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KICAgICAg
ICAgQnlWYWxJbmZvJiBieVZhbEluZm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5m
b3NbaW5kZXhdOyB9CiAKLSAgICAgICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25l
ZCBnbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZ2xv
YmFsUmVzb2x2ZUluZm9zLmFwcGVuZChHbG9iYWxSZXNvbHZlSW5mbyhnbG9iYWxSZXNvbHZlSW5z
dHJ1Y3Rpb24pKTsKLSAgICAgICAgfQotICAgICAgICBHbG9iYWxSZXNvbHZlSW5mbyYgZ2xvYmFs
UmVzb2x2ZUluZm8oaW50IGluZGV4KSB7IHJldHVybiBtX2dsb2JhbFJlc29sdmVJbmZvc1tpbmRl
eF07IH0KLSAgICAgICAgYm9vbCBoYXNHbG9iYWxSZXNvbHZlSW5mb0F0Qnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBHbG9iYWxSZXNvbHZlSW5mbyYgZ2xv
YmFsUmVzb2x2ZUluZm9Gb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7
Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mR2xvYmFsUmVzb2x2ZUluZm9zKCkgeyByZXR1cm4g
bV9nbG9iYWxSZXNvbHZlSW5mb3Muc2l6ZSgpOyB9Ci0KICAgICAgICAgdm9pZCBzZXROdW1iZXJP
ZkNhbGxMaW5rSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9jYWxsTGlua0luZm9zLmdyb3coc2l6ZSk7
IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mQ2FsbExpbmtJbmZvcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbExpbmtJbmZvcy5zaXplKCk7IH0KICAgICAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8oaW50IGluZGV4KSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3NbaW5kZXhdOyB9CkBAIC03
ODEsMTUgKzc5MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBcnJheVByb2ZpbGUqIGdl
dEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgIEFycmF5UHJv
ZmlsZSogZ2V0T3JBZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogI2Vu
ZGlmCi0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5mb0NvdW50KCkg
Y29uc3QKLSAgICAgICAgewotI2lmIEVOQUJMRShKSVQpICAgIAotICAgICAgICAgICAgaWYgKG1f
Z2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2xvYmFs
UmVzb2x2ZUluZm9zLnNpemUoKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIH0KIAogICAgICAgICAvLyBFeGNlcHRpb24gaGFuZGxpbmcgc3VwcG9ydAogCkBAIC0xMjE1
LDEzICsxMjE2LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbV9udW1WYXJzOwog
ICAgICAgICBib29sIG1faXNDb25zdHJ1Y3RvcjsKIAorICAgICAgICBpbnQgZ2xvYmFsT2JqZWN0
Q29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdENvbnN0YW50OyB9CisgICAg
ICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0Q29uc3RhbnQoaW50IGdsb2JhbFJlZ2lzdGVyKSB7IG1f
Z2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBnbG9iYWxSZWdpc3RlcjsgfQorCiAgICAgcHJvdGVjdGVk
OgogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZpcnR1YWwgYm9vbCBqaXRDb21waWxlSW1wbChF
eGVjU3RhdGUqKSA9IDA7CiAjZW5kaWYKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1Jl
ZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCk7Ci0gICAgICAgIAorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIERGR0NvZGVCbG9ja3M7CiAgICAgICAgIApAQCAtMTI5NCw2ICsxMjk4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX3RoaXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1f
YXJndW1lbnRzUmVnaXN0ZXI7CiAgICAgICAgIGludCBtX2FjdGl2YXRpb25SZWdpc3RlcjsKKyAg
ICAgICAgaW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQ7CiAKICAgICAgICAgYm9vbCBtX25lZWRz
RnVsbFNjb3BlQ2hhaW47CiAgICAgICAgIGJvb2wgbV91c2VzRXZhbDsKQEAgLTEzMDYsNyArMTMx
MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX3NvdXJjZU9mZnNldDsK
IAogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7
Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zOwog
I2lmIEVOQUJMRShMTElOVCkKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPExMSW50Q2FsbExpbmtJ
bmZvLCA4PiBtX2xsaW50Q2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0
PExMSW50Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5m
bz4gPiBtX2luY29taW5nTExJbnRDYWxsczsKQEAgLTEzMTQsNyArMTMxOCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5m
bz4gbV9zdHJ1Y3R1cmVTdHViSW5mb3M7CiAgICAgICAgIFZlY3RvcjxCeVZhbEluZm8+IG1fYnlW
YWxJbmZvczsKLSAgICAgICAgVmVjdG9yPEdsb2JhbFJlc29sdmVJbmZvPiBtX2dsb2JhbFJlc29s
dmVJbmZvczsKICAgICAgICAgVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwog
ICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbExpbmtJbmZvPiBtX21ldGhvZENhbGxMaW5rSW5mb3M7
CiAgICAgICAgIEpJVENvZGUgbV9qaXRDb2RlOwpAQCAtMTQwNiw2ICsxNDA5LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxDb21tZW50PiAgbV9ieXRlY29kZUNvbW1lbnRzOwog
ICAgICAgICBzaXplX3QgbV9ieXRlY29kZUNvbW1lbnRJdGVyYXRvcjsKICNlbmRpZgorICAgICAg
ICBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbnM+IG1fcmVzb2x2ZU9wZXJhdGlvbnM7CisgICAgICAg
IFZlY3RvcjxQdXRUb0Jhc2VPcGVyYXRpb24+IG1fcHV0VG9CYXNlT3BlcmF0aW9uczsKIAogICAg
ICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HbG9iYWxSZXNv
bHZlSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dsb2JhbFJlc29sdmVJ
bmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MjkyYjdmM2QxMzQzMTg0M2Fh
ZTgyZTlhMGFiMzE2ZmQ0M2NiMjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dsb2JhbFJlc29sdmVJ
bmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgR2xvYmFsUmVzb2x2ZUluZm9faAot
I2RlZmluZSBHbG9iYWxSZXNvbHZlSW5mb19oCi0KLSNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBHbG9iYWxSZXNvbHZlSW5mbyB7Ci0gICAgR2xv
YmFsUmVzb2x2ZUluZm8oKSB7IH0KLSAgICAKLSAgICBHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKLSAgICAgICAgOiBvZmZzZXQoMCkKLSAgICAgICAgLCBieXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0g
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7IC8vIE9ubHkgdmFsaWQgaW4gb2xkIEpJVCBjb2Rl
LiBUaGlzIG1lYW5zIG5vdGhpbmcgaW4gdGhlIERGRy4KLX07Ci0KLWlubGluZSB1bnNpZ25lZCBn
ZXRHbG9iYWxSZXNvbHZlSW5mb0J5dGVjb2RlT2Zmc2V0KEdsb2JhbFJlc29sdmVJbmZvKiBnbG9i
YWxSZXNvbHZlSW5mbykKLXsKLSAgICByZXR1cm4gZ2xvYmFsUmVzb2x2ZUluZm8tPmJ5dGVjb2Rl
T2Zmc2V0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEdsb2JhbFJlc29s
dmVJbmZvX2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
Y29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmluZGV4IGE1
ZDQ2NjE1NDNmMTdiZDY3Y2VhNDg1NDYwMDMyMjk3ZmQ3MjFiM2IuLjFmODM3NDQ0MDFjMTVkNDM1
MjRiNTBhZTc5ZGU1MGRjNzU4Yjc3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3Bjb2RlLmgKQEAgLTk1LDIyICs5NSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFj
cm8ob3BfaXNfZnVuY3Rpb24sIDMpIFwKICAgICAgICAgbWFjcm8ob3BfaW4sIDQpIFwKICAgICAg
ICAgXAotICAgICAgICBtYWNybyhvcF9yZXNvbHZlLCA0KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5n
ICovICBcCi0gICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfc2tpcCwgNSkgLyogaGFzIHZhbHVlIHBy
b2ZpbGluZyAqLyBcCi0gICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfZ2xvYmFsLCA2KSAvKiBoYXMg
dmFsdWUgcHJvZmlsaW5nICovIFwKLSAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV9nbG9iYWxfZHlu
YW1pYywgNykgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCi0gICAgICAgIG1hY3JvKG9wX2dl
dF9zY29wZWRfdmFyLCA1KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKLSAgICAgICAgbWFj
cm8ob3BfcHV0X3Njb3BlZF92YXIsIDQpIFwKLSAgICAgICAgbWFjcm8ob3BfZ2V0X2dsb2JhbF92
YXIsIDQpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAotICAgICAgICBtYWNybyhvcF9nZXRf
Z2xvYmFsX3Zhcl93YXRjaGFibGUsIDUpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAotICAg
ICAgICBtYWNybyhvcF9wdXRfZ2xvYmFsX3ZhciwgMykgXAotICAgICAgICBtYWNybyhvcF9wdXRf
Z2xvYmFsX3Zhcl9jaGVjaywgNSkgXAorICAgICAgICBtYWNybyhvcF9yZXNvbHZlLCA1KSAvKiBo
YXMgdmFsdWUgcHJvZmlsaW5nICovICBcCisgICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfZ2xvYmFs
X3Byb3BlcnR5LCA1KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovICBcCisgICAgICAgIG1hY3Jv
KG9wX3Jlc29sdmVfZ2xvYmFsX3ZhciwgNSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyAgXAor
ICAgICAgICBtYWNybyhvcF9yZXNvbHZlX3Njb3BlZF92YXIsIDUpIC8qIGhhcyB2YWx1ZSBwcm9m
aWxpbmcgKi8gIFwKKyAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV9zY29wZWRfdmFyX29uX3RvcF9z
Y29wZSwgNSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyAgXAorICAgICAgICBtYWNybyhvcF9y
ZXNvbHZlX3Njb3BlZF92YXJfd2l0aF90b3Bfc2NvcGVfY2hlY2ssIDUpIC8qIGhhcyB2YWx1ZSBw
cm9maWxpbmcgKi8gIFwKKyAgICAgICAgXAorICAgICAgICBtYWNybyhvcF9yZXNvbHZlX2Jhc2Vf
dG9fZ2xvYmFsLCA3KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKKyAgICAgICAgbWFjcm8o
b3BfcmVzb2x2ZV9iYXNlX3RvX2dsb2JhbF9keW5hbWljLCA3KSAvKiBoYXMgdmFsdWUgcHJvZmls
aW5nICovIFwKKyAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV9iYXNlX3RvX3Njb3BlLCA3KSAvKiBo
YXMgdmFsdWUgcHJvZmlsaW5nICovIFwKKyAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV9iYXNlX3Rv
X3Njb3BlX3dpdGhfdG9wX3Njb3BlX2NoZWNrLCA3KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICov
IFwKKyAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV9iYXNlLCA3KSAvKiBoYXMgdmFsdWUgcHJvZmls
aW5nICovIFwKKyAgICAgICAgXAorICAgICAgICBtYWNybyhvcF9lbnN1cmVfcHJvcGVydHlfZXhp
c3RzLCAzKSBcCisgICAgICAgIFwKKyAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV93aXRoX2Jhc2Us
IDcpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAorICAgICAgICBcCisgICAgICAgIG1hY3Jv
KG9wX3Jlc29sdmVfd2l0aF90aGlzLCA2KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKKyAg
ICAgICAgXAorICAgICAgICBtYWNybyhvcF9wdXRfdG9fYmFzZSwgNSkgXAorICAgICAgICBtYWNy
byhvcF9wdXRfdG9fYmFzZV92YXJpYWJsZSwgNSkgXAorICAgICAgICBcCiAgICAgICAgIG1hY3Jv
KG9wX2luaXRfZ2xvYmFsX2NvbnN0LCAzKSBcCiAgICAgICAgIG1hY3JvKG9wX2luaXRfZ2xvYmFs
X2NvbnN0X2NoZWNrLCA1KSBcCi0gICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfYmFzZSwgNSkgLyog
aGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCi0gICAgICAgIG1hY3JvKG9wX2Vuc3VyZV9wcm9wZXJ0
eV9leGlzdHMsIDMpIFwKLSAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV93aXRoX2Jhc2UsIDUpIC8q
IGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAotICAgICAgICBtYWNybyhvcF9yZXNvbHZlX3dpdGhf
dGhpcywgNSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAgICAgIG1hY3JvKG9wX2dl
dF9ieV9pZCwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAgICAgIG1hY3JvKG9w
X2dldF9ieV9pZF9vdXRfb2ZfbGluZSwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAg
ICAgICAgIG1hY3JvKG9wX2dldF9ieV9pZF9zZWxmLCA5KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5n
ICovIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZl
R2xvYmFsU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZl
R2xvYmFsU3RhdHVzLmNwcAppbmRleCBjOWZkN2RjYTJmNjc4MzNkOGExZjc4OWQzZjBiZTBjNThk
NDBiNjA0Li5kMWVkNzU4YTEwYjZmODNlNTBjNjZjNTI2NjdhMGUxMmRkNTRlMmEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0
dXMuY3BwCkBAIC0zMiwxMyArMzIsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFC
TEUoTExJTlQpIHx8IChFTkFCTEUoSklUKSAmJiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpKQogc3Rh
dGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29tcHV0ZUZvclN0cnVjdHVyZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7
CiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1Zh
bHVlOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KAotICAgICAg
ICAqY29kZUJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIsIGF0dHJpYnV0ZXNJZ25vcmVk
LCBzcGVjaWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldCgqY29kZUJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIsIGF0dHJpYnV0ZXNJZ25v
cmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
ICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCkBAIC00Niw0NiArNDQsMTQgQEAgc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29tcHV0
ZUZvclN0cnVjdHVyZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKgogICAgIAogICAg
IHJldHVybiBSZXNvbHZlR2xvYmFsU3RhdHVzKFJlc29sdmVHbG9iYWxTdGF0dXM6OlNpbXBsZSwg
c3RydWN0dXJlLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUpOwogfQotI2VuZGlmIC8vIEVOQUJMRShM
TElOVCkgfHwgRU5BQkxFKEpJVCkKIAotc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29tcHV0
ZUZvckxMSW50KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQorUmVzb2x2ZUdsb2JhbFN0YXR1cyBSZXNvbHZlR2xvYmFs
U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQsIFJlc29sdmVPcGVy
YXRpb24qIG9wZXJhdGlvbiwgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSNpZiBFTkFCTEUo
TExJTlQpCi0gICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRleDsKLQotICAgIEFTU0VSVChpbnN0cnVjdGlv
blswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKG9wX3Jlc29sdmVfZ2xvYmFsKSk7Ci0g
ICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbnN0cnVjdGlvblszXS51LnN0cnVjdHVy
ZS5nZXQoKTsKLSAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICBBU1NFUlQob3BlcmF0aW9uLT5tX29w
ZXJhdGlvbiA9PSBSZXNvbHZlR2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHkpOworICAgIGlmICgh
b3BlcmF0aW9uLT5tX3N0cnVjdHVyZSkKICAgICAgICAgcmV0dXJuIFJlc29sdmVHbG9iYWxTdGF0
dXMoKTsKICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvclN0cnVjdHVyZShjb2RlQmxvY2ssIHN0
cnVjdHVyZSwgaWRlbnRpZmllcik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2sp
OwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oaWRl
bnRpZmllcik7Ci0gICAgcmV0dXJuIFJlc29sdmVHbG9iYWxTdGF0dXMoKTsKLSNlbmRpZgotfQot
Ci1SZXNvbHZlR2xvYmFsU3RhdHVzIFJlc29sdmVHbG9iYWxTdGF0dXM6OmNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElkZW50aWZpZXImIGlk
ZW50aWZpZXIpCi17Ci0jaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQot
ICAgIGlmICghY29kZUJsb2NrLT5udW1iZXJPZkdsb2JhbFJlc29sdmVJbmZvcygpKQotICAgICAg
ICByZXR1cm4gY29tcHV0ZUZvckxMSW50KGNvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCwgaWRlbnRp
Zmllcik7Ci0gICAgCi0gICAgaWYgKGNvZGVCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UoYnl0
ZWNvZGVJbmRleCkpCi0gICAgICAgIHJldHVybiBSZXNvbHZlR2xvYmFsU3RhdHVzKFRha2VzU2xv
d1BhdGgpOwotICAgIAotICAgIEdsb2JhbFJlc29sdmVJbmZvJiBnbG9iYWxSZXNvbHZlSW5mbyA9
IGNvZGVCbG9jay0+Z2xvYmFsUmVzb2x2ZUluZm9Gb3JCeXRlY29kZU9mZnNldChieXRlY29kZUlu
ZGV4KTsKLSAgICAKLSAgICBpZiAoIWdsb2JhbFJlc29sdmVJbmZvLnN0cnVjdHVyZSkKLSAgICAg
ICAgcmV0dXJuIGNvbXB1dGVGb3JMTEludChjb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGlkZW50
aWZpZXIpOwotICAgIAotICAgIHJldHVybiBjb21wdXRlRm9yU3RydWN0dXJlKGNvZGVCbG9jaywg
Z2xvYmFsUmVzb2x2ZUluZm8uc3RydWN0dXJlLmdldCgpLCBpZGVudGlmaWVyKTsKLSNlbHNlCi0g
ICAgcmV0dXJuIGNvbXB1dGVGb3JMTEludChjb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGlkZW50
aWZpZXIpOwotI2VuZGlmCisgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHJ1Y3R1cmUoY29kZUJsb2Nr
LCBvcGVyYXRpb24tPm1fc3RydWN0dXJlLmdldCgpLCBpZGVudGlmaWVyKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVzb2x2ZUdsb2JhbFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jl
c29sdmVHbG9iYWxTdGF0dXMuaAppbmRleCBjYmU0ZDNiNWZlNDZhMGM4ZmMwZTlmZmMzNTBjYzZi
NDgyNmRhYmQ2Li40NmE5MjU0ZTcwZjM3ZmU5MzA5MjEyMTg5NmQ0ZGVkOGEzMWUxYzljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3Rh
dHVzLmgKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9j
azsKIGNsYXNzIElkZW50aWZpZXI7CitzdHJ1Y3QgUmVzb2x2ZU9wZXJhdGlvbjsKIGNsYXNzIFN0
cnVjdHVyZTsKIAogY2xhc3MgUmVzb2x2ZUdsb2JhbFN0YXR1cyB7CkBAIC02MSw3ICs2Miw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBSZXNvbHZlR2xvYmFsU3Rh
dHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRp
ZmllciYpOworICAgIHN0YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJs
b2NrKiwgaW50IGJ5dGVjb2RlSW5kZXgsIFJlc29sdmVPcGVyYXRpb24qLCBJZGVudGlmaWVyJik7
CiAgICAgCiAgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZU9wZXJh
dGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVPcGVyYXRpb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYWE5ZTg1ZThiNzgxNzYxYmY5YjQ0NzhhZTcyMmUyYmVhOTA1OTk5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVP
cGVyYXRpb24uaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVzb2x2ZU9wZXJhdGlvbl9oCisjZGVmaW5lIFJl
c29sdmVPcGVyYXRpb25faAorCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIFN0cnVjdHVyZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBSZXNvbHZl
RmFpbCwKKyAgICBSZXNvbHZlU2V0QmFzZVRvVW5kZWZpbmVkLAorICAgIFJlc29sdmVSZXR1cm5T
Y29wZUFzQmFzZSwKKyAgICBSZXNvbHZlU2V0QmFzZVRvU2NvcGUsCisgICAgUmVzb2x2ZVNldEJh
c2VUb0dsb2JhbCwKKyAgICBSZXNvbHZlR2V0QW5kUmV0dXJuU2NvcGVkVmFyLAorICAgIFJlc29s
dmVHZXRBbmRSZXR1cm5HbG9iYWxWYXIsCisgICAgUmVzb2x2ZUdldEFuZFJldHVybkdsb2JhbFZh
cldhdGNoYWJsZSwKKyAgICBSZXNvbHZlU2tpcFRvcFNjb3BlTm9kZSwKKyAgICBSZXNvbHZlU2tp
cFNjb3BlcywKKyAgICBSZXNvbHZlUmV0dXJuR2xvYmFsT2JqZWN0QXNCYXNlLAorICAgIFJlc29s
dmVHZXRBbmRSZXR1cm5HbG9iYWxQcm9wZXJ0eSwKKyAgICBSZXNvbHZlQ2hlY2tGb3JEeW5hbWlj
RW50cmllc0JlZm9yZUdsb2JhbFNjb3BlCit9IFJlc29sdmVPcGVyYXRpb25UeXBlOworCitzdHJ1
Y3QgUmVzb2x2ZU9wZXJhdGlvbiB7CisgICAgUmVzb2x2ZU9wZXJhdGlvblR5cGUgbV9vcGVyYXRp
b247CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgdW5pb24g
eworICAgICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBtX3JlZ2lzdGVyQWRkcmVzczsKKyAgICAgICAgaW50IG1fc2NvcGVzVG9Ta2lw
OworICAgICAgICBpbnQgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CisgICAgfTsKKyAgICBzdGF0aWMg
UmVzb2x2ZU9wZXJhdGlvbiBnZXRBbmRSZXR1cm5TY29wZWRWYXIoUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbiBvcDsKKyAgICAgICAgb3AubV9v
cGVyYXRpb24gPSBSZXNvbHZlR2V0QW5kUmV0dXJuU2NvcGVkVmFyOworICAgICAgICBvcC5tX29m
ZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIG9wOworICAgIH0KKyAgICBzdGF0aWMgUmVz
b2x2ZU9wZXJhdGlvbiBjaGVja0ZvckR5bmFtaWNFbnRyaWVzQmVmb3JlR2xvYmFsU2NvcGUoKQor
ICAgIHsKKyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbiBvcDsKKyAgICAgICAgb3AubV9vcGVyYXRp
b24gPSBSZXNvbHZlQ2hlY2tGb3JEeW5hbWljRW50cmllc0JlZm9yZUdsb2JhbFNjb3BlOworICAg
ICAgICByZXR1cm4gb3A7CisgICAgfQorCisgICAgc3RhdGljIFJlc29sdmVPcGVyYXRpb24gZ2V0
QW5kUmV0dXJuR2xvYmFsVmFyKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJBZGRyZXNz
LCBib29sIGNvdWxkQmVXYXRjaGVkKQorICAgIHsKKyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbiBv
cDsKKyAgICAgICAgb3AubV9vcGVyYXRpb24gPSBjb3VsZEJlV2F0Y2hlZCA/IFJlc29sdmVHZXRB
bmRSZXR1cm5HbG9iYWxWYXJXYXRjaGFibGUgOiBSZXNvbHZlR2V0QW5kUmV0dXJuR2xvYmFsVmFy
OworICAgICAgICBvcC5tX3JlZ2lzdGVyQWRkcmVzcyA9IHJlZ2lzdGVyQWRkcmVzczsKKyAgICAg
ICAgcmV0dXJuIG9wOworICAgIH0KKyAgICBzdGF0aWMgUmVzb2x2ZU9wZXJhdGlvbiBnZXRBbmRS
ZXR1cm5HbG9iYWxQcm9wZXJ0eSgpCisgICAgeworICAgICAgICBSZXNvbHZlT3BlcmF0aW9uIG9w
OworICAgICAgICBvcC5tX29wZXJhdGlvbiA9IFJlc29sdmVHZXRBbmRSZXR1cm5HbG9iYWxQcm9w
ZXJ0eTsKKyAgICAgICAgcmV0dXJuIG9wOworICAgIH0KKyAgICBzdGF0aWMgUmVzb2x2ZU9wZXJh
dGlvbiByZXNvbHZlRmFpbCgpCisgICAgeworICAgICAgICBSZXNvbHZlT3BlcmF0aW9uIG9wOwor
ICAgICAgICBvcC5tX29wZXJhdGlvbiA9IFJlc29sdmVGYWlsOworICAgICAgICByZXR1cm4gb3A7
CisgICAgfQorICAgIHN0YXRpYyBSZXNvbHZlT3BlcmF0aW9uIHNraXBUb3BTY29wZU5vZGUoaW50
IGFjdGl2YXRpb25SZWdpc3RlcikKKyAgICB7CisgICAgICAgIFJlc29sdmVPcGVyYXRpb24gb3A7
CisgICAgICAgIG9wLm1fb3BlcmF0aW9uID0gUmVzb2x2ZVNraXBUb3BTY29wZU5vZGU7CisgICAg
ICAgIG9wLm1fYWN0aXZhdGlvblJlZ2lzdGVyID0gYWN0aXZhdGlvblJlZ2lzdGVyOworICAgICAg
ICByZXR1cm4gb3A7CisgICAgfQorICAgIHN0YXRpYyBSZXNvbHZlT3BlcmF0aW9uIHNraXBTY29w
ZXMoaW50IHNjb3Blc1RvU2tpcCkKKyAgICB7CisgICAgICAgIFJlc29sdmVPcGVyYXRpb24gb3A7
CisgICAgICAgIG9wLm1fb3BlcmF0aW9uID0gUmVzb2x2ZVNraXBTY29wZXM7CisgICAgICAgIG9w
Lm1fc2NvcGVzVG9Ta2lwID0gc2NvcGVzVG9Ta2lwOworICAgICAgICByZXR1cm4gb3A7CisgICAg
fQorICAgIHN0YXRpYyBSZXNvbHZlT3BlcmF0aW9uIHJldHVybkdsb2JhbE9iamVjdEFzQmFzZSgp
CisgICAgeworICAgICAgICBSZXNvbHZlT3BlcmF0aW9uIG9wOworICAgICAgICBvcC5tX29wZXJh
dGlvbiA9IFJlc29sdmVSZXR1cm5HbG9iYWxPYmplY3RBc0Jhc2U7CisgICAgICAgIHJldHVybiBv
cDsKKyAgICB9CisgICAgc3RhdGljIFJlc29sdmVPcGVyYXRpb24gc2V0QmFzZVRvR2xvYmFsKCkK
KyAgICB7CisgICAgICAgIFJlc29sdmVPcGVyYXRpb24gb3A7CisgICAgICAgIG9wLm1fb3BlcmF0
aW9uID0gUmVzb2x2ZVNldEJhc2VUb0dsb2JhbDsKKyAgICAgICAgcmV0dXJuIG9wOworICAgIH0K
KyAgICBzdGF0aWMgUmVzb2x2ZU9wZXJhdGlvbiBzZXRCYXNlVG9VbmRlZmluZWQoKQorICAgIHsK
KyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbiBvcDsKKyAgICAgICAgb3AubV9vcGVyYXRpb24gPSBS
ZXNvbHZlU2V0QmFzZVRvVW5kZWZpbmVkOworICAgICAgICByZXR1cm4gb3A7CisgICAgfQorICAg
IHN0YXRpYyBSZXNvbHZlT3BlcmF0aW9uIHNldEJhc2VUb1Njb3BlKCkKKyAgICB7CisgICAgICAg
IFJlc29sdmVPcGVyYXRpb24gb3A7CisgICAgICAgIG9wLm1fb3BlcmF0aW9uID0gUmVzb2x2ZVNl
dEJhc2VUb1Njb3BlOworICAgICAgICByZXR1cm4gb3A7CisgICAgfQorICAgIHN0YXRpYyBSZXNv
bHZlT3BlcmF0aW9uIHJldHVyblNjb3BlQXNCYXNlKCkKKyAgICB7CisgICAgICAgIFJlc29sdmVP
cGVyYXRpb24gb3A7CisgICAgICAgIG9wLm1fb3BlcmF0aW9uID0gUmVzb2x2ZVJldHVyblNjb3Bl
QXNCYXNlOworICAgICAgICByZXR1cm4gb3A7CisgICAgfQorfTsKKwordHlwZWRlZiBWZWN0b3I8
UmVzb2x2ZU9wZXJhdGlvbj4gUmVzb2x2ZU9wZXJhdGlvbnM7CisKK3N0cnVjdCBQdXRUb0Jhc2VP
cGVyYXRpb24geworICAgIFB1dFRvQmFzZU9wZXJhdGlvbihib29sIGlzU3RyaWN0KQorICAgICAg
ICA6IG1fa2luZChVbmluaXRpYWxpc2VkKQorICAgICAgICAsIG1faXNEeW5hbWljKGZhbHNlKQor
ICAgICAgICAsIG1faXNTdHJpY3QoaXNTdHJpY3QpCisgICAgICAgICwgbV9wcmVkaWNhdGVQb2lu
dGVyKDApCisgICAgeworCisgICAgfQorICAgIGVudW0gS2luZCB7IFVuaW5pdGlhbGlzZWQsIEdl
bmVyaWMsIFJlYWRvbmx5LCBHbG9iYWxWYXJpYWJsZVB1dCwgR2xvYmFsVmFyaWFibGVQdXRDaGVj
a2VkLCBHbG9iYWxQcm9wZXJ0eVB1dCwgVmFyaWFibGVQdXQgfTsKKyAgICB1bmlvbiB7CisgICAg
ICAgIEtpbmQgbV9raW5kIDogODsKKyAgICAgICAgdWludDhfdCBtX2tpbmRBc1VpbnQ4OworICAg
IH07CisgICAgYm9vbCBtX2lzRHluYW1pYyA6IDg7CisgICAgYm9vbCBtX2lzU3RyaWN0IDogODsK
KyAgICB1bmlvbiB7CisgICAgICAgIGJvb2wqIG1fcHJlZGljYXRlUG9pbnRlcjsKKyAgICAgICAg
dW5zaWduZWQgbV9zY29wZURlcHRoOworICAgIH07CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9zdHJ1Y3R1cmU7CisgICAgdW5pb24geworICAgICAgICAvLyBVc2VkIGZvciBHbG9iYWxW
YXJpYWJsZVB1dAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG1fcmVnaXN0ZXJBZGRy
ZXNzOworCisgICAgICAgIC8vIFVzZWQgZm9yIEdsb2JhbFByb3BlcnR5UHV0IGFuZCBWYXJpYWJs
ZVB1dAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CisgICAgICAgICAgICBpbnQzMl90IG1fb2Zmc2V0SW5CdXR0ZXJmbHk7CisgICAgICAgIH07
CisgICAgfTsKK307Cit9CisKKyNlbmRpZiAvLyBSZXNvbHZlT3BlcmF0aW9uX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKaW5kZXggNDMwODE0OGIzNjZhNjYyMGJhODg4YTQ5M2RlZGQzYzQzNDgwZjUzNy4uMzA1
NTVjYTQ4MGIyZjgwOTNhODAyOTFhYzMzZGNhYzA2YjhkNzJlZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
QEAgLTEzNywyNSArMTM3LDggQEAgdm9pZCBSZXNvbHZlUmVzdWx0OjpjaGVja1ZhbGlkaXR5KCkK
ICAgICBjYXNlIFJlYWRPbmx5UmVnaXN0ZXI6CiAgICAgICAgIEFTU0VSVChtX2xvY2FsKTsKICAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgTGV4aWNhbDoKLSAgICBjYXNlIFJlYWRPbmx5TGV4aWNh
bDoKLSAgICBjYXNlIER5bmFtaWNMZXhpY2FsOgotICAgIGNhc2UgRHluYW1pY1JlYWRPbmx5TGV4
aWNhbDoKLSAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgR2xvYmFsOgotICAgIGNhc2UgRHluYW1pY0dsb2Jh
bDoKLSAgICAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgSW5kZXhlZEdsb2JhbDoKLSAgICBjYXNlIFJlYWRPbmx5SW5kZXhlZEdsb2JhbDoKLSAg
ICBjYXNlIFdhdGNoZWRJbmRleGVkR2xvYmFsOgotICAgIGNhc2UgRHluYW1pY0luZGV4ZWRHbG9i
YWw6Ci0gICAgY2FzZSBEeW5hbWljUmVhZE9ubHlJbmRleGVkR2xvYmFsOgotICAgICAgICBBU1NF
UlQobV9pbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICBBU1NFUlQobV9n
bG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBEeW5hbWljOgorICAgICAg
ICBBU1NFUlQoIW1fbG9jYWwpOwogICAgICAgICByZXR1cm47CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNjMsMTEgKzE0Niw2IEBAIHZvaWQgUmVzb2x2
ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB9CiAjZW5kaWYKIAotV3JpdGVCYXJyaWVyPFVua25v
d24+KiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclBvaW50ZXIoKSBjb25zdAotewotICAgIHJldHVy
biAmanNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5yZWdpc3RlckF0KGlu
ZGV4KCkpOwotfQotCiBzdGF0aWMgYm9vbCBzX2R1bXBzR2VuZXJhdGVkQ29kZSA9IGZhbHNlOwog
CiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBkdW1w
c0dlbmVyYXRlZENvZGUpCkBAIC0yOTIsNiArMjcwLDggQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgSlNTY29wZSogc2NvcGUs
IFMKICAgICAsIG1fZXhwcmVzc2lvblRvb0RlZXAoZmFsc2UpCiB7CiAgICAgbV9nbG9iYWxEYXRh
LT5zdGFydGVkQ29tcGlsaW5nKG1fY29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0R2xv
YmFsT2JqZWN0Q29uc3RhbnQoZW1pdExvYWQoMCwgSlNWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKS0+aW5kZXgoKSk7CisgICAgCiAgICAgaWYgKG1fc2hvdWxkRW1pdERlYnVnSG9v
a3MpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwog
CkBAIC0zNzQsNiArMzU0LDggQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgSlNTY29wZSogc2MKICAgICAsIG1fZXhw
cmVzc2lvblRvb0RlZXAoZmFsc2UpCiB7CiAgICAgbV9nbG9iYWxEYXRhLT5zdGFydGVkQ29tcGls
aW5nKG1fY29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0R2xvYmFsT2JqZWN0Q29uc3Rh
bnQoZW1pdExvYWQoMCwgSlNWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKS0+aW5k
ZXgoKSk7CisKICAgICBpZiAobV9zaG91bGRFbWl0RGVidWdIb29rcykKICAgICAgICAgbV9jb2Rl
QmxvY2stPnNldE5lZWRzRnVsbFNjb3BlQ2hhaW4odHJ1ZSk7CiAKQEAgLTU4OCw2ICs1NzAsOCBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2Rl
LCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkUwogICAgICwgbV9leHByZXNzaW9uVG9vRGVlcChmYWxz
ZSkKIHsKICAgICBtX2dsb2JhbERhdGEtPnN0YXJ0ZWRDb21waWxpbmcobV9jb2RlQmxvY2spOwor
ICAgIG1fY29kZUJsb2NrLT5zZXRHbG9iYWxPYmplY3RDb25zdGFudChlbWl0TG9hZCgwLCBKU1Zh
bHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpLT5pbmRleCgpKTsKKwogICAgIGlmICht
X3Nob3VsZEVtaXREZWJ1Z0hvb2tzIHx8IG1fYmFzZVNjb3BlRGVwdGgpCiAgICAgICAgIG1fY29k
ZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwogCkBAIC0xMzY1LDY3ICsxMzQ5
LDcgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZShjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eSkKICAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpyZWdp
c3RlclJlc29sdmUobG9jYWwsIGZsYWdzKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIC8vIENh
c2VzIHdoZXJlIHdlIGNhbm5vdCBzdGF0aWNhbGx5IG9wdGltaXplIHRoZSBsb29rdXAuCi0gICAg
aWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMgfHwgIWNhbk9wdGltaXpl
Tm9uTG9jYWxzKCkpCi0gICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2
ZSgwKTsKLQotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gbV9zY29wZS0+YmVnaW4oKTsK
LSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gbV9zY29wZS0+ZW5kKCk7Ci0gICAgc2l6ZV90
IGRlcHRoID0gMDsKLSAgICBzaXplX3QgZGVwdGhPZkZpcnN0U2NvcGVXaXRoRHluYW1pY0NoZWNr
cyA9IDA7Ci0gICAgdW5zaWduZWQgZmxhZ3MgPSAwOwotICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyLCArK2RlcHRoKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVy
LmdldCgpOwotICAgICAgICBpZiAoIWN1cnJlbnRTY29wZS0+aXNWYXJpYWJsZU9iamVjdCgpKSB7
Ci0gICAgICAgICAgICBmbGFncyB8PSBSZXNvbHZlUmVzdWx0OjpEeW5hbWljRmxhZzsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIGN1
cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY3VycmVu
dFNjb3BlKTsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1cnJlbnRWYXJpYWJs
ZU9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHByb3BlcnR5LmltcGwoKSk7Ci0KLSAgICAgICAg
Ly8gRm91bmQgdGhlIHByb3BlcnR5Ci0gICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICAgICAgZmxhZ3Mg
fD0gUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnOwotICAgICAgICAgICAgZGVwdGggKz0gbV9j
b2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAgICAgICAgICAgIGlmICgrK2l0ZXIg
PT0gZW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgUmVzb2x2ZVJlc3VsdDo6RHlu
YW1pY0ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpkeW5h
bWljSW5kZXhlZEdsb2JhbFJlc29sdmUoZW50cnkuZ2V0SW5kZXgoKSwgZGVwdGgsIGN1cnJlbnRT
Y29wZSwgZmxhZ3MpOwotICAgICAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjppbmRl
eGVkR2xvYmFsUmVzb2x2ZSgKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuZ2V0SW5kZXgoKSwg
Y3VycmVudFNjb3BlLAotICAgICAgICAgICAgICAgICAgICBmbGFncyB8IChlbnRyeS5jb3VsZEJl
V2F0Y2hlZCgpID8gUmVzb2x2ZVJlc3VsdDo6V2F0Y2hlZEZsYWcgOiAwKSk7Ci0gICAgICAgICAg
ICB9Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAgICAgaWYgKEpTQWN0aXZhdGlvbiog
YWN0aXZhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4oY3VycmVudFZhcmlhYmxl
T2JqZWN0KSkKLSAgICAgICAgICAgICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNWYWxpZChlbnRy
eSkpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6bGV4aWNhbFJl
c29sdmUoZW50cnkuZ2V0SW5kZXgoKSwgZGVwdGgsIGZsYWdzKTsKLSAgICAgICAgfQotICAgICAg
ICBib29sIHNjb3BlUmVxdWlyZXNEeW5hbWljQ2hlY2tzID0gZmFsc2U7Ci0gICAgICAgIGlmIChj
dXJyZW50VmFyaWFibGVPYmplY3QtPmlzRHluYW1pY1Njb3BlKHNjb3BlUmVxdWlyZXNEeW5hbWlj
Q2hlY2tzKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIShmbGFncyAmIFJlc29s
dmVSZXN1bHQ6OkR5bmFtaWNGbGFnKSkgewotICAgICAgICAgICAgaWYgKHNjb3BlUmVxdWlyZXNE
eW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OkR5
bmFtaWNGbGFnOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICsrZGVwdGhPZkZp
cnN0U2NvcGVXaXRoRHluYW1pY0NoZWNrczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENh
bid0IGxvY2F0ZSB0aGUgcHJvcGVydHkgYnV0IHdlJ3JlIGFibGUgdG8gYXZvaWQgYSBmZXcgbG9v
a3Vwcy4KLSAgICBKU09iamVjdCogc2NvcGUgPSBpdGVyLmdldCgpOwotICAgIC8vIFN0ZXAgb3Zl
ciB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLCBpZiBpdCBuZWVkcyBvbmUuIEF0IHRoaXMgcG9p
bnQgd2UKLSAgICAvLyBrbm93IHRoZXJlIGlzIG5vIGR5bmFtaWMgc2NvcGUgaW4gdGhlIGZ1bmN0
aW9uIGl0c2VsZiwgc28gdGhpcyBpcyBzYWZlIHRvCi0gICAgLy8gZG8uCi0gICAgZGVwdGggKz0g
bV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAgICBkZXB0aE9mRmlyc3RTY29w
ZVdpdGhEeW5hbWljQ2hlY2tzICs9IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7
Ci0gICAgaWYgKCsraXRlciA9PSBlbmQpIHsKLSAgICAgICAgaWYgKChmbGFncyAmIFJlc29sdmVS
ZXN1bHQ6OkR5bmFtaWNGbGFnKSAmJiBkZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZl
UmVzdWx0OjpkeW5hbWljR2xvYmFsUmVzb2x2ZShkZXB0aCwgc2NvcGUpOwotICAgICAgICByZXR1
cm4gUmVzb2x2ZVJlc3VsdDo6Z2xvYmFsUmVzb2x2ZShzY29wZSk7Ci0gICAgfQotICAgIHJldHVy
biBSZXNvbHZlUmVzdWx0OjpkeW5hbWljUmVzb2x2ZShkZXB0aE9mRmlyc3RTY29wZVdpdGhEeW5h
bWljQ2hlY2tzKTsKKyAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoKTsK
IH0KIAogUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbChj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKQEAgLTE0NDAsMjYgKzEzNjQsNyBAQCBSZXNvbHZl
UmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ29uc3REZWNsKGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5KQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gQ29uc3QgZGVjbGFyYXRp
b25zIGluIGV2YWwgY29kZSBvciBnbG9iYWwgY29kZS4KLSAgICBTY29wZUNoYWluSXRlcmF0b3Ig
aXRlciA9IHNjb3BlKCktPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNj
b3BlKCktPmVuZCgpOwotICAgIHNpemVfdCBkZXB0aCA9IDA7Ci0gICAgZm9yICg7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIsICsrZGVwdGgpIHsKLSAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRTY29wZSA9
IGl0ZXIuZ2V0KCk7Ci0gICAgICAgIGlmICghY3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCog
Y3VycmVudFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjdXJy
ZW50U2NvcGUpOwotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gY3VycmVudFZhcmlh
YmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQocHJvcGVydHkuaW1wbCgpKTsKLSAgICAgICAg
aWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgr
K2l0ZXIgPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmluZGV4ZWRH
bG9iYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGN1cnJlbnRWYXJpYWJsZU9iamVjdCwgMCk7
Ci0gICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpsZXhpY2FsUmVzb2x2ZShlbnRyeS5nZXRJ
bmRleCgpLCBkZXB0aCArIHNjb3BlRGVwdGgoKSwgMCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IFdoaWxlIHRoaXMgY29kZSBzaG91bGQgb25seSBiZSBoaXQgaW4gYW4gZXZhbCBibG9jaywgaXQg
d2lsbCBhc3NpZ24KLSAgICAvLyB0byB0aGUgd3JvbmcgYmFzZSBpZiBwcm9wZXJ0eSBleGlzdHMg
aW4gYW4gaW50ZXJ2ZW5pbmcgd2l0aCBzY29wZS4KLSAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6
ZHluYW1pY1Jlc29sdmUoc2NvcGVEZXB0aCgpKTsKKyAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6
ZHluYW1pY1Jlc29sdmUoKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENoZWNr
SGFzSW5zdGFuY2UoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJ
RCogYmFzZSwgTGFiZWwqIHRhcmdldCkKQEAgLTE0ODEsMTU4ICsxMzg2LDg5IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5zdGFuY2VPZihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHZhbHVlCiAgICAgcmV0dXJuIGRzdDsKIH0KIAotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1heEdsb2JhbFJlc29sdmVzID0gMTI4OwotCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpz
aG91bGRBdm9pZFJlc29sdmVHbG9iYWwoKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2xv
YmFsUmVzb2x2ZUluZm9Db3VudCgpID4gbWF4R2xvYmFsUmVzb2x2ZXMgJiYgIW1fbGFiZWxTY29w
ZXMuc2l6ZSgpOworICAgIHJldHVybiAhbV9sYWJlbFNjb3Blcy5zaXplKCk7CiB9CiAKIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZShSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5KQogewotICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkpCi0gICAgICAgIHJldHVy
biBlbWl0R2V0U3RhdGljVmFyKGRzdCwgcmVzb2x2ZVJlc3VsdCwgcHJvcGVydHkpOwotICAgIAot
ICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzR2xvYmFsKCkgJiYgIXNob3VsZEF2b2lkUmVzb2x2ZUds
b2JhbCgpKSB7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZEdsb2Jh
bFJlc29sdmVJbmZvKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0jZW5kaWYKLSAgICAgICAgbV9j
b2RlQmxvY2stPmFkZEdsb2JhbFJlc29sdmVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpOwotICAgICAgICBib29sIGR5bmFtaWMgPSByZXNvbHZlUmVzdWx0LmlzRHluYW1pYygpICYm
IHJlc29sdmVSZXN1bHQuZGVwdGgoKTsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0g
ZW1pdFByb2ZpbGVkT3Bjb2RlKGR5bmFtaWMgPyBvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljIDog
b3BfcmVzb2x2ZV9nbG9iYWwpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3Bl
cnR5KSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgICAgICBpZiAoZHluYW1pYykKLSAgICAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmRlcHRoKCkpOwotICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Ci0gICAgICAgIHJldHVybiBkc3Q7Ci0gICAgfQot
ICAgICAgICAKLSAgICBpZiAocmVzb2x2ZVJlc3VsdC50eXBlKCkgPT0gUmVzb2x2ZVJlc3VsdDo6
RHluYW1pYyAmJiByZXNvbHZlUmVzdWx0LmRlcHRoKCkpIHsKLSAgICAgICAgLy8gSW4gdGhpcyBj
YXNlIHdlIGFyZSBhdCBsZWFzdCBhYmxlIHRvIGRyb3AgYSBmZXcgc2NvcGUgY2hhaW5zIGZyb20g
dGhlCi0gICAgICAgIC8vIGxvb2t1cCBjaGFpbiwgYWx0aG91Z2ggd2Ugc3RpbGwgbmVlZCB0byBo
YXNoIGZyb20gdGhlbiBvbi4KLSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFBy
b2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfc2tpcCk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29u
c3RhbnQocHJvcGVydHkpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVS
ZXN1bHQuZGVwdGgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsK
LSAgICAgICAgcmV0dXJuIGRzdDsKLSAgICB9CisKKyAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc1Jl
Z2lzdGVyKCkpCisgICAgICAgIHJldHVybiBlbWl0R2V0TG9jYWxWYXIoZHN0LCByZXNvbHZlUmVz
dWx0LCBwcm9wZXJ0eSk7CiAKICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmls
ZWRPcGNvZGUob3BfcmVzb2x2ZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdldFJlc29sdmVPcGVyYXRpb25zKHByb3BlcnR5
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIHJldHVybiBkc3Q7
CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2UoUmVn
aXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVzdWx0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc0dsb2JhbCgp
ICYmICFyZXNvbHZlUmVzdWx0LmlzRHluYW1pYygpKQotICAgICAgICAvLyBHbG9iYWwgb2JqZWN0
IGlzIHRoZSBiYXNlCi0gICAgICAgIHJldHVybiBlbWl0TG9hZChkc3QsIEpTVmFsdWUocmVzb2x2
ZVJlc3VsdC5nbG9iYWxPYmplY3QoKSkpOwotCisgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVz
dWx0LCAhcmVzb2x2ZVJlc3VsdC5pc1JlZ2lzdGVyKCkpOwogICAgIC8vIFdlIGNhbid0IG9wdGlt
aXNlIGF0IGFsbCA6LSgKICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRP
cGNvZGUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChnZXRSZXNvbHZlQmFzZU9wZXJhdGlvbnMocHJvcGVydHkpKTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwog
ICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UmVzb2x2ZUJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JiBy
ZXNvbHZlUmVzdWx0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogZHN0LCBj
b25zdCBSZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVzdWx0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSwgTm9ubG9jYWxSZXNvbHZlSW5mbyYgdmVyaWZpZXIpCiB7Ci0gICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHJldHVybiBlbWl0UmVzb2x2ZUJhc2UoZHN0
LCByZXNvbHZlUmVzdWx0LCBwcm9wZXJ0eSk7Ci0KLSAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc0ds
b2JhbCgpICYmICFyZXNvbHZlUmVzdWx0LmlzRHluYW1pYygpKSB7Ci0gICAgICAgIC8vIEdsb2Jh
bCBvYmplY3QgaXMgdGhlIGJhc2UKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9
IGVtaXRMb2FkKGRzdCwgSlNWYWx1ZShyZXNvbHZlUmVzdWx0Lmdsb2JhbE9iamVjdCgpKSk7Ci0g
ICAgICAgIGVtaXRPcGNvZGUob3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cyk7Ci0gICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5n
ZXQoKTsKLSAgICB9Ci0KKyAgICBBU1NFUlRfVU5VU0VEKHJlc29sdmVSZXN1bHQsICFyZXNvbHZl
UmVzdWx0LmlzUmVnaXN0ZXIoKSk7CiAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1pc2UgYXQgYWxsIDot
KAogICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNv
bHZlX2Jhc2UpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwotICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCh0cnVlKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKKyAgICB1aW50MzJfdCBwdXRUb0Jhc2VJbmRleCA9IDA7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdldFJlc29sdmVCYXNlRm9yUHV0T3BlcmF0aW9u
cyhwcm9wZXJ0eSwgcHV0VG9CYXNlSW5kZXgpKTsKKyAgICB2ZXJpZmllci5yZXNvbHZlZChwdXRU
b0Jhc2VJbmRleCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHB1dFRvQmFzZUluZGV4KTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgcmV0dXJuIGRzdDsKIH0K
IAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2UoUmVn
aXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJlc3Vs
dCYgcmVzb2x2ZVJlc3VsdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRoQmFzZUZvclB1dChSZWdpc3RlcklE
KiBiYXNlRHN0LCBSZWdpc3RlcklEKiBwcm9wRHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNv
bHZlUmVzdWx0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgTm9ubG9jYWxSZXNvbHZlSW5m
byYgdmVyaWZpZXIpCiB7Ci0gICAgaWYgKHJlc29sdmVSZXN1bHQuaXNHbG9iYWwoKSAmJiAhcmVz
b2x2ZVJlc3VsdC5pc0R5bmFtaWMoKSkgewotICAgICAgICAvLyBHbG9iYWwgb2JqZWN0IGlzIHRo
ZSBiYXNlCi0gICAgICAgIGVtaXRMb2FkKGJhc2VEc3QsIEpTVmFsdWUocmVzb2x2ZVJlc3VsdC5n
bG9iYWxPYmplY3QoKSkpOwotCi0gICAgICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkp
IHsKLSAgICAgICAgICAgIC8vIERpcmVjdGx5IGluZGV4IHRoZSBwcm9wZXJ0eSBsb29rdXAgYWNy
b3NzIG11bHRpcGxlIHNjb3Blcy4KLSAgICAgICAgICAgIGVtaXRHZXRTdGF0aWNWYXIocHJvcERz
dCwgcmVzb2x2ZVJlc3VsdCwgcHJvcGVydHkpOwotICAgICAgICAgICAgcmV0dXJuIGJhc2VEc3Q7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2hvdWxkQXZvaWRSZXNvbHZlR2xvYmFsKCkpIHsK
LSAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9yZXNvbHZlKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wRHN0LT5p
bmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChw
cm9wZXJ0eSkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwot
ICAgICAgICAgICAgcmV0dXJuIGJhc2VEc3Q7Ci0gICAgICAgIH0KLQotI2lmIEVOQUJMRShKSVQp
Ci0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRHbG9iYWxSZXNvbHZlSW5mbyhpbnN0cnVjdGlvbnMo
KS5zaXplKCkpOwotI2VuZGlmCi0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRHbG9iYWxSZXNvbHZl
SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICAgICAgVmFsdWVQcm9maWxl
KiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfZ2xvYmFsKTsKLSAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BEc3QtPmluZGV4KCkpOwotICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKLSAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0g
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKLSAgICAgICAgcmV0dXJuIGJh
c2VEc3Q7Ci0gICAgfQotCisgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVzdWx0LCAhcmVzb2x2
ZVJlc3VsdC5pc1JlZ2lzdGVyKCkpOwogICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQ
cm9maWxlZE9wY29kZShvcF9yZXNvbHZlX3dpdGhfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGJhc2VEc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9w
RHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJv
cGVydHkpKTsKKyAgICB1aW50MzJfdCBwdXRUb0Jhc2VJbmRleCA9IDA7CisgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGdldFJlc29sdmVXaXRoQmFzZUZvclB1dE9wZXJhdGlvbnMocHJvcGVydHks
IHB1dFRvQmFzZUluZGV4KSk7CisgICAgdmVyaWZpZXIucmVzb2x2ZWQocHV0VG9CYXNlSW5kZXgp
OworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwdXRUb0Jhc2VJbmRleCk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIHJldHVybiBiYXNlRHN0OwogfQogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRoVGhpcyhSZWdpc3RlcklE
KiBiYXNlRHN0LCBSZWdpc3RlcklEKiBwcm9wRHN0LCBjb25zdCBSZXNvbHZlUmVzdWx0JiByZXNv
bHZlUmVzdWx0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpZiAocmVzb2x2
ZVJlc3VsdC5pc1N0YXRpYygpKSB7CisgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNSZWdpc3Rlcigp
KSB7CiAgICAgICAgIGVtaXRMb2FkKGJhc2VEc3QsIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBl
bWl0R2V0U3RhdGljVmFyKHByb3BEc3QsIHJlc29sdmVSZXN1bHQsIHByb3BlcnR5KTsKLSAgICAg
ICAgcmV0dXJuIGJhc2VEc3Q7Ci0gICAgfQotCi0gICAgaWYgKHJlc29sdmVSZXN1bHQudHlwZSgp
ID09IFJlc29sdmVSZXN1bHQ6OkR5bmFtaWMpIHsKLSAgICAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1p
c2UgYXQgYWxsIDotKAotICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmls
ZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX3RoaXMpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYmFzZURzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChw
cm9wRHN0LT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0
YW50KHByb3BlcnR5KSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsK
KyAgICAgICAgZW1pdEdldExvY2FsVmFyKHByb3BEc3QsIHJlc29sdmVSZXN1bHQsIHByb3BlcnR5
KTsKICAgICAgICAgcmV0dXJuIGJhc2VEc3Q7CiAgICAgfQogCi0gICAgZW1pdExvYWQoYmFzZURz
dCwganNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIGVtaXRSZXNvbHZlKHByb3BEc3QsIHJlc29s
dmVSZXN1bHQsIHByb3BlcnR5KTsKKyAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJv
ZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX3RoaXMpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChiYXNlRHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcERz
dC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3Bl
cnR5KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdldFJlc29sdmVXaXRoVGhpc09wZXJh
dGlvbnMocHJvcGVydHkpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Cisg
ICAgcmV0dXJuIGJhc2VEc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0R2V0U3RhdGljVmFyKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVz
b2x2ZVJlc3VsdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0TG9jYWxWYXIoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBS
ZXNvbHZlUmVzdWx0JiByZXNvbHZlUmVzdWx0LCBjb25zdCBJZGVudGlmaWVyJikKIHsKLSAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAwOwotCiAgICAgc3dpdGNoIChyZXNvbHZlUmVzdWx0LnR5
cGUoKSkgewogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVnaXN0ZXI6CiAgICAgY2FzZSBSZXNv
bHZlUmVzdWx0OjpSZWFkT25seVJlZ2lzdGVyOgpAQCAtMTY0MCwxMDcgKzE0NzYsMzMgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdGF0aWNWYXIoUmVnaXN0ZXJJRCog
ZHN0LCBjb25zdCBSZXNvbHZlUmUKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1
cm4gbW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc29sdmVSZXN1bHQubG9jYWwoKSk7
CiAKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkxleGljYWw6Ci0gICAgY2FzZSBSZXNvbHZlUmVz
dWx0OjpSZWFkT25seUxleGljYWw6Ci0gICAgICAgIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfZ2V0X3Njb3BlZF92YXIpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0
LT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQu
aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmRl
cHRoKCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Ci0gICAgICAg
IHJldHVybiBkc3Q7Ci0KLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkluZGV4ZWRHbG9iYWw6Ci0g
ICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUluZGV4ZWRHbG9iYWw6Ci0gICAgICAgIGlm
IChtX2xhc3RPcGNvZGVJRCA9PSBvcF9wdXRfZ2xvYmFsX3ZhcikgewotICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBkc3RQb2ludGVyOwotICAgICAgICAgICAgaW50IHNyY0luZGV4
OwotICAgICAgICAgICAgcmV0cmlldmVMYXN0VW5hcnlPcChkc3RQb2ludGVyLCBzcmNJbmRleCk7
Ci0gICAgICAgICAgICBpZiAoZHN0UG9pbnRlciA9PSByZXNvbHZlUmVzdWx0LnJlZ2lzdGVyUG9p
bnRlcigpICYmIHNyY0luZGV4ID09IGRzdC0+aW5kZXgoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZHN0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29k
ZShvcF9nZXRfZ2xvYmFsX3Zhcik7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3Qt
PmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5y
ZWdpc3RlclBvaW50ZXIoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxl
KTsKLSAgICAgICAgcmV0dXJuIGRzdDsKLQotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6V2F0Y2hl
ZEluZGV4ZWRHbG9iYWw6Ci0gICAgICAgIC8vIFNraXAgdGhlIHBlZXBob2xlIGZvciBub3cuIEl0
J3Mgbm90IGNsZWFyIHRoYXQgaXQncyBwcm9maXRhYmxlIGdpdmVuCi0gICAgICAgIC8vIHRoZSBE
RkcncyBjYXBhYmlsaXRpZXMsIGFuZCB0aGUgZmFjdCB0aGF0IGlmIGl0J3Mgd2F0Y2hhYmxlIHRo
ZW4gd2UKLSAgICAgICAgLy8gZG9uJ3QgZXhwZWN0IHRvIHNlZSBhbnkgcHV0X2dsb2JhbF92YXIn
cyBhbnl3YXkuCi0gICAgICAgIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2ds
b2JhbF92YXJfd2F0Y2hhYmxlKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LnJl
Z2lzdGVyUG9pbnRlcigpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0
YW50KGlkZW50aWZpZXIpKTsgLy8gRm9yIHRoZSBiZW5lZml0IG9mIHRoZSBERkcuCi0gICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKLSAgICAgICAgcmV0dXJuIGRzdDsKLQog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5p
dEdsb2JhbENvbnN0KGNvbnN0IFJlc29sdmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVySUQqIHZhbHVlKQorUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0R2xvYmFsQ29uc3QoY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fY29kZVR5cGUgPT0g
R2xvYmFsQ29kZSk7Ci0gICAgc3dpdGNoIChyZXNvbHZlUmVzdWx0LnR5cGUoKSkgewotICAgIGNh
c2UgUmVzb2x2ZVJlc3VsdDo6SW5kZXhlZEdsb2JhbDoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6
OlJlYWRPbmx5SW5kZXhlZEdsb2JhbDoKLSAgICAgICAgZW1pdE9wY29kZShvcF9pbml0X2dsb2Jh
bF9jb25zdCk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LnJl
Z2lzdGVyUG9pbnRlcigpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5p
bmRleCgpKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotCi0gICAgY2FzZSBSZXNvbHZlUmVzdWx0
OjpXYXRjaGVkSW5kZXhlZEdsb2JhbDoKLSAgICAgICAgZW1pdE9wY29kZShvcF9pbml0X2dsb2Jh
bF9jb25zdF9jaGVjayk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVz
dWx0LnJlZ2lzdGVyUG9pbnRlcigpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZh
bHVlLT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGpzQ2FzdDxKU0ds
b2JhbE9iamVjdCo+KHJlc29sdmVSZXN1bHQuZ2xvYmFsT2JqZWN0KCkpLT5zeW1ib2xUYWJsZSgp
LT5nZXQoaWRlbnRpZmllci5pbXBsKCkpLmFkZHJlc3NPZklzV2F0Y2hlZCgpKTsKLSAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOworICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxP
YmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgaWYgKGVu
dHJ5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLVJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0U3RhdGljVmFyKGNvbnN0IFJlc29sdmVSZXN1bHQm
IHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVySUQq
IHZhbHVlKQotewotICAgIHN3aXRjaCAocmVzb2x2ZVJlc3VsdC50eXBlKCkpIHsKLSAgICBjYXNl
IFJlc29sdmVSZXN1bHQ6OlJlZ2lzdGVyOgotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9u
bHlSZWdpc3RlcjoKLSAgICAgICAgcmV0dXJuIG1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQocmVz
b2x2ZVJlc3VsdC5sb2NhbCgpLCB2YWx1ZSk7Ci0KLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6Okxl
eGljYWw6Ci0gICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUxleGljYWw6Ci0gICAgICAg
IGVtaXRPcGNvZGUob3BfcHV0X3Njb3BlZF92YXIpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHJlc29sdmVSZXN1bHQuZGVwdGgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotICAgIGNhc2UgUmVz
b2x2ZVJlc3VsdDo6SW5kZXhlZEdsb2JhbDoKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRP
bmx5SW5kZXhlZEdsb2JhbDoKLSAgICAgICAgZW1pdE9wY29kZShvcF9wdXRfZ2xvYmFsX3Zhcik7
Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LnJlZ2lzdGVyUG9p
bnRlcigpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsK
LSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6
OldhdGNoZWRJbmRleGVkR2xvYmFsOgotICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9nbG9iYWxf
dmFyX2NoZWNrKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQu
cmVnaXN0ZXJQb2ludGVyKCkpOworICAgIAorICAgIGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hlZCgp
KSB7CisgICAgICAgIGVtaXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2spOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRy
eS5nZXRJbmRleCgpKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5k
ZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPihyZXNvbHZlUmVzdWx0Lmdsb2JhbE9iamVjdCgpKS0+c3ltYm9sVGFibGUoKS0+Z2V0KGlk
ZW50aWZpZXIuaW1wbCgpKS5hZGRyZXNzT2ZJc1dhdGNoZWQoKSk7CisgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChlbnRyeS5hZGRyZXNzT2ZJc1dhdGNoZWQoKSk7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7CiAgICAgICAgIHJldHVy
biB2YWx1ZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgCisgICAgZW1pdE9wY29kZShvcF9pbml0X2ds
b2JhbF9jb25zdCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKCZnbG9iYWxPYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2
YWx1ZS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIHZhbHVlOwogfQogCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TWV0aG9kQ2hlY2soKQpAQCAtMTc5MCw2ICsxNTUyLDE2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0QnlJZChSZWdpc3RlcklEKiBiYXNlLCBjb25z
dCBJZGVudGlmaWVyJiBwCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCitSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRvQmFzZShSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUsIE5vbmxvY2FsUmVzb2x2ZUluZm8m
IHJlc29sdmVJbmZvKQoreworICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX2Jhc2UpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
dmFsdWUtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlSW5mby5w
dXQoKSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdERpcmVjdFB1dEJ5SWQoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQogewogICAgIG1fY29kZUJsb2NrLT5hZGRQ
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgKaW5kZXggYTQyOWM3MTBlMTRjZjMzOGMzYmU3ZTI5YTM3YThhZGJhNTc1YTQ0OS4uZjMwOWU1
OGRlZGFlZTI5NzE1ZDBkMGZmNDk5OWFjM2QxMjcwODVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTE3
LDEyNCArMTE3LDQyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byB0cmF2ZXJzZSB0aGUgc2NvcGUgY2hhaW4gYXQgcnVudGltZSwgY2hlY2tpbmcgZm9yCiAgICAg
ICAgICAgICAvLyBub24tc3RyaWN0IGV2YWwgYW5kL29yIGB3aXRoJyBub2Rlcy4KICAgICAgICAg
ICAgIER5bmFtaWNGbGFnID0gMHgyLAotICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHdhcyBy
ZXNvbHZlZCB0byBhIGRlZmluaXRlIGxvY2F0aW9uLCBhbmQgdGhlCi0gICAgICAgICAgICAvLyBp
ZGVudGlmaWVyIGlzIG5vdCBuZWVkZWQgYW55IG1vcmUuCi0gICAgICAgICAgICBTdGF0aWNGbGFn
ID0gMHg0LAotICAgICAgICAgICAgLy8gT25jZSB3ZSBoYXZlIHRoZSBiYXNlIG9iamVjdCwgdGhl
IHByb3BlcnR5IHdpbGwgYmUgbG9jYXRlZCBhdCBhCi0gICAgICAgICAgICAvLyBrbm93biBpbmRl
eC4KLSAgICAgICAgICAgIEluZGV4ZWRGbGFnID0gMHg4LAotICAgICAgICAgICAgLy8gU2tpcCBz
b21lIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzY29wZSBjaGFpbiwgZ2l2ZW4gYnkgImRlcHRo
Ii4KLSAgICAgICAgICAgIFNjb3BlZEZsYWcgPSAweDEwLAogICAgICAgICAgICAgLy8gVGhlIHJl
c29sdmVkIGJpbmRpbmcgaXMgaW1tdXRhYmxlLgotICAgICAgICAgICAgUmVhZE9ubHlGbGFnID0g
MHgyMCwKLSAgICAgICAgICAgIC8vIFRoZSBiYXNlIG9iamVjdCBpcyB0aGUgZ2xvYmFsIG9iamVj
dC4KLSAgICAgICAgICAgIEdsb2JhbEZsYWcgPSAweDQwLAotICAgICAgICAgICAgLy8gVGhlIHBy
b3BlcnR5IGlzIGJlaW5nIHdhdGNoZWQsIHNvIHdyaXRlcyBzaG91bGQgYmUgc3BlY2lhbC4KLSAg
ICAgICAgICAgIFdhdGNoZWRGbGFnID0gMHg4MAorICAgICAgICAgICAgUmVhZE9ubHlGbGFnID0g
MHg0LAogICAgICAgICB9OworCiAgICAgICAgIGVudW0gVHlwZSB7CiAgICAgICAgICAgICAvLyBU
aGUgcHJvcGVydHkgaXMgbG9jYWwsIGFuZCBzdG9yZWQgaW4gYSByZWdpc3Rlci4KLSAgICAgICAg
ICAgIFJlZ2lzdGVyID0gUmVnaXN0ZXJGbGFnIHwgU3RhdGljRmxhZywKKyAgICAgICAgICAgIFJl
Z2lzdGVyID0gUmVnaXN0ZXJGbGFnLAogICAgICAgICAgICAgLy8gQSByZWFkLW9ubHkgbG9jYWws
IGNyZWF0ZWQgYnkgImNvbnN0Ii4KLSAgICAgICAgICAgIFJlYWRPbmx5UmVnaXN0ZXIgPSBSZWdp
c3RlckZsYWcgfCBSZWFkT25seUZsYWcgfCBTdGF0aWNGbGFnLAotICAgICAgICAgICAgLy8gVGhl
IHByb3BlcnR5IGlzIHN0YXRpY2FsbHkgc2NvcGVkIGZyZWUgdmFyaWFibGUuIEl0cyBjb29yZGlu
YXRlcwotICAgICAgICAgICAgLy8gYXJlIGluICJpbmRleCIgYW5kICJkZXB0aCIuCi0gICAgICAg
ICAgICBMZXhpY2FsID0gSW5kZXhlZEZsYWcgfCBTY29wZWRGbGFnIHwgU3RhdGljRmxhZywKLSAg
ICAgICAgICAgIC8vIEEgcmVhZC1vbmx5IExleGljYWwsIGNyZWF0ZWQgYnkgImNvbnN0Ii4KLSAg
ICAgICAgICAgIFJlYWRPbmx5TGV4aWNhbCA9IEluZGV4ZWRGbGFnIHwgU2NvcGVkRmxhZyB8IFJl
YWRPbmx5RmxhZyB8IFN0YXRpY0ZsYWcsCi0gICAgICAgICAgICAvLyBUaGUgcHJvcGVydHkgd2Fz
IG5vdCBib3VuZCBsZXhpY2FsbHksIHNvIGF0IHJ1bnRpbWUgd2Ugc2hvdWxkCi0gICAgICAgICAg
ICAvLyBsb29rIGRpcmVjdGx5IGluIHRoZSBnbG9iYWwgb2JqZWN0LgotICAgICAgICAgICAgR2xv
YmFsID0gR2xvYmFsRmxhZywKLSAgICAgICAgICAgIC8vIExpa2UgR2xvYmFsLCBidXQgd2UgY291
bGQgYWN0dWFsbHkgcmVzb2x2ZSB0aGUgcHJvcGVydHkgdG8gYQotICAgICAgICAgICAgLy8gRG9u
dERlbGV0ZSBwcm9wZXJ0eSBpbiB0aGUgZ2xvYmFsIG9iamVjdCwgZm9yIGluc3RhbmNlLCBhbnkK
LSAgICAgICAgICAgIC8vIGJpbmRpbmcgY3JlYXRlZCB3aXRoICJ2YXIiIGF0IHRoZSB0b3AgbGV2
ZWwuIEF0IHJ1bnRpbWUgd2UnbGwKLSAgICAgICAgICAgIC8vIGp1c3QgaW5kZXggaW50byB0aGUg
Z2xvYmFsIG9iamVjdC4KLSAgICAgICAgICAgIEluZGV4ZWRHbG9iYWwgPSBJbmRleGVkRmxhZyB8
IEdsb2JhbEZsYWcgfCBTdGF0aWNGbGFnLAotICAgICAgICAgICAgLy8gTGlrZSBJbmRleGVkR2xv
YmFsLCBidXQgdGhlIHByb3BlcnR5IGlzIGJlaW5nIHdhdGNoZWQuCi0gICAgICAgICAgICBXYXRj
aGVkSW5kZXhlZEdsb2JhbCA9IEluZGV4ZWRGbGFnIHwgR2xvYmFsRmxhZyB8IFN0YXRpY0ZsYWcg
fCBXYXRjaGVkRmxhZywKLSAgICAgICAgICAgIC8vIExpa2UgSW5kZXhlZEdsb2JhbCwgYnV0IHRo
ZSBwcm9wZXJ0eSBpcyBhbHNvIHJlYWQtb25seSwgbGlrZSBOYU4sCi0gICAgICAgICAgICAvLyBJ
bmZpbml0eSwgb3IgdW5kZWZpbmVkLgotICAgICAgICAgICAgUmVhZE9ubHlJbmRleGVkR2xvYmFs
ID0gSW5kZXhlZEZsYWcgfCBSZWFkT25seUZsYWcgfCBHbG9iYWxGbGFnIHwgU3RhdGljRmxhZywK
LSAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgc3RhdGlj
YWxseSwgZHVlIHRvIHRoZQotICAgICAgICAgICAgLy8gcHJlc2VuY2Ugb2YgYHdpdGgnIGJsb2Nr
cy4gQXQgcnVudGltZSB3ZSdsbCBoYXZlIHRvIHdhbGsgdGhlCi0gICAgICAgICAgICAvLyBzY29w
ZSBjaGFpbi4gU2NvcGVkRmxhZyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCAiZGVwdGgiIHdpbGwK
LSAgICAgICAgICAgIC8vIGhvbGQgc29tZSBudW1iZXIgb2Ygbm9kZXMgdG8gc2tpcCBpbiB0aGUg
c2NvcGUgY2hhaW4sIGJlZm9yZQotICAgICAgICAgICAgLy8gYmVnaW5uaW5nIHRoZSBzZWFyY2gu
Ci0gICAgICAgICAgICBEeW5hbWljID0gRHluYW1pY0ZsYWcgfCBTY29wZWRGbGFnLAotICAgICAg
ICAgICAgLy8gVGhlIHByb3BlcnR5IHdhcyBsb2NhdGVkIGFzIGEgc3RhdGljYWxseSBzY29wZWQg
ZnJlZSB2YXJpYWJsZSwKLSAgICAgICAgICAgIC8vIGJ1dCB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBz
Y29wZSBjaGFpbiwgdGhlcmUgd2FzIGFuIGludGVybWVkaWF0ZQotICAgICAgICAgICAgLy8gYWN0
aXZhdGlvbiB0aGF0IHVzZWQgbm9uLXN0cmljdCBgZXZhbCcuIEF0IHJ1bnRpbWUgd2UnbGwgaGF2
ZSB0bwotICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHRoZSBhYnNlbmNlIG9mIHRoaXMgcHJvcGVy
dHkgaW4gdGhvc2UgaW50ZXJ2ZW5pbmcKLSAgICAgICAgICAgIC8vIHNjb3Blcy4KLSAgICAgICAg
ICAgIER5bmFtaWNMZXhpY2FsID0gRHluYW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IFNjb3BlZEZs
YWcsCi0gICAgICAgICAgICAvLyBMaWtlIFJlYWRPbmx5TGV4aWNhbCwgYnV0IHdpdGggaW50ZXJ2
ZW5pbmcgbm9uLXN0cmljdCBgZXZhbCcuCi0gICAgICAgICAgICBEeW5hbWljUmVhZE9ubHlMZXhp
Y2FsID0gRHluYW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IFNjb3BlZEZsYWcgfCBSZWFkT25seUZs
YWcsCi0gICAgICAgICAgICAvLyBMaWtlIEdsb2JhbCwgYnV0IHdpdGggaW50ZXJ2ZW5pbmcgbm9u
LXN0cmljdCBgZXZhbCcuIEFzIHdpdGggCi0gICAgICAgICAgICAvLyBEeW5hbWljLCBTY29wZUZs
YWcgaXMgc2V0IHRvIGluZGljYXRlIHRoYXQgImRlcHRoIiBkb2VzIGluZGVlZAotICAgICAgICAg
ICAgLy8gc3RvcmUgYSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgYmVmb3JlIGRvaW5nIHRoZSBk
eW5hbWljIGNoZWNrcy4KLSAgICAgICAgICAgIER5bmFtaWNHbG9iYWwgPSBEeW5hbWljRmxhZyB8
IEdsb2JhbEZsYWcgfCBTY29wZWRGbGFnLAotICAgICAgICAgICAgLy8gTGlrZSBJbmRleGVkR2xv
YmFsLCBidXQgd2l0aCBpbnRlcnZlbmluZyBub24tc3RyaWN0IGBldmFsJy4KLSAgICAgICAgICAg
IER5bmFtaWNJbmRleGVkR2xvYmFsID0gRHluYW1pY0ZsYWcgfCBJbmRleGVkRmxhZyB8IEdsb2Jh
bEZsYWcgfCBTY29wZWRGbGFnLAotICAgICAgICAgICAgLy8gTGlrZSBSZWFkT25seUluZGV4ZWRH
bG9iYWwsIGJ1dCB3aXRoIGludGVydmVuaW5nIG5vbi1zdHJpY3QKLSAgICAgICAgICAgIC8vIGBl
dmFsJy4KLSAgICAgICAgICAgIER5bmFtaWNSZWFkT25seUluZGV4ZWRHbG9iYWwgPSBEeW5hbWlj
RmxhZyB8IEluZGV4ZWRGbGFnIHwgUmVhZE9ubHlGbGFnIHwgR2xvYmFsRmxhZyB8IFNjb3BlZEZs
YWcsCisgICAgICAgICAgICBSZWFkT25seVJlZ2lzdGVyID0gUmVnaXN0ZXJGbGFnIHwgUmVhZE9u
bHlGbGFnLAorICAgICAgICAgICAgLy8gQW55IGZvcm0gb2Ygbm9uLWxvY2FsIGxvb2t1cAorICAg
ICAgICAgICAgRHluYW1pYyA9IER5bmFtaWNGbGFnLAogICAgICAgICB9OwogCiAgICAgICAgIHN0
YXRpYyBSZXNvbHZlUmVzdWx0IHJlZ2lzdGVyUmVzb2x2ZShSZWdpc3RlcklEICpsb2NhbCwgdW5z
aWduZWQgZmxhZ3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0
KFJlZ2lzdGVyIHwgZmxhZ3MsIGxvY2FsLCBtaXNzaW5nU3ltYm9sTWFya2VyKCksIDAsIDApOwot
ICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFtaWNSZXNvbHZlKHNp
emVfdCBkZXB0aCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQo
RHluYW1pYywgMCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCBkZXB0aCwgMCk7Ci0gICAgICAgIH0K
LSAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgbGV4aWNhbFJlc29sdmUoaW50IGluZGV4LCBz
aXplX3QgZGVwdGgsIHVuc2lnbmVkIGZsYWdzKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCB0eXBlID0gKGZsYWdzICYgRHluYW1pY0ZsYWcpID8gRHluYW1pY0xleGljYWwgOiBMZXhp
Y2FsOwotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQodHlwZSB8IGZsYWdzLCAwLCBp
bmRleCwgZGVwdGgsIDApOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0
IGluZGV4ZWRHbG9iYWxSZXNvbHZlKGludCBpbmRleCwgSlNPYmplY3QgKmdsb2JhbE9iamVjdCwg
dW5zaWduZWQgZmxhZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVz
dWx0KEluZGV4ZWRHbG9iYWwgfCBmbGFncywgMCwgaW5kZXgsIDAsIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChSZWdpc3RlciB8IGZsYWdzLCBsb2NhbCk7
CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHluYW1pY0luZGV4ZWRH
bG9iYWxSZXNvbHZlKGludCBpbmRleCwgc2l6ZV90IGRlcHRoLCBKU09iamVjdCAqZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBmbGFncykKKyAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHluYW1p
Y1Jlc29sdmUoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChE
eW5hbWljSW5kZXhlZEdsb2JhbCB8IGZsYWdzLCAwLCBpbmRleCwgZGVwdGgsIGdsb2JhbE9iamVj
dCk7CisgICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChEeW5hbWljLCAwKTsKICAgICAg
ICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBnbG9iYWxSZXNvbHZlKEpTT2JqZWN0
ICpnbG9iYWxPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVz
dWx0KEdsb2JhbCwgMCwgbWlzc2luZ1N5bWJvbE1hcmtlcigpLCAwLCBnbG9iYWxPYmplY3QpOwot
ICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBSZXNvbHZlUmVzdWx0IGR5bmFtaWNHbG9iYWxSZXNv
bHZlKHNpemVfdCBkeW5hbWljRGVwdGgsIEpTT2JqZWN0ICpnbG9iYWxPYmplY3QpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0KER5bmFtaWNHbG9iYWwsIDAsIG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSwgZHluYW1pY0RlcHRoLCBnbG9iYWxPYmplY3QpOwotICAgICAg
ICB9Ci0KICAgICAgICAgdW5zaWduZWQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
CiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIGNvcnJlc3BvbmRpbmcgdG8gYSBsb2Nh
bCB2YXJpYWJsZSwgb3IgMCBpZiBubwogICAgICAgICAvLyBzdWNoIHJlZ2lzdGVyIGV4aXN0cy4g
UmVnaXN0ZXJzIHJldHVybmVkIGJ5IFJlc29sdmVSZXN1bHQ6OmxvY2FsKCkgZG8KICAgICAgICAg
Ly8gbm90IHJlcXVpcmUgZXhwbGljaXQgcmVmZXJlbmNlIGNvdW50aW5nLgogICAgICAgICBSZWdp
c3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWw7IH0KLSAgICAgICAgaW50IGlu
ZGV4KCkgY29uc3QgeyBBU1NFUlQgKGlzSW5kZXhlZCgpIHx8IGlzUmVnaXN0ZXIoKSk7IHJldHVy
biBtX2luZGV4OyB9Ci0gICAgICAgIHNpemVfdCBkZXB0aCgpIGNvbnN0IHsgQVNTRVJUKGlzU2Nv
cGVkKCkpOyByZXR1cm4gbV9kZXB0aDsgfQotICAgICAgICBKU09iamVjdCogZ2xvYmFsT2JqZWN0
KCkgY29uc3QgeyBBU1NFUlQoaXNHbG9iYWwoKSk7IEFTU0VSVChtX2dsb2JhbE9iamVjdCk7IHJl
dHVybiBtX2dsb2JhbE9iamVjdDsgfQotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJl
Z2lzdGVyUG9pbnRlcigpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcigpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSAmIFJlZ2lzdGVyRmxhZzsgfQogICAgICAgICBib29sIGlzRHluYW1p
YygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIER5bmFtaWNGbGFnOyB9Ci0gICAgICAgIGJvb2wg
aXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBTdGF0aWNGbGFnOyB9Ci0gICAgICAg
IGJvb2wgaXNJbmRleGVkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgSW5kZXhlZEZsYWc7IH0K
LSAgICAgICAgYm9vbCBpc1Njb3BlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIFNjb3BlZEZs
YWc7IH0KICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gKG1fdHlwZSAm
IFJlYWRPbmx5RmxhZykgJiYgIWlzRHluYW1pYygpOyB9Ci0gICAgICAgIGJvb2wgaXNHbG9iYWwo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBHbG9iYWxGbGFnOyB9CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBSZXNvbHZlUmVzdWx0KHVuc2lnbmVkIHR5cGUsIFJlZ2lzdGVySUQqIGxvY2FsLCBp
bnQgaW5kZXgsIHNpemVfdCBkZXB0aCwgSlNPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAg
UmVzb2x2ZVJlc3VsdCh1bnNpZ25lZCB0eXBlLCBSZWdpc3RlcklEKiBsb2NhbCkKICAgICAgICAg
ICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCiAgICAgICAg
ICAgICAsIG1fbG9jYWwobG9jYWwpCi0gICAgICAgICAgICAsIG1fZGVwdGgoZGVwdGgpCi0gICAg
ICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKICAgICAgICAgewogI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKQEAgLTI0NiwxMCArMTY0LDM2
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICAgICAgICAgdW5zaWduZWQgbV90eXBlOwot
ICAgICAgICBpbnQgbV9pbmRleDsgLy8gSW5kZXggaW4gc2NvcGUsIGlmIEluZGV4ZWRGbGFnIGlz
IHNldAogICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2FsOyAvLyBMb2NhbCByZWdpc3RlciwgaWYg
UmVnaXN0ZXJGbGFnIGlzIHNldAotICAgICAgICBzaXplX3QgbV9kZXB0aDsgLy8gRGVwdGggaW4g
c2NvcGUgY2hhaW4sIGlmIFNjb3BlZEZsYWcgaXMgc2V0Ci0gICAgICAgIEpTT2JqZWN0KiBtX2ds
b2JhbE9iamVjdDsgLy8gSWYgR2xvYmFsRmxhZyBpcyBzZXQuCisgICAgfTsKKworICAgIHN0cnVj
dCBOb25sb2NhbFJlc29sdmVJbmZvIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2Vu
ZXJhdG9yOworICAgICAgICBOb25sb2NhbFJlc29sdmVJbmZvKCkKKyAgICAgICAgICAgIDogbV9z
dGF0ZShVbnVzZWQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB+Tm9ubG9jYWxSZXNv
bHZlSW5mbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IFB1dCk7
CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHJlc29sdmVkKHVpbnQzMl90
IHB1dFRvQmFzZUluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocHV0VG9CYXNl
SW5kZXgpOworICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKKyAgICAgICAg
ICAgIG1fc3RhdGUgPSBSZXNvbHZlZDsKKyAgICAgICAgICAgIG1fcHV0VG9CYXNlSW5kZXggPSBw
dXRUb0Jhc2VJbmRleDsKKyAgICAgICAgfQorICAgICAgICB1aW50MzJfdCBwdXQoKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBSZXNvbHZlZCk7CisgICAgICAgICAg
ICBtX3N0YXRlID0gUHV0OworICAgICAgICAgICAgcmV0dXJuIG1fcHV0VG9CYXNlSW5kZXg7Cisg
ICAgICAgIH0KKyAgICAgICAgZW51bSBTdGF0ZSB7IFVudXNlZCwgUmVzb2x2ZWQsIFB1dCB9Owor
ICAgICAgICBTdGF0ZSBtX3N0YXRlOworICAgICAgICB1aW50MzJfdCBtX3B1dFRvQmFzZUluZGV4
OwogICAgIH07CiAKICAgICBjbGFzcyBCeXRlY29kZUdlbmVyYXRvciB7CkBAIC00NjAsMTYgKzQw
NCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFR5cGVPZihS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1pdFVuYXJ5T3Aob3Bf
dHlwZW9mLCBkc3QsIHNyYyk7IH0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEluKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGJhc2UpIHsgcmV0dXJu
IGVtaXRCaW5hcnlPcChvcF9pbiwgZHN0LCBwcm9wZXJ0eSwgYmFzZSwgT3BlcmFuZFR5cGVzKCkp
OyB9CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFN0YXRpY1ZhcihSZWdpc3RlcklEKiBk
c3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRQdXRTdGF0aWNWYXIoY29uc3QgUmVzb2x2ZVJlc3VsdCYsIGNvbnN0IElk
ZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJ
bml0R2xvYmFsQ29uc3QoY29uc3QgUmVzb2x2ZVJlc3VsdCYsIGNvbnN0IElkZW50aWZpZXImLCBS
ZWdpc3RlcklEKiB2YWx1ZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRMb2NhbFZhcihS
ZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJik7
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJbml0R2xvYmFsQ29uc3QoY29uc3QgSWRlbnRpZmll
ciYsIFJlZ2lzdGVySUQqIHZhbHVlKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2
ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlQmFzZShSZWdpc3Rl
cklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSk7
Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlV2l0aEJhc2UoUmVnaXN0ZXJJRCogYmFz
ZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVCYXNl
Rm9yUHV0KFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5LCBOb25sb2NhbFJlc29sdmVJbmZvJik7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0
ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5LCBOb25sb2NhbFJlc29sdmVJbmZvJik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRS
ZXNvbHZlV2l0aFRoaXMoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwg
Y29uc3QgUmVzb2x2ZVJlc3VsdCYsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KTsKIAorICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UHV0VG9CYXNlKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwgTm9ubG9jYWxSZXNvbHZlSW5mbyYpOworCiAg
ICAgICAgIHZvaWQgZW1pdE1ldGhvZENoZWNrKCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dEdldEJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eSk7CkBAIC01ODksNiArNTM0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxkb3VibGUsIEpTVmFsdWU+IE51bWJlck1hcDsKICAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBKU1N0cmluZyosIElkZW50aWZpZXJSZXBI
YXNoPiBJZGVudGlmaWVyU3RyaW5nTWFwOworICAgICAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAg
ICAgICAgICBpbnQgcmVzb2x2ZU9wZXJhdGlvbnM7CisgICAgICAgICAgICBpbnQgcHV0T3BlcmF0
aW9uczsKKyAgICAgICAgfSBSZXNvbHZlQ2FjaGVFbnRyeTsKKyAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZ0ltcGwqLCBSZXNvbHZlQ2FjaGVFbnRyeSwgSWRlbnRpZmllclJlcEhhc2g+IElk
ZW50aWZpZXJSZXNvbHZlUHV0TWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1w
bCosIHVpbnQzMl90LCBJZGVudGlmaWVyUmVwSGFzaD4gSWRlbnRpZmllclJlc29sdmVNYXA7CiAg
ICAgICAgIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogCkBAIC03NTQsNiAr
NzA1LDc1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBOdW1iZXJNYXAgbV9udW1iZXJNYXA7
CiAgICAgICAgIElkZW50aWZpZXJTdHJpbmdNYXAgbV9zdHJpbmdNYXA7CiAKKyAgICAgICAgdWlu
dDMyX3QgZ2V0UmVzb2x2ZU9wZXJhdGlvbnMoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2R5bmFtaWNTY29wZURlcHRoKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+YWRkUmVzb2x2ZSgpOworICAgICAgICAgICAgSWRl
bnRpZmllclJlc29sdmVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Jlc29sdmVDYWNoZU1hcC5h
ZGQocHJvcGVydHkuaW1wbCgpLCAwKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbV9jb2RlQmxvY2st
PmFkZFJlc29sdmUoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OworICAgICAgICB9CisKKyAgICAgICAgdWludDMyX3QgZ2V0UmVzb2x2ZVdpdGhUaGlzT3BlcmF0
aW9ucyhjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT5hZGRSZXNvbHZlKCk7CisgICAgICAgICAgICBJZGVudGlmaWVyUmVzb2x2ZU1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1fcmVzb2x2ZVdpdGhUaGlzQ2FjaGVNYXAuYWRkKHByb3BlcnR5Lmlt
cGwoKSwgMCk7CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRSZXNvbHZlKCk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIHVpbnQzMl90IGdldFJlc29sdmVCYXNlT3BlcmF0aW9ucyhJZGVudGlmaWVyUmVz
b2x2ZVB1dE1hcCYgbWFwLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgdWludDMyX3QmIHB1
dFRvQmFzZU9wZXJhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fZHluYW1pY1Nj
b3BlRGVwdGgpIHsKKyAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24gPSBtX2NvZGVC
bG9jay0+YWRkUHV0VG9CYXNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nr
LT5hZGRSZXNvbHZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSZXNvbHZlQ2FjaGVF
bnRyeSBlbnRyeSA9IHstMSwgLTF9OworICAgICAgICAgICAgSWRlbnRpZmllclJlc29sdmVQdXRN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAuYWRkKHByb3BlcnR5LmltcGwoKSwgZW50cnkpOwor
ICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUucmVzb2x2ZU9wZXJhdGlvbnMgPSBtX2NvZGVCbG9jay0+YWRkUmVz
b2x2ZSgpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUucHV0T3BlcmF0
aW9ucyA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnB1dE9w
ZXJhdGlvbnMgPSBnZXRQdXRUb0Jhc2VPcGVyYXRpb24ocHJvcGVydHkpOworICAgICAgICAgICAg
cHV0VG9CYXNlT3BlcmF0aW9uID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5wdXRPcGVyYXRpb25z
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzb2x2ZU9wZXJh
dGlvbnM7CisgICAgICAgIH0KKworICAgICAgICB1aW50MzJfdCBnZXRSZXNvbHZlQmFzZU9wZXJh
dGlvbnMoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVpbnQzMl90IHNjcmF0Y2g7CisgICAgICAgICAgICByZXR1cm4gZ2V0UmVzb2x2ZUJhc2VPcGVy
YXRpb25zKG1fcmVzb2x2ZUJhc2VNYXAsIHByb3BlcnR5LCBzY3JhdGNoKTsKKyAgICAgICAgfQor
CisgICAgICAgIHVpbnQzMl90IGdldFJlc29sdmVCYXNlRm9yUHV0T3BlcmF0aW9ucyhjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eSwgdWludDMyX3QmIHB1dFRvQmFzZU9wZXJhdGlvbikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGdldFJlc29sdmVCYXNlT3BlcmF0aW9ucyhtX3Jlc29s
dmVCYXNlRm9yUHV0TWFwLCBwcm9wZXJ0eSwgcHV0VG9CYXNlT3BlcmF0aW9uKTsKKyAgICAgICAg
fQorCisgICAgICAgIHVpbnQzMl90IGdldFJlc29sdmVXaXRoQmFzZUZvclB1dE9wZXJhdGlvbnMo
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIHVpbnQzMl90JiBwdXRUb0Jhc2VPcGVyYXRpb24p
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRSZXNvbHZlQmFzZU9wZXJhdGlvbnMo
bV9yZXNvbHZlV2l0aEJhc2VGb3JQdXRNYXAsIHByb3BlcnR5LCBwdXRUb0Jhc2VPcGVyYXRpb24p
OworICAgICAgICB9CisKKyAgICAgICAgdWludDMyX3QgZ2V0UHV0VG9CYXNlT3BlcmF0aW9uKGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9k
eW5hbWljU2NvcGVEZXB0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmFk
ZFB1dFRvQmFzZSgpOworICAgICAgICAgICAgSWRlbnRpZmllclJlc29sdmVNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX3B1dFRvQmFzZU1hcC5hZGQocHJvcGVydHkuaW1wbCgpLCAwKTsKKyAgICAg
ICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gbV9jb2RlQmxvY2stPmFkZFB1dFRvQmFzZSgpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBJZGVu
dGlmaWVyUmVzb2x2ZU1hcCBtX3B1dFRvQmFzZU1hcDsKKyAgICAgICAgSWRlbnRpZmllclJlc29s
dmVNYXAgbV9yZXNvbHZlQ2FjaGVNYXA7CisgICAgICAgIElkZW50aWZpZXJSZXNvbHZlTWFwIG1f
cmVzb2x2ZVdpdGhUaGlzQ2FjaGVNYXA7CisgICAgICAgIElkZW50aWZpZXJSZXNvbHZlUHV0TWFw
IG1fcmVzb2x2ZUJhc2VNYXA7CisgICAgICAgIElkZW50aWZpZXJSZXNvbHZlUHV0TWFwIG1fcmVz
b2x2ZUJhc2VGb3JQdXRNYXA7CisgICAgICAgIElkZW50aWZpZXJSZXNvbHZlUHV0TWFwIG1fcmVz
b2x2ZVdpdGhCYXNlRm9yUHV0TWFwOworCiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxE
YXRhOwogCiAgICAgICAgIE9wY29kZUlEIG1fbGFzdE9wY29kZUlEOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDBhYzQx
NDliNjQxMmI4YjkxM2JjOTUwNGViZDYzZDg5MWVkMmFjMTYuLjEzMWNlY2ZmNzE5MTgxYTU4MWY2
M2NhYTA5NTU5Mzg3MDFhY2IyZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTE0MSw3ICsxNDEsNyBAQCBSZWdpc3Rl
cklEKiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdAogCiBib29sIFJlc29sdmVOb2RlOjppc1B1cmUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvcikgY29uc3QKIHsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLnJlc29sdmUo
bV9pZGVudCkuaXNTdGF0aWMoKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLnJlc29sdmUobV9pZGVu
dCkuaXNSZWdpc3RlcigpOwogfQogCiBSZWdpc3RlcklEKiBSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQz
MSwxNCArNDMxLDYgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwg
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICB9CiAKLSAgICBpZiAo
cmVzb2x2ZVJlc3VsdC5pc1N0YXRpYygpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
dW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBDYWxsQXJndW1lbnRzIGNh
bGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEdl
dFN0YXRpY1ZhcihmdW5jLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZp
bmVkKCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKLSAgICB9Ci0K
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
ICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAg
IGludCBpZGVudGlmaWVyU3RhcnQgPSBkaXZvdCgpIC0gc3RhcnRPZmZzZXQoKTsKQEAgLTYyMywy
OSArNjE1LDE4IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkCiAgICAgICAgICAgICByZXR1cm4g
ZW1pdFByZUluY09yRGVjKGdlbmVyYXRvciwgbG9jYWwsIG1fb3BlcmF0b3IpOwogICAgICAgICBy
ZXR1cm4gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGxvY2FsLCBtX29wZXJhdG9yKTsKICAgICB9Ci0KLSAgICBpZiAocmVzb2x2ZVJl
c3VsdC5pc1N0YXRpYygpICYmICFyZXNvbHZlUmVzdWx0LmlzUmVhZE9ubHkoKSkgewotICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldFN0YXRpY1Zhcihn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHJlc29sdmVSZXN1bHQsIGlkZW50KTsKLSAgICAgICAg
UmVnaXN0ZXJJRCogb2xkVmFsdWU7Ci0gICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9y
ZWRSZXN1bHQoKSkgewotICAgICAgICAgICAgb2xkVmFsdWUgPSAwOwotICAgICAgICAgICAgZW1p
dFByZUluY09yRGVjKGdlbmVyYXRvciwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG9sZFZhbHVlID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0
b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpLCBtX29wZXJh
dG9yKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTdGF0aWNWYXIocmVzb2x2ZVJlc3VsdCwg
aWRlbnQsIHZhbHVlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIG9sZFZhbHVlOwotICAgIH0KICAg
ICAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0
KCksIGVuZE9mZnNldCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdl
dCgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCk7CisgICAgTm9ubG9jYWxSZXNvbHZlSW5mbyByZXNv
bHZlSW5mbzsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVz
b2x2ZVdpdGhCYXNlRm9yUHV0KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCks
IHJlc29sdmVSZXN1bHQsIGlkZW50LCByZXNvbHZlSW5mbyk7CiAgICAgUmVnaXN0ZXJJRCogb2xk
VmFsdWU7CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKSB7CiAgICAg
ICAgIG9sZFZhbHVlID0gMDsKICAgICAgICAgZW1pdFByZUluY09yRGVjKGdlbmVyYXRvciwgdmFs
dWUuZ2V0KCksIG1fb3BlcmF0b3IpOwogICAgIH0gZWxzZQogICAgICAgICBvbGRWYWx1ZSA9IGVt
aXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJh
c2UuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb0Jh
c2UoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCByZXNvbHZlSW5mbyk7CiAgICAgcmV0
dXJuIG9sZFZhbHVlOwogfQogCkBAIC04MjAsMTggKzgwMSwxMiBAQCBSZWdpc3RlcklEKiBQcmVm
aXhOb2RlOjplbWl0UmVzb2x2ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkcwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVk
ZWQoZHN0LCBsb2NhbCk7CiAgICAgfQogCi0gICAgaWYgKHJlc29sdmVSZXN1bHQuaXNTdGF0aWMo
KSAmJiAhcmVzb2x2ZVJlc3VsdC5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IuZW1pdEdldFN0YXRpY1ZhcihnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1bHQsIGlkZW50KTsKLSAgICAgICAgZW1pdFBy
ZUluY09yRGVjKGdlbmVyYXRvciwgcHJvcERzdC5nZXQoKSwgbV9vcGVyYXRvcik7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0UHV0U3RhdGljVmFyKHJlc29sdmVSZXN1bHQsIGlkZW50LCBwcm9wRHN0
LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7Ci0gICAgfQotCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7
Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRo
QmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BEc3QuZ2V0KCksIHJlc29sdmVSZXN1
bHQsIGlkZW50KTsKKyAgICBOb25sb2NhbFJlc29sdmVJbmZvIHJlc29sdmVWZXJpZmllcjsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNl
Rm9yUHV0KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcERzdC5nZXQoKSwgcmVzb2x2ZVJl
c3VsdCwgaWRlbnQsIHJlc29sdmVWZXJpZmllcik7CiAgICAgZW1pdFByZUluY09yRGVjKGdlbmVy
YXRvciwgcHJvcERzdC5nZXQoKSwgbV9vcGVyYXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRC
eUlkKGJhc2UuZ2V0KCksIGlkZW50LCBwcm9wRHN0LmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dFB1dFRvQmFzZShiYXNlLmdldCgpLCBpZGVudCwgcHJvcERzdC5nZXQoKSwgcmVzb2x2ZVZlcmlm
aWVyKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0
LCBwcm9wRHN0LmdldCgpKTsKIH0KIApAQCAtMTI1NywxOCArMTIzMiwxMiBAQCBSZWdpc3RlcklE
KiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZQogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9u
SWZOZWVkZWQoZHN0LCByZXN1bHQpOwogICAgIH0KIAotICAgIGlmIChyZXNvbHZlUmVzdWx0Lmlz
U3RhdGljKCkgJiYgIXJlc29sdmVSZXN1bHQuaXNSZWFkT25seSgpKSB7Ci0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXRHZXRTdGF0aWNWYXIoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKLSAgICAgICAg
UmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwg
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwg
bV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBl
KCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwotICAgICAgICBnZW5lcmF0b3IuZW1p
dFB1dFN0YXRpY1ZhcihyZXNvbHZlUmVzdWx0LCBtX2lkZW50LCByZXN1bHQpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2Vu
ZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSAtIHN0YXJ0T2Zmc2V0KCkgKyBtX2lkZW50Lmxlbmd0aCgpLCBtX2lkZW50
Lmxlbmd0aCgpLCAwKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5l
bWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc3JjMS5nZXQoKSwg
cmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CisgICAgTm9ubG9jYWxSZXNvbHZlSW5mbyByZXNvbHZl
VmVyaWZpZXI7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJl
c29sdmVXaXRoQmFzZUZvclB1dChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNyYzEuZ2V0KCks
IHJlc29sdmVSZXN1bHQsIG1faWRlbnQsIHJlc29sdmVWZXJpZmllcik7CiAgICAgUmVnaXN0ZXJJ
RCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgbV9yaWdodCwg
bV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmln
aHQtPnJlc3VsdERlc2NyaXB0b3IoKSksIHRoaXMpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0KTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRQdXRUb0Jhc2UoYmFzZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0LCByZXNvbHZlVmVy
aWZpZXIpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXNzaWduUmVz
b2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyNzcsNyAr
MTI0Niw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0CiB7CiAgICAgUmVzb2x2ZVJlc3VsdCBy
ZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUobV9pZGVudCk7CiAKLSAgICBpZiAoUmVn
aXN0ZXJJRCAqbG9jYWwgPSByZXNvbHZlUmVzdWx0LmxvY2FsKCkpIHsKKyAgICBpZiAoUmVnaXN0
ZXJJRCogbG9jYWwgPSByZXNvbHZlUmVzdWx0LmxvY2FsKCkpIHsKICAgICAgICAgaWYgKHJlc29s
dmVSZXN1bHQuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFJlYWRP
bmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dE5vZGUoZHN0LCBtX3JpZ2h0KTsKQEAgLTEyODYsMjAgKzEyNTUsMTMgQEAgUmVnaXN0ZXJJRCog
QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3QKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc1N0
YXRpYygpICYmICFyZXNvbHZlUmVzdWx0LmlzUmVhZE9ubHkoKSkgewotICAgICAgICBpZiAoZHN0
ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCi0gICAgICAgICAgICBkc3QgPSAwOwotICAg
ICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFN0YXRpY1ZhcihyZXNvbHZlUmVzdWx0LCBtX2lk
ZW50LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKKyAgICBOb25sb2Nh
bFJlc29sdmVJbmZvIHJlc29sdmVWZXJpZmllcjsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50LCByZXNvbHZlVmVyaWZpZXIpOwogICAgIGlmIChk
c3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgZHN0ID0gMDsKICAgICBS
ZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQpOwogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5k
T2Zmc2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwg
bV9pZGVudCwgdmFsdWUpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dFRvQmFzZShiYXNl
LmdldCgpLCBtX2lkZW50LCB2YWx1ZSwgcmVzb2x2ZVZlcmlmaWVyKTsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkRvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzOTQsMTYgKzEzNTYsMTQgQEAgUmVnaXN0ZXJJRCogQ29u
c3REZWNsTm9kZTo6ZW1pdENvZGVTaW5nbGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikK
IAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IG1faW5pdCA/IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2luaXQpIDogZ2VuZXJhdG9yLmVtaXRMb2FkKDAsIGpzVW5kZWZpbmVkKCkpOwogCi0g
ICAgaWYgKHJlc29sdmVSZXN1bHQuaXNTdGF0aWMoKSkgewotICAgICAgICBpZiAoZ2VuZXJhdG9y
LmNvZGVUeXBlKCkgPT0gR2xvYmFsQ29kZSkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdEluaXRHbG9iYWxDb25zdChyZXNvbHZlUmVzdWx0LCBtX2lkZW50LCB2YWx1ZS5nZXQoKSk7
Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dFN0YXRpY1ZhcihyZXNvbHZlUmVzdWx0
LCBtX2lkZW50LCB2YWx1ZS5nZXQoKSk7CisgICAgaWYgKGdlbmVyYXRvci5jb2RlVHlwZSgpID09
IEdsb2JhbENvZGUpIHsKKyAgICAgICAgaWYgKFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdlbmVyYXRv
ci5lbWl0SW5pdEdsb2JhbENvbnN0KG1faWRlbnQsIHZhbHVlLmdldCgpKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIGlmIChnZW5lcmF0b3IuY29kZVR5cGUoKSAhPSBF
dmFsQ29kZSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwogCi0gICAgLy8gRklYTUU6IFdo
aWxlIHRoaXMgY29kZSBzaG91bGQgb25seSBiZSBoaXQgaW4gYW4gZXZhbCBibG9jaywgaXQgd2ls
bCBhc3NpZ24KLSAgICAvLyB0byB0aGUgd3JvbmcgYmFzZSBpZiBtX2lkZW50IGV4aXN0cyBpbiBh
biBpbnRlcnZlbmluZyB3aXRoIHNjb3BlLgorICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcmVzdWx0
IGluIGluY29ycmVjdCBhc3NpZ25tZW50IGlmIG1faWRlbnQgZXhpc3RzIGluIGFuIGludGVydmVu
aW5nIHdpdGggc2NvcGUuCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcmVzb2x2ZVJlc3VsdCwg
bV9pZGVudCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBt
X2lkZW50LCB2YWx1ZS5nZXQoKSk7CiB9CkBAIC0xNjkxLDEwICsxNjUxLDExIEBAIFJlZ2lzdGVy
SUQqIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzCiAgICAgICAgIGlmICghcHJvcGVydHlOYW1lKSB7CiAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdGVjdCA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgICAgIFJl
Z2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlRm9yUHV0KGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgcmVzb2x2ZVJlc3VsdCwgaWRlbnQpOworICAgICAgICAgICAgTm9u
bG9jYWxSZXNvbHZlSW5mbyByZXNvbHZlVmVyaWZpZXI7CisgICAgICAgICAgICBSZWdpc3RlcklE
KiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFzZUZvclB1dChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIHJlc29sdmVSZXN1bHQsIGlkZW50LCByZXNvbHZlVmVyaWZpZXIpOwogCiAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0
KCksIGVuZE9mZnNldCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNl
LCBpZGVudCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9C
YXNlKGJhc2UsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIHJlc29sdmVWZXJpZmllcik7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBleHBlY3RlZFN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0
TW92ZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAg
ICBnZW5lcmF0b3IucHVzaE9wdGltaXNlZEZvckluKGV4cGVjdGVkU3Vic2NyaXB0LmdldCgpLCBp
dGVyLmdldCgpLCBpLmdldCgpLCBwcm9wZXJ0eU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggZGE1NjgyZjU1ZWE0YzUxYjQ1YmQ5
MDVlNzY1NDUxNjA2NGVkZjYzMi4uZjM0NTgyYmNlOTU0MWNiZWU2NWZmZDE5YjUxZWQ3MGY5MjZm
OTI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCkBAIC0xNTI0LDcgKzE1MjQsMTIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZGV4SW5CbG9jaykKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgR2FyYmFnZVZhbHVlOgor
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKwogICAg
IGNhc2UgRm9yY2VPU1JFeGl0OgogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBkYzY2OGQ5M2UxYWFjM2I4OWViZjYzODc5MmYxMjJh
ZjI1MjNlNmUwLi5kN2Q5NDg1ODMxODYyYjNmZDE1NjA1MTU1N2JjY2NiYzI3YzU3NjU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAt
MTY5LDEyICsxNjksMTcgQEAgcHJpdmF0ZToKICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0
aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBs
YW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGlu
dCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBi
b29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihib29sIHVzZXNSZXN1bHQsIGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIE5vZGVJbmRleCBoYW5kbGVHZXRCeU9mZnNldChT
cGVjdWxhdGVkVHlwZSwgTm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5T2Zmc2V0KAogICAgICAgICBp
bnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUluZGV4IGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2
b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1
bGF0ZWRUeXBlLCBOb2RlSW5kZXggYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAg
ICAgICAgY29uc3QgR2V0QnlJZFN0YXR1cyYpOworCisgICAgLy8gQ29udmVydCBhIHNldCBvZiBS
ZXNvbHZlT3BlcmF0aW9ucyBpbnRvIGdyYXBoIG5vZGVzCisgICAgYm9vbCBwYXJzZVJlc29sdmVP
cGVyYXRpb25zKFNwZWN1bGF0ZWRUeXBlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCB1bnNp
Z25lZCBvcGVyYXRpb25zLCB1bnNpZ25lZCBwdXRUb0Jhc2VPcGVyYXRpb24sIE5vZGVJbmRleCog
YmFzZSwgTm9kZUluZGV4KiB2YWx1ZSk7CisKICAgICAvLyBQcmVwYXJlIHRvIHBhcnNlIGEgYmxv
Y2suCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgLy8gUGFyc2UgYSBzaW5n
bGUgYmFzaWMgYmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgpAQCAtMTE0Myw2ICsxMTQ4
LDggQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2lkZW50aWZpZXJSZW1h
cDsKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2NvbnN0YW50UmVtYXA7CiAgICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gbV9jb25zdGFudEJ1ZmZlclJlbWFwOworICAgICAgICBWZWN0b3I8dW5z
aWduZWQ+IG1fcmVzb2x2ZU9wZXJhdGlvblJlbWFwOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+
IG1fcHV0VG9CYXNlT3BlcmF0aW9uUmVtYXA7CiAgICAgICAgIAogICAgICAgICAvLyBCbG9ja3Mg
aW50cm9kdWNlZCBieSB0aGlzIGNvZGUgYmxvY2ssIHdoaWNoIG5lZWQgc3VjY2Vzc29yIGxpbmtp
bmcuCiAgICAgICAgIC8vIE1heSBpbmNsdWRlIHVwIHRvIG9uZSBiYXNpYyBibG9jayB0aGF0IGlu
Y2x1ZGVzIHRoZSBjb250aW51YXRpb24gYWZ0ZXIKQEAgLTE3NzksMjQgKzE3ODYsMjggQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQo
Ci0gICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwg
Tm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCi0gICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQorTm9kZUluZGV4IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlSW5kZXggYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIE5vZGVJbmRleCBw
cm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgZWxzZQogICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7Ci0gICAgc2V0KGRlc3RpbmF0aW9u
T3BlcmFuZCwKLSAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgIEdldEJ5T2Zmc2V0LCBP
cEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0
aW9uKSwKLSAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSkpOwotICAgICAgICAKKyAgICBOb2Rl
SW5kZXggZ2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVy
dHlTdG9yYWdlKTsKKwogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwog
ICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0
KTsKICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nl
c3NEYXRhKTsKKworICAgIHJldHVybiBnZXRCeU9mZnNldDsKK30KKwordm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCisgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIHNldChkZXN0aW5h
dGlvbk9wZXJhbmQsIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZp
ZXJOdW1iZXIsIG9mZnNldCkpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRC
eUlkKApAQCAtMTg2MCwxMCArMTg3MSwxNjcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJlcGFy
ZVRvUGFyc2VCbG9jaygpCiAgICAgbV9jZWxsQ29uc3RhbnROb2Rlcy5jbGVhcigpOwogfQogCiti
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpb25zKFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIHVuc2lnbmVkIGlkZW50aWZpZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVu
c2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwgTm9kZUluZGV4KiBiYXNlLCBOb2RlSW5kZXgqIHZh
bHVlKQoreworICAgIFJlc29sdmVPcGVyYXRpb25zKiByZXNvbHZlT3BlcmF0aW9ucyA9IG1fY29k
ZUJsb2NrLT5yZXNvbHZlT3BlcmF0aW9ucyhvcGVyYXRpb25zKTsKKyAgICBpZiAocmVzb2x2ZU9w
ZXJhdGlvbnMtPmlzRW1wdHkoKSkgeworICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsK
KyAgICBpbnQgc2tpcENvdW50ID0gMDsKKyAgICBib29sIHNraXBwZWRTY29wZXMgPSBmYWxzZTsK
KyAgICBib29sIHNldEJhc2UgPSBmYWxzZTsKKyAgICBSZXNvbHZlT3BlcmF0aW9uKiBwYyA9IHJl
c29sdmVPcGVyYXRpb25zLT5kYXRhKCk7CisgICAgTm9kZUluZGV4IGxvY2FsQmFzZSA9IDA7Cisg
ICAgYm9vbCByZXNvbHZpbmdCYXNlID0gdHJ1ZTsKKyAgICB3aGlsZSAocmVzb2x2aW5nQmFzZSkg
eworICAgICAgICBzd2l0Y2ggKHBjLT5tX29wZXJhdGlvbikgeworICAgICAgICBjYXNlIFJlc29s
dmVSZXR1cm5HbG9iYWxPYmplY3RBc0Jhc2U6CisgICAgICAgICAgICAqYmFzZSA9IGdldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Q29uc3RhbnQoKSk7CisgICAgICAgICAgICBBU1NFUlQoIXZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGNhc2UgUmVzb2x2ZVNl
dEJhc2VUb0dsb2JhbDoKKyAgICAgICAgICAgICpiYXNlID0gZ2V0KG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RDb25zdGFudCgpKTsKKyAgICAgICAgICAgIHNldEJhc2UgPSB0cnVlOworICAgICAg
ICAgICAgcmVzb2x2aW5nQmFzZSA9IGZhbHNlOworICAgICAgICAgICAgKytwYzsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUmVzb2x2ZVNldEJhc2VUb1VuZGVmaW5lZDoKKyAg
ICAgICAgICAgICpiYXNlID0gY29uc3RhbnRVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHNldEJh
c2UgPSB0cnVlOworICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9IGZhbHNlOworICAgICAgICAg
ICAgKytwYzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUmVzb2x2ZVNldEJh
c2VUb1Njb3BlOgorICAgICAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9HcmFwaChHZXRTY29wZSwg
T3BJbmZvKHNraXBDb3VudCkpOworICAgICAgICAgICAgKmJhc2UgPSBsb2NhbEJhc2U7CisgICAg
ICAgICAgICBzZXRCYXNlID0gdHJ1ZTsKKworICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9IGZh
bHNlOworCisgICAgICAgICAgICAvLyBSZXNldCB0aGUgc2NvcGUgc2tpcHBpbmcgYXMgd2UndmUg
YWxyZWFkeSBsb2FkZWQgaXQKKyAgICAgICAgICAgIHNraXBwZWRTY29wZXMgPSBmYWxzZTsKKyAg
ICAgICAgICAgICsrcGM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXNvbHZl
UmV0dXJuU2NvcGVBc0Jhc2U6CisgICAgICAgICAgICAqYmFzZSA9IGFkZFRvR3JhcGgoR2V0U2Nv
cGUsIE9wSW5mbyhza2lwQ291bnQpKTsKKyAgICAgICAgICAgIEFTU0VSVCghdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgY2FzZSBSZXNvbHZlU2tpcFRvcFNjb3Bl
Tm9kZToKKyAgICAgICAgICAgIHNraXBDb3VudCA9IDE7CisgICAgICAgICAgICBza2lwcGVkU2Nv
cGVzID0gdHJ1ZTsKKyAgICAgICAgICAgICsrcGM7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFJlc29sdmVTa2lwU2NvcGVzOgorICAgICAgICAgICAgc2tpcENvdW50ICs9IHBj
LT5tX3Njb3Blc1RvU2tpcDsKKyAgICAgICAgICAgIHNraXBwZWRTY29wZXMgPSB0cnVlOworICAg
ICAgICAgICAgKytwYzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUmVzb2x2
ZUZhaWw6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJlc29sdmluZ0Jhc2UgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAoc2tpcHBlZFNjb3BlcykKKyAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9HcmFwaChHZXRTY29w
ZSwgT3BJbmZvKHNraXBDb3VudCkpOworCisgICAgaWYgKGJhc2UgJiYgIXNldEJhc2UpCisgICAg
ICAgICpiYXNlID0gbG9jYWxCYXNlOworCisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBSZXNvbHZl
T3BlcmF0aW9uKiByZXNvbHZlVmFsdWVPcGVyYXRpb24gPSBwYzsKKyAgICBzd2l0Y2ggKHJlc29s
dmVWYWx1ZU9wZXJhdGlvbi0+bV9vcGVyYXRpb24pIHsKKyAgICBjYXNlIFJlc29sdmVHZXRBbmRS
ZXR1cm5HbG9iYWxQcm9wZXJ0eTogeworICAgICAgICBSZXNvbHZlR2xvYmFsU3RhdHVzIHN0YXR1
cyA9IFJlc29sdmVHbG9iYWxTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLCBtX2N1cnJlbnRJbmRleCwgcmVzb2x2ZVZhbHVlT3BlcmF0aW9uLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyKSk7CisgICAgICAgIGlmIChzdGF0dXMuaXNT
aW1wbGUoKSkgeworICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmUoKSk7CisKKyAg
ICAgICAgICAgIE5vZGVJbmRleCBnbG9iYWxPYmplY3ROb2RlID0gYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzLnN0cnVjdHVyZSgpKTsKKworICAgICAgICAg
ICAgaWYgKHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c3RhdHVzLnNwZWNpZmljVmFsdWUoKS5pc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgKnZhbHVl
ID0gY2VsbENvbnN0YW50KHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkuYXNDZWxsKCkpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgKnZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQo
cHJlZGljdGlvbiwgZ2xvYmFsT2JqZWN0Tm9kZSwgaWRlbnRpZmllciwgc3RhdHVzLm9mZnNldCgp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTm9kZUlu
ZGV4IHJlc29sdmUgPSBhZGRUb0dyYXBoKFJlc29sdmVHbG9iYWwsIE9wSW5mbyhtX2dyYXBoLm1f
cmVzb2x2ZUdsb2JhbERhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAg
bV9ncmFwaC5tX3Jlc29sdmVHbG9iYWxEYXRhLmFwcGVuZChSZXNvbHZlR2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgUmVzb2x2ZUdsb2JhbERhdGEmIGRhdGEgPSBtX2dyYXBoLm1fcmVzb2x2ZUdsb2Jh
bERhdGEubGFzdCgpOworICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVy
OworICAgICAgICBkYXRhLnJlc29sdmVPcGVyYXRpb25zSW5kZXggPSBvcGVyYXRpb25zOworICAg
ICAgICBkYXRhLnB1dFRvQmFzZU9wZXJhdGlvbkluZGV4ID0gcHV0VG9CYXNlT3BlcmF0aW9uOwor
ICAgICAgICBkYXRhLnJlc29sdmVQcm9wZXJ0eUluZGV4ID0gcmVzb2x2ZVZhbHVlT3BlcmF0aW9u
IC0gcmVzb2x2ZU9wZXJhdGlvbnMtPmRhdGEoKTsKKyAgICAgICAgKnZhbHVlID0gcmVzb2x2ZTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgUmVzb2x2ZUdldEFuZFJldHVy
bkdsb2JhbFZhcjogeworICAgICAgICAqdmFsdWUgPSBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZ2xvYmFsT2JqZWN0LT5hc3NlcnRS
ZWdpc3RlcklzSW5UaGlzT2JqZWN0KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcykpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBjYXNlIFJlc29sdmVHZXRBbmRSZXR1cm5HbG9iYWxWYXJXYXRjaGFi
bGU6IHsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24o
KTsKKworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworCisgICAgICAgIElkZW50aWZpZXIg
aWRlbnQgPSBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyKTsKKyAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlk
ZW50LmltcGwoKSk7CisgICAgICAgIGlmICghZW50cnkuY291bGRCZVdhdGNoZWQoKSkgeworICAg
ICAgICAgICAgKnZhbHVlID0gYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhnbG9iYWxP
YmplY3QtPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QocGMtPm1fcmVnaXN0ZXJBZGRyZXNz
KSksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFRoZSB3YXRjaHBvaW50IGlzIHN0aWxsIGludGFjdCEgVGhpcyBt
ZWFucyB0aGF0IHdlIHdpbGwgZ2V0IG5vdGlmaWVkIGlmIHRoZQorICAgICAgICAvLyBjdXJyZW50
IHZhbHVlIGluIHRoZSBnbG9iYWwgdmFyaWFibGUgY2hhbmdlcy4gU28sIHdlIGNhbiBpbmxpbmUg
dGhhdCB2YWx1ZS4KKyAgICAgICAgLy8gTW9yZW92ZXIsIGN1cnJlbnRseSB3ZSBjYW4gYXNzdW1l
IHRoYXQgdGhpcyB2YWx1ZSBpcyBhIEpTRnVuY3Rpb24qLCB3aGljaAorICAgICAgICAvLyBpbXBs
aWVzIHRoYXQgaXQncyBhIGNlbGwuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MsIHNpbmNlIGluIGdl
bmVyYWwgd2UnZCBoYXZlCisgICAgICAgIC8vIHRvIHVzZSBhIEpTQ29uc3RhbnQgZm9yIG5vbi1j
ZWxscyBhbmQgYSBXZWFrSlNDb25zdGFudCBmb3IgY2VsbHMuIFNvIGluc3RlYWQKKyAgICAgICAg
Ly8gb2YgaGF2aW5nIGJvdGggY2FzZXMgd2UganVzdCBhc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMg
YSBjZWxsLgorCisgICAgICAgIC8vIE5CLiBJZiBpdCB3YXNuJ3QgZm9yIENTRSwgR2xvYmFsVmFy
V2F0Y2hwb2ludCB3b3VsZCBoYXZlIG5vIG5lZWQgZm9yIHRoZQorICAgICAgICAvLyByZWdpc3Rl
ciBwb2ludGVyLiBCdXQgQ1NFIHRyYWNrcyBlZmZlY3RzIG9uIGdsb2JhbCB2YXJpYWJsZXMgYnkg
Y29tcGFyaW5nCisgICAgICAgIC8vIHJlZ2lzdGVyIHBvaW50ZXJzLiBCZWNhdXNlIENTRSBleGVj
dXRlcyBtdWx0aXBsZSB0aW1lcyB3aGlsZSB0aGUgYmFja2VuZAorICAgICAgICAvLyBleGVjdXRl
cyBvbmNlLCB3ZSB1c2UgdGhlIGZvbGxvd2luZyBwZXJmb3JtYW5jZSB0cmFkZS1vZmY6CisgICAg
ICAgIC8vIC0gVGhlIG5vZGUgcmVmZXJzIGRpcmVjdGx5IHRvIHRoZSByZWdpc3RlciBwb2ludGVy
IHRvIG1ha2UgQ1NFIHN1cGVyIGNoZWFwLgorICAgICAgICAvLyAtIFRvIHBlcmZvcm0gYmFja2Vu
ZCBjb2RlIGdlbmVyYXRpb24sIHRoZSBub2RlIG9ubHkgY29udGFpbnMgdGhlIGlkZW50aWZpZXIK
KyAgICAgICAgLy8gICBudW1iZXIsIGZyb20gd2hpY2ggaXQgaXMgcG9zc2libGUgdG8gZ2V0ICh2
aWEgYSBmZXcgYXZlcmFnZS10aW1lIE8oMSkKKyAgICAgICAgLy8gICBsb29rdXBzKSB0byB0aGUg
V2F0Y2hwb2ludFNldC4KKworICAgICAgICBhZGRUb0dyYXBoKEdsb2JhbFZhcldhdGNocG9pbnQs
IE9wSW5mbyhnbG9iYWxPYmplY3QtPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QocGMtPm1f
cmVnaXN0ZXJBZGRyZXNzKSksIE9wSW5mbyhpZGVudGlmaWVyKSk7CisKKyAgICAgICAgSlNWYWx1
ZSBzcGVjaWZpY1ZhbHVlID0gZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLmdldCgpOworICAgICAgICBBU1NFUlQoc3BlY2lmaWNWYWx1ZS5pc0NlbGwoKSk7CisgICAg
ICAgICp2YWx1ZSA9IGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgUmVzb2x2ZUdldEFuZFJldHVyblNjb3Bl
ZFZhcjogeworICAgICAgICBOb2RlSW5kZXggZ2V0U2NvcGVSZWdpc3RlcnMgPSBhZGRUb0dyYXBo
KEdldFNjb3BlUmVnaXN0ZXJzLCBsb2NhbEJhc2UpOworICAgICAgICAqdmFsdWUgPSBhZGRUb0dy
YXBoKEdldFNjb3BlZFZhciwgT3BJbmZvKHJlc29sdmVWYWx1ZU9wZXJhdGlvbi0+bV9vZmZzZXQp
LCBPcEluZm8ocHJlZGljdGlvbiksIGdldFNjb3BlUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKK30KKwogYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKIHsKICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IHRy
dWU7Ci0gICAgCisKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEt
PmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIHVu
c2lnbmVkIGJsb2NrQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKQEAgLTIzNTgsMjYgKzI1MjYsNiBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsg
T1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfc2NvcGVkX3ZhcjogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IGRlcHRoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBnZXRTY29wZSA9IGFkZFRvR3JhcGgoR2V0U2NvcGUsIE9wSW5mbyhkZXB0aCkpOwot
ICAgICAgICAgICAgTm9kZUluZGV4IGdldFNjb3BlUmVnaXN0ZXJzID0gYWRkVG9HcmFwaChHZXRT
Y29wZVJlZ2lzdGVycywgZ2V0U2NvcGUpOwotICAgICAgICAgICAgTm9kZUluZGV4IGdldFNjb3Bl
ZFZhciA9IGFkZFRvR3JhcGgoR2V0U2NvcGVkVmFyLCBPcEluZm8oc2xvdCksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgZ2V0U2NvcGVSZWdpc3RlcnMpOwotICAgICAgICAgICAgc2V0KGRzdCwgZ2V0U2Nv
cGVkVmFyKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9zY29wZWRfdmFyKTsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zY29wZWRfdmFyOiB7Ci0gICAgICAgICAgICBp
bnQgc2xvdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgZGVwdGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHNvdXJjZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggZ2V0U2NvcGUgPSBhZGRUb0dyYXBoKEdldFNjb3BlLCBPcEluZm8oZGVwdGgp
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRTY29wZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgo
R2V0U2NvcGVSZWdpc3RlcnMsIGdldFNjb3BlKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0
U2NvcGVkVmFyLCBPcEluZm8oc2xvdCksIGdldFNjb3BlLCBnZXRTY29wZVJlZ2lzdGVycywgZ2V0
KHNvdXJjZSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X3Njb3BlZF92YXIpOwot
ICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgogICAgICAgICBjYXNlIG9wX2dl
dF9ieV9pZF9vdXRfb2ZfbGluZToKICAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7
CkBAIC0yNTA0LDc1ICsyNjUyLDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwog
ICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogewotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLQotICAgICAgICAgICAgTm9k
ZUluZGV4IGdldEdsb2JhbFZhciA9IGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgR2V0R2xv
YmFsVmFyLAotICAgICAgICAgICAgICAgIE9wSW5mbyhnbG9iYWxPYmplY3QtPmFzc2VydFJlZ2lz
dGVySXNJblRoaXNPYmplY3QoY3VycmVudEluc3RydWN0aW9uWzJdLnUucmVnaXN0ZXJQb2ludGVy
KSksCi0gICAgICAgICAgICAgICAgT3BJbmZvKHByZWRpY3Rpb24pKTsKLSAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRHbG9iYWxWYXIpOwotICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2dsb2JhbF92YXIpOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX2dldF9nbG9iYWxfdmFyX3dhdGNoYWJsZTog
ewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24o
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5l
U3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmRdOwotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoaWRlbnRpZmllck51bWJlcik7Ci0gICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnRpZmllci5pbXBs
KCkpOwotICAgICAgICAgICAgaWYgKCFlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgTm9kZUluZGV4IGdldEdsb2JhbFZhciA9IGFkZFRvR3JhcGgoCi0gICAgICAgICAg
ICAgICAgICAgIEdldEdsb2JhbFZhciwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGdsb2Jh
bE9iamVjdC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5yZWdpc3RlclBvaW50ZXIpKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHByZWRp
Y3Rpb24pKTsKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgZ2V0R2xvYmFsVmFyKTsKLSAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRf
Z2xvYmFsX3Zhcl93YXRjaGFibGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBUaGUgd2F0Y2hwb2ludCBpcyBzdGlsbCBpbnRhY3QhIFRoaXMgbWVhbnMgdGhh
dCB3ZSB3aWxsIGdldCBub3RpZmllZCBpZiB0aGUKLSAgICAgICAgICAgIC8vIGN1cnJlbnQgdmFs
dWUgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZSBjaGFuZ2VzLiBTbywgd2UgY2FuIGlubGluZSB0aGF0
IHZhbHVlLgotICAgICAgICAgICAgLy8gTW9yZW92ZXIsIGN1cnJlbnRseSB3ZSBjYW4gYXNzdW1l
IHRoYXQgdGhpcyB2YWx1ZSBpcyBhIEpTRnVuY3Rpb24qLCB3aGljaAotICAgICAgICAgICAgLy8g
aW1wbGllcyB0aGF0IGl0J3MgYSBjZWxsLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzLCBzaW5jZSBp
biBnZW5lcmFsIHdlJ2QgaGF2ZQotICAgICAgICAgICAgLy8gdG8gdXNlIGEgSlNDb25zdGFudCBm
b3Igbm9uLWNlbGxzIGFuZCBhIFdlYWtKU0NvbnN0YW50IGZvciBjZWxscy4gU28gaW5zdGVhZAot
ICAgICAgICAgICAgLy8gb2YgaGF2aW5nIGJvdGggY2FzZXMgd2UganVzdCBhc3NlcnQgdGhhdCB0
aGUgdmFsdWUgaXMgYSBjZWxsLgotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBOQi4gSWYg
aXQgd2Fzbid0IGZvciBDU0UsIEdsb2JhbFZhcldhdGNocG9pbnQgd291bGQgaGF2ZSBubyBuZWVk
IGZvciB0aGUKLSAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHBvaW50ZXIuIEJ1dCBDU0UgdHJhY2tz
IGVmZmVjdHMgb24gZ2xvYmFsIHZhcmlhYmxlcyBieSBjb21wYXJpbmcKLSAgICAgICAgICAgIC8v
IHJlZ2lzdGVyIHBvaW50ZXJzLiBCZWNhdXNlIENTRSBleGVjdXRlcyBtdWx0aXBsZSB0aW1lcyB3
aGlsZSB0aGUgYmFja2VuZAotICAgICAgICAgICAgLy8gZXhlY3V0ZXMgb25jZSwgd2UgdXNlIHRo
ZSBmb2xsb3dpbmcgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmOgotICAgICAgICAgICAgLy8gLSBUaGUg
bm9kZSByZWZlcnMgZGlyZWN0bHkgdG8gdGhlIHJlZ2lzdGVyIHBvaW50ZXIgdG8gbWFrZSBDU0Ug
c3VwZXIgY2hlYXAuCi0gICAgICAgICAgICAvLyAtIFRvIHBlcmZvcm0gYmFja2VuZCBjb2RlIGdl
bmVyYXRpb24sIHRoZSBub2RlIG9ubHkgY29udGFpbnMgdGhlIGlkZW50aWZpZXIKLSAgICAgICAg
ICAgIC8vICAgbnVtYmVyLCBmcm9tIHdoaWNoIGl0IGlzIHBvc3NpYmxlIHRvIGdldCAodmlhIGEg
ZmV3IGF2ZXJhZ2UtdGltZSBPKDEpCi0gICAgICAgICAgICAvLyAgIGxvb2t1cHMpIHRvIHRoZSBX
YXRjaHBvaW50U2V0LgotICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRUb0dyYXBoKAotICAg
ICAgICAgICAgICAgIEdsb2JhbFZhcldhdGNocG9pbnQsCi0gICAgICAgICAgICAgICAgT3BJbmZv
KGdsb2JhbE9iamVjdC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5yZWdpc3RlclBvaW50ZXIpKSwKLSAgICAgICAgICAgICAgICBPcEluZm8oaWRl
bnRpZmllck51bWJlcikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIHNwZWNp
ZmljVmFsdWUgPSBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoc3BlY2lmaWNWYWx1ZS5pc0NlbGwoKSk7Ci0gICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2VsbENvbnN0YW50KHNw
ZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZ2V0X2dsb2JhbF92YXJfd2F0Y2hhYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGNhc2Ugb3BfcHV0X2dsb2JhbF92YXI6CiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29u
c3Q6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAg
ICAgUHV0R2xvYmFsVmFyLAogICAgICAgICAgICAgICAgIE9wSW5mbyhtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmpl
Y3QoY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCiAgICAgICAgICAg
ICAgICAgdmFsdWUpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2dsb2JhbF92YXIp
OworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9nbG9iYWxfY29uc3QpOwogICAgICAg
ICB9CiAKLSAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjazoKICAgICAgICAgY2Fz
ZSBvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazogewogICAgICAgICAgICAgTm9kZUluZGV4IHZh
bHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKQEAg
LTI1ODUsMTYgKzI2NzMsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICAgICAgUHV0R2xvYmFsVmFyLAogICAgICAgICAg
ICAgICAgICAgICBPcEluZm8oZ2xvYmFsT2JqZWN0LT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2Jq
ZWN0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lzdGVyUG9pbnRlcikpLAogICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2ds
b2JhbF92YXJfY2hlY2spOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRfZ2xv
YmFsX2NvbnN0X2NoZWNrKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFkZFRvR3JhcGgo
CiAgICAgICAgICAgICAgICAgUHV0R2xvYmFsVmFyQ2hlY2ssCiAgICAgICAgICAgICAgICAgT3BJ
bmZvKGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmpl
Y3QoY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCiAgICAgICAgICAg
ICAgICAgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLAogICAgICAgICAgICAgICAgIHZhbHVlKTsK
LSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKTsKKyAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKTsKICAgICAgICAg
fQogCisKICAgICAgICAgLy8gPT09IEJsb2NrIHRlcm1pbmF0b3JzLiA9PT0KIAogICAgICAgICBj
YXNlIG9wX2ptcDogewpAQCAtMjg2Myw2OSArMjk1MiwxNjQgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVt
cCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmVxX3B0cikpKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZXFfcHRyKTsKIAotICAgICAgICBjYXNlIG9w
X3Jlc29sdmU6IHsKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlOgorICAgICAgICBjYXNlIG9wX3Jl
c29sdmVfZ2xvYmFsX3Byb3BlcnR5OgorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsX3Zh
cjoKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlZF92YXI6CisgICAgICAgIGNhc2Ugb3Bf
cmVzb2x2ZV9zY29wZWRfdmFyX29uX3RvcF9zY29wZToKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZl
X3Njb3BlZF92YXJfd2l0aF90b3Bfc2NvcGVfY2hlY2s6IHsKICAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZp
ZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kXTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIG9wZXJhdGlvbnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Jlc29sdmVPcGVyYXRpb25S
ZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKKyAgICAgICAgICAgIE5vZGVJ
bmRleCB2YWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAocGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhw
cmVkaWN0aW9uLCBpZGVudGlmaWVyLCBvcGVyYXRpb25zLCAwLCAwLCAmdmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgTm9kZUluZGV4IHJlc29sdmUgPSBhZGRUb0dyYXBoKFJlc29sdmUsIE9w
SW5mbyhtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVk
aWN0aW9uKSk7CisgICAgICAgICAgICBtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLmFw
cGVuZChSZXNvbHZlT3BlcmF0aW9uRGF0YSgpKTsKKyAgICAgICAgICAgIFJlc29sdmVPcGVyYXRp
b25EYXRhJiBkYXRhID0gbV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5sYXN0KCk7Cisg
ICAgICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyOworICAgICAgICAg
ICAgZGF0YS5yZXNvbHZlT3BlcmF0aW9uc0luZGV4ID0gb3BlcmF0aW9uczsKIAotICAgICAgICAg
ICAgTm9kZUluZGV4IHJlc29sdmUgPSBhZGRUb0dyYXBoKFJlc29sdmUsIE9wSW5mbyhpZGVudGlm
aWVyKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCByZXNvbHZlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfcmVzb2x2ZSk7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIG9wX3B1dF90b19iYXNlX3Zh
cmlhYmxlOgorICAgICAgICBjYXNlIG9wX3B1dF90b19iYXNlOiB7CisgICAgICAgICAgICB1bnNp
Z25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1h
cFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kXTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVu
c2lnbmVkIG9wZXJhdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHV0VG9CYXNlT3BlcmF0aW9u
UmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZF07CisgICAgICAgICAgICBQdXRU
b0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZSA9IG1fY29kZUJsb2NrLT5wdXRUb0Jhc2VPcGVyYXRp
b24ob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIHN3aXRjaCAocHV0VG9CYXNlLT5tX2tpbmQpIHsK
KyAgICAgICAgICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpVbmluaXRpYWxpc2VkOgorICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFZhcmlh
YmxlUHV0Q2hlY2tlZDogeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CisgICAgICAgICAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAg
ICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFi
bGUoKS0+Z2V0KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXIpLmltcGwoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXJDaGVjaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8oY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXNzZXJ0UmVn
aXN0ZXJJc0luVGhpc09iamVjdChwdXRUb0Jhc2UtPm1fcmVnaXN0ZXJBZGRyZXNzKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGlkZW50aWZpZXIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdldCh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsVmFyaWFibGVQdXQ6CisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hc3NlcnRS
ZWdpc3RlcklzSW5UaGlzT2JqZWN0KHB1dFRvQmFzZS0+bV9yZWdpc3RlckFkZHJlc3MpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldCh2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7
CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldFNjb3BlID0gYWRkVG9HcmFwaChHZXRTY29w
ZSwgT3BJbmZvKHB1dFRvQmFzZS0+bV9zY29wZURlcHRoKSk7CisgICAgICAgICAgICAgICAgTm9k
ZUluZGV4IGdldFNjb3BlUmVnaXN0ZXJzID0gYWRkVG9HcmFwaChHZXRTY29wZVJlZ2lzdGVycywg
Z2V0U2NvcGUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0U2NvcGVkVmFyLCBPcElu
Zm8ocHV0VG9CYXNlLT5tX29mZnNldCksIGdldFNjb3BlLCBnZXRTY29wZVJlZ2lzdGVycywgZ2V0
KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsUHJvcGVydHlQdXQ6IHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXB1dFRvQmFzZS0+bV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOworICAgICAgICAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9wdXRfdG9fYmFzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBiYXNlTm9kZSA9IGdldChiYXNlKTsKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHV0
VG9CYXNlLT5tX3N0cnVjdHVyZS5nZXQoKSkpLCBiYXNlTm9kZSk7CisgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQocHV0VG9CYXNlLT5tX29mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IGJhc2VOb2RlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2VOb2Rl
KTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIHByb3BlcnR5U3RvcmFnZSwgYmFzZU5vZGUs
IGdldCh2YWx1ZSkpOworCisgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFn
ZUFjY2Vzc0RhdGE7CisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0g
aW5kZXhSZWxhdGl2ZVRvQmFzZShwdXRUb0Jhc2UtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nl
c3NEYXRhKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpSZWFkb25seToKKyAgICAgICAgICAgIGNhc2Ug
UHV0VG9CYXNlT3BlcmF0aW9uOjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
UHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBnZXQoYmFzZSksIGdldCh2YWx1ZSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X3RvX2Jhc2UpOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fZ2xvYmFsOgorICAgICAg
ICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90b19nbG9iYWxfZHluYW1pYzoKKyAgICAgICAgY2FzZSBv
cF9yZXNvbHZlX2Jhc2VfdG9fc2NvcGU6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3Rv
X3Njb3BlX3dpdGhfdG9wX3Njb3BlX2NoZWNrOgogICAgICAgICBjYXNlIG9wX3Jlc29sdmVfYmFz
ZTogewogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rp
b24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllciA9IG1f
aW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmRdOworICAgICAgICAgICAgdW5zaWduZWQgb3BlcmF0aW9ucyA9IG1faW5saW5lU3Rh
Y2tUb3AtPm1fcmVzb2x2ZU9wZXJhdGlvblJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9w
ZXJhbmRdOworICAgICAgICAgICAgdW5zaWduZWQgcHV0VG9CYXNlT3BlcmF0aW9uID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9wdXRUb0Jhc2VPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25b
NV0udS5vcGVyYW5kXTsKKworICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSAwOworICAgICAg
ICAgICAgaWYgKHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwg
b3BlcmF0aW9ucywgMCwgJmJhc2UsIDApKSB7CisgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGJhc2UpOworICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3Jlc29sdmVfYmFzZSk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE5vZGVJ
bmRleCByZXNvbHZlID0gYWRkVG9HcmFwaChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
ID8gUmVzb2x2ZUJhc2VTdHJpY3RQdXQgOiBSZXNvbHZlQmFzZSwgT3BJbmZvKGlkZW50aWZpZXIp
LCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgTm9kZUluZGV4IHJlc29sdmUgPSBh
ZGRUb0dyYXBoKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQgPyBSZXNvbHZlQmFzZVN0
cmljdFB1dCA6IFJlc29sdmVCYXNlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25z
RGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgbV9ncmFwaC5t
X3Jlc29sdmVPcGVyYXRpb25zRGF0YS5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbkRhdGEoKSk7Cisg
ICAgICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZl
T3BlcmF0aW9uc0RhdGEubGFzdCgpOworICAgICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllcjsKKyAgICAgICAgICAgIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnNJbmRleCA9
IG9wZXJhdGlvbnM7CisgICAgICAgICAgICBkYXRhLnB1dFRvQmFzZU9wZXJhdGlvbkluZGV4ID0g
cHV0VG9CYXNlT3BlcmF0aW9uOworICAgICAgICAKICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXNvbHZlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2Ugb3BfcmVzb2x2ZV9nbG9iYWw6IHsKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhfYmFz
ZTogewogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rp
b24oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwWwotICAgICAgICAgICAgICAg
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBSZXNvbHZlR2xvYmFsU3RhdHVzIHN0YXR1cyA9IFJlc29sdmVHbG9iYWxTdGF0dXM6OmNv
bXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCBtX2N1cnJlbnRJbmRleCwKLSAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihpZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxl
KCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLnN0cnVjdHVyZSgpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2xvYmFsT2JqZWN0ID0gYWRk
U3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0YXR1cy5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5zcGVjaWZpY1Zh
bHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zcGVjaWZpY1ZhbHVl
KCkuaXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjZWxsQ29uc3RhbnQoc3RhdHVzLnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKSkpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5T2Zm
c2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgcHJlZGljdGlvbiwgZ2xvYmFsT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
aWRlbnRpZmllck51bWJlciwgc3RhdHVzLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9nbG9iYWxSZXNvbHZlTnVtYmVyKys7
IC8vIFNraXAgb3ZlciB0aGUgdW51c2VkIGdsb2JhbCByZXNvbHZlIGluZm8uCi0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcmVzb2x2ZV9nbG9iYWwpOwor
ICAgICAgICAgICAgdW5zaWduZWQgYmFzZURzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZURzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZF07CisgICAgICAgICAgICB1bnNpZ25lZCBvcGVyYXRpb25zID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9yZXNvbHZlT3BlcmF0aW9uUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZF07CisgICAgICAgICAgICB1bnNpZ25lZCBwdXRUb0Jhc2VPcGVyYXRpb24gPSBtX2lubGluZVN0
YWNrVG9wLT5tX3B1dFRvQmFzZU9wZXJhdGlvblJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvbls1XS51
Lm9wZXJhbmRdOworCisgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IDA7CisgICAgICAgICAg
ICBOb2RlSW5kZXggdmFsdWUgPSAwOworICAgICAgICAgICAgaWYgKHBhcnNlUmVzb2x2ZU9wZXJh
dGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0
aW9uLCAmYmFzZSwgJnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHNldChiYXNlRHN0LCBiYXNl
KTsKKyAgICAgICAgICAgICAgICBzZXQodmFsdWVEc3QsIHZhbHVlKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOworICAgICAg
ICAgICAgICAgIHNldChiYXNlRHN0LCBhZGRUb0dyYXBoKEdhcmJhZ2VWYWx1ZSkpOworICAgICAg
ICAgICAgICAgIHNldCh2YWx1ZURzdCwgYWRkVG9HcmFwaChHYXJiYWdlVmFsdWUpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IHJlc29sdmUgPSBh
ZGRUb0dyYXBoKFJlc29sdmVHbG9iYWwsIE9wSW5mbyhtX2dyYXBoLm1fcmVzb2x2ZUdsb2JhbERh
dGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9y
ZXNvbHZlR2xvYmFsRGF0YS5hcHBlbmQoUmVzb2x2ZUdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAg
ICBSZXNvbHZlR2xvYmFsRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZlR2xvYmFsRGF0YS5s
YXN0KCk7Ci0gICAgICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVt
YmVyOwotICAgICAgICAgICAgZGF0YS5yZXNvbHZlSW5mb0luZGV4ID0gbV9nbG9iYWxSZXNvbHZl
TnVtYmVyKys7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVzb2x2ZSk7CiAKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29sdmVfZ2xvYmFs
KTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29sdmVfd2l0aF9iYXNlKTsKICAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF90aGlzOiB7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworICAgICAgICAgICAg
dW5zaWduZWQgYmFzZURzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICB1bnNpZ25lZCB2YWx1ZURzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gbV9pbmxpbmVTdGFja1RvcC0+
bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07CisgICAg
ICAgICAgICB1bnNpZ25lZCBvcGVyYXRpb25zID0gbV9pbmxpbmVTdGFja1RvcC0+bV9yZXNvbHZl
T3BlcmF0aW9uUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZF07CisKKyAgICAg
ICAgICAgIE5vZGVJbmRleCBiYXNlID0gMDsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9
IDA7CisgICAgICAgICAgICBpZiAocGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhwcmVkaWN0aW9uLCBp
ZGVudGlmaWVyLCBvcGVyYXRpb25zLCAwLCAmYmFzZSwgJnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgIHNldChiYXNlRHN0LCBiYXNlKTsKKyAgICAgICAgICAgICAgICBzZXQodmFsdWVEc3QsIHZh
bHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChG
b3JjZU9TUkV4aXQpOworICAgICAgICAgICAgICAgIHNldChiYXNlRHN0LCBhZGRUb0dyYXBoKEdh
cmJhZ2VWYWx1ZSkpOworICAgICAgICAgICAgICAgIHNldCh2YWx1ZURzdCwgYWRkVG9HcmFwaChH
YXJiYWdlVmFsdWUpKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfcmVzb2x2ZV93aXRoX3RoaXMpOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbG9vcF9o
aW50OiB7CiAgICAgICAgICAgICAvLyBCYXNlbGluZS0+REZHIE9TUiBqdW1wcyBiZXR3ZWVuIGxv
b3AgaGludHMuIFRoZSBERkcgYXNzdW1lcyB0aGF0IEJhc2VsaW5lLT5ERkcKICAgICAgICAgICAg
IC8vIE9TUiBjYW4gb25seSBoYXBwZW4gYXQgYmFzaWMgYmxvY2sgYm91bmRhcmllcy4gQXNzZXJ0
IHRoYXQgdGhlc2UgdHdvIHN0YXRlbWVudHMKQEAgLTI5MzcsNyArMzEyMSw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBi
bG9jay4gSGVuY2UsIG1hY2hpbmUgY29kZSBibG9jayA9IHRydWUgY29kZSBibG9jayA9IG5vdCBp
bmxpbmUgY29kZSBibG9jay4KICAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsZXIpCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1
ZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBFbWl0IGEgcGhhbnRvbSBub2RlIHRv
IGVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgdGhpcyBieXRlY29k
ZQogICAgICAgICAgICAgLy8gb3AuCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwpA
QCAtMzMyNSw2ICszNTA5LDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZVN0YWNrRW50cnkoCiAgICAgICAgIG1faWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2RlQmxv
Y2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRSZW1hcC5yZXNp
emUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2Nv
bnN0YW50QnVmZmVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZl
cnMoKSk7CisgICAgICAgIG1fcmVzb2x2ZU9wZXJhdGlvblJlbWFwLnJlc2l6ZShjb2RlQmxvY2st
Pm51bWJlck9mUmVzb2x2ZU9wZXJhdGlvbnMoKSk7CisgICAgICAgIG1fcHV0VG9CYXNlT3BlcmF0
aW9uUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZQdXRUb0Jhc2VPcGVyYXRpb25zKCkp
OwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZklk
ZW50aWZpZXJzKCk7ICsraSkgewogICAgICAgICAgICAgU3RyaW5nSW1wbCogcmVwID0gY29kZUJs
b2NrLT5pZGVudGlmaWVyKGkpLmltcGwoKTsKQEAgLTMzNTEsOCArMzUzNywxMSBAQCBCeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9j
ay0+bnVtYmVyT2ZHbG9iYWxSZXNvbHZlSW5mb3MoKTsgKytpKQotICAgICAgICAgICAgYnl0ZUNv
ZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRHbG9iYWxSZXNvbHZlSW5mbyhzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvZGVCbG9jay0+bnVtYmVyT2ZSZXNvbHZlT3BlcmF0aW9ucygpOyBpKyspIHsKKyAgICAgICAg
ICAgIHVpbnQzMl90IG5ld1Jlc29sdmUgPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFk
ZFJlc29sdmUoKTsKKyAgICAgICAgICAgIG1fcmVzb2x2ZU9wZXJhdGlvblJlbWFwW2ldID0gbmV3
UmVzb2x2ZTsKKyAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+cmVzb2x2
ZU9wZXJhdGlvbnMobmV3UmVzb2x2ZSktPmFwcGVuZCgqY29kZUJsb2NrLT5yZXNvbHZlT3BlcmF0
aW9ucyhpKSk7CisgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
ZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKTsgKytpKSB7CiAgICAgICAgICAgICAv
LyBJZiB3ZSBpbmxpbmUgdGhlIHNhbWUgY29kZSBibG9jayBtdWx0aXBsZSB0aW1lcywgd2UgZG9u
J3Qgd2FudCB0byBuZWVkbGVzc2x5CiAgICAgICAgICAgICAvLyBkdXBsaWNhdGUgaXRzIGNvbnN0
YW50IGJ1ZmZlcnMuCkBAIC0zMzY3LDYgKzM1NTYsMTEgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGlu
ZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgICAgICBtX2NvbnN0YW50QnVm
ZmVyUmVtYXBbaV0gPSBuZXdJbmRleDsKICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2Nv
bnN0YW50QnVmZmVyQ2FjaGUuYWRkKENvbnN0YW50QnVmZmVyS2V5KGNvZGVCbG9jaywgaSksIG5l
d0luZGV4KTsKICAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVC
bG9jay0+bnVtYmVyT2ZQdXRUb0Jhc2VPcGVyYXRpb25zKCk7IGkrKykgeworICAgICAgICAgICAg
dWludDMyX3QgcHV0VG9CYXNlUmVzb2x2ZSA9IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+
YWRkUHV0VG9CYXNlKCk7CisgICAgICAgICAgICBtX3B1dFRvQmFzZU9wZXJhdGlvblJlbWFwW2ld
ID0gcHV0VG9CYXNlUmVzb2x2ZTsKKyAgICAgICAgICAgICpieXRlQ29kZVBhcnNlci0+bV9jb2Rl
QmxvY2stPnB1dFRvQmFzZU9wZXJhdGlvbihwdXRUb0Jhc2VSZXNvbHZlKSA9ICpjb2RlQmxvY2st
PnB1dFRvQmFzZU9wZXJhdGlvbihpKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9j
YWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IHRydWU7CiAgICAgfSBlbHNlIHsKQEAgLTMz
ODMsNiArMzU3Nyw4IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVT
dGFja0VudHJ5KAogICAgICAgICBtX2lkZW50aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5u
dW1iZXJPZklkZW50aWZpZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXplKGNv
ZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9jb25zdGFu
dEJ1ZmZlclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkp
OworICAgICAgICBtX3Jlc29sdmVPcGVyYXRpb25SZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1i
ZXJPZlJlc29sdmVPcGVyYXRpb25zKCkpOworICAgICAgICBtX3B1dFRvQmFzZU9wZXJhdGlvblJl
bWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mUHV0VG9CYXNlT3BlcmF0aW9ucygpKTsKIAog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlm
aWVycygpOyArK2kpCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IGk7CkBAIC0z
MzkwLDYgKzM1ODYsMTAgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGlu
ZVN0YWNrRW50cnkoCiAgICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBpICsgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29k
ZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpOyArK2kpCiAgICAgICAgICAgICBtX2Nv
bnN0YW50QnVmZmVyUmVtYXBbaV0gPSBpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvZGVCbG9jay0+bnVtYmVyT2ZSZXNvbHZlT3BlcmF0aW9ucygpOyArK2kpCisgICAgICAgICAg
ICBtX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtpXSA9IGk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZlB1dFRvQmFzZU9wZXJhdGlvbnMoKTsgKytpKQor
ICAgICAgICAgICAgbV9wdXRUb0Jhc2VPcGVyYXRpb25SZW1hcFtpXSA9IGk7CiAKICAgICAgICAg
bV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IGZhbHNlOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCmluZGV4IGUxNzYwNjk5YTcyOTc3
Y2Q0MWM4YzI2MTQ3NzFjNDVkNDdiYWIxZDcuLjJiM2I2Y2MzNjc2MGRmNzBkZmIwZjA2YjRmYjFl
YTRmZDY3NGIwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuaApAQCAtNjgsNyArNjgsNjMgQEAgaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZv
ckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIH0KIAogLy8gT3Bjb2RlIGNoZWNraW5n
LgotaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29k
ZUlELCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiopCitpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGVSZXNvbHZlT3BlcmF0aW9ucyhPcGNvZGVJRCBvcGNvZGUsIFJlc29sdmVPcGVyYXRp
b25zKiBvcGVyYXRpb25zLCBib29sIGZvcklubGluaW5nKQoreworICAgIC8vIElmIHRoZSByZXNv
bHZlIGlzIGVtcHR5LCB3ZSBoYXZlbid0IGhpdCBpdCB5ZXQKKyAgICAvLyBXZSdsbCBPU1JFeGl0
IGlmIGVuZCB1cCBoaXR0aW5nIGR1cmluZyBleGVjdXRpb24KKyAgICBpZiAob3BlcmF0aW9ucy0+
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgb3BlcmF0aW9ucy0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChv
cGVyYXRpb25zLT5kYXRhKClbaV0ubV9vcGVyYXRpb24pIHsKKyAgICAgICAgY2FzZSBSZXNvbHZl
UmV0dXJuR2xvYmFsT2JqZWN0QXNCYXNlOgorICAgICAgICBjYXNlIFJlc29sdmVTZXRCYXNlVG9H
bG9iYWw6CisgICAgICAgIGNhc2UgUmVzb2x2ZVNldEJhc2VUb1VuZGVmaW5lZDoKKyAgICAgICAg
Y2FzZSBSZXNvbHZlR2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHk6CisgICAgICAgIGNhc2UgUmVz
b2x2ZUdldEFuZFJldHVybkdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBSZXNvbHZlR2V0QW5kUmV0
dXJuR2xvYmFsVmFyV2F0Y2hhYmxlOgorICAgICAgICBjYXNlIFJlc29sdmVHZXRBbmRSZXR1cm5T
Y29wZWRWYXI6CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjYXNlIFJlc29sdmVG
YWlsOgorICAgICAgICAgICAgLy8gVGhlIERGRyBjYW4gaGFuZGxlIGdlbmVyaWMgY2FzZXMgb2Yg
ZmFpbGVkIHJlc29sdmVzCisgICAgICAgICAgICBpZiAob3Bjb2RlICE9IG9wX3Jlc29sdmUgJiYg
b3Bjb2RlICE9IG9wX3Jlc29sdmVfYmFzZQorICAgICAgICAgICAgICAgICYmIG9wY29kZSAhPSBv
cF9yZXNvbHZlX2Jhc2VfdG9fZ2xvYmFsICYmIG9wY29kZSAhPSBvcF9yZXNvbHZlX2Jhc2VfdG9f
c2NvcGUKKyAgICAgICAgICAgICAgICAmJiBvcGNvZGUgIT0gb3BfcmVzb2x2ZV9iYXNlX3RvX2ds
b2JhbF9keW5hbWljICYmIG9wY29kZSAhPSBvcF9yZXNvbHZlX2Jhc2VfdG9fc2NvcGVfd2l0aF90
b3Bfc2NvcGVfY2hlY2spCisgICAgICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjYXNlIFJlc29sdmVTa2lwVG9wU2NvcGVO
b2RlOgorICAgICAgICBjYXNlIFJlc29sdmVTa2lwU2NvcGVzOgorICAgICAgICBjYXNlIFJlc29s
dmVTZXRCYXNlVG9TY29wZToKKyAgICAgICAgY2FzZSBSZXNvbHZlUmV0dXJuU2NvcGVBc0Jhc2U6
CisgICAgICAgICAgICBpZiAoIWZvcklubGluaW5nKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgLy8gVGhlc2Ugb3Bjb2RlcyB3b3VsZCBiZSBlYXN5IHRvIHN1cHBvcnQg
d2l0aCBpbmxpbmluZywgYnV0IHdlIGN1cnJlbnRseSBkb24ndCBkbyBpdC4KKyAgICAgICAgICAg
IC8vIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBzY29wZSBjaGFpbiB3aWxsIG5vdCBiZSBzZXQgY29y
cmVjdGx5LgorICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CisKKyAgICAgICAgY2Fz
ZSBSZXNvbHZlQ2hlY2tGb3JEeW5hbWljRW50cmllc0JlZm9yZUdsb2JhbFNjb3BlOgorICAgICAg
ICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IENhbkNvbXBpbGU7Cit9CisKK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZVB1dFRv
QmFzZU9wZXJhdGlvbihQdXRUb0Jhc2VPcGVyYXRpb24qIG9wZXJhdGlvbikKK3sKKyAgICBzd2l0
Y2ggKG9wZXJhdGlvbi0+bV9raW5kKSB7CisgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246Okds
b2JhbFZhcmlhYmxlUHV0OgorICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpWYXJpYWJsZVB1
dDoKKyAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6UmVhZG9ubHk6CisgICAgY2FzZSBQdXRU
b0Jhc2VPcGVyYXRpb246OlVuaW5pdGlhbGlzZWQ6CisgICAgICAgIHJldHVybiBDYW5Db21waWxl
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIENhbkNvbXBpbGU7CisgICAgfQorfQor
CitpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2Rl
SUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNhc2Ugb3BfZW50ZXI6CkBAIC0xMTYsOCArMTcy
LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9w
Y29kZUlELCBDb2RlQmxvY2sqLCBJbnN0cnVjdGkKICAgICBjYXNlIG9wX2dldF9ieV92YWw6CiAg
ICAgY2FzZSBvcF9wdXRfYnlfdmFsOgogICAgIGNhc2Ugb3BfbWV0aG9kX2NoZWNrOgotICAgIGNh
c2Ugb3BfZ2V0X3Njb3BlZF92YXI6Ci0gICAgY2FzZSBvcF9wdXRfc2NvcGVkX3ZhcjoKICAgICBj
YXNlIG9wX2dldF9ieV9pZDoKICAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKICAg
ICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CkBAIC0xMjcsMTAgKzE4MSw2IEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJs
b2NrKiwgSW5zdHJ1Y3RpCiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rf
b3V0X29mX2xpbmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAg
ICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6Ci0gICAg
Y2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjoKLSAgICBjYXNlIG9wX2dldF9nbG9iYWxfdmFyX3dhdGNo
YWJsZToKLSAgICBjYXNlIG9wX3B1dF9nbG9iYWxfdmFyOgotICAgIGNhc2Ugb3BfcHV0X2dsb2Jh
bF92YXJfY2hlY2s6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNlIG9w
X2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOgogICAgIGNhc2Ugb3Bfam1wOgpAQCAtMTU3LDkgKzIw
Nyw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBv
cGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3RpCiAgICAgY2FzZSBvcF9yZXQ6CiAgICAgY2Fz
ZSBvcF9lbmQ6CiAgICAgY2FzZSBvcF9jYWxsX3B1dF9yZXN1bHQ6Ci0gICAgY2FzZSBvcF9yZXNv
bHZlOgotICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOgotICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9i
YWw6CiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgogICAgIGNhc2Ugb3BfbmV3X2FycmF5OgogICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKQEAgLTE4NSw2ICsyMzIsMjcgQEAgaW5saW5lIENh
cGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxv
Y2sqLCBJbnN0cnVjdGkKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKICAgICAgICAgcmV0dXJu
IFNob3VsZFByb2ZpbGU7CiAKKyAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsX3Byb3BlcnR5Ogor
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWxfdmFyOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZWRfdmFyOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZWRfdmFyX29uX3RvcF9zY29wZToKKyAg
ICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVkX3Zhcl93aXRoX3RvcF9zY29wZV9jaGVjazoKKyAgICBj
YXNlIG9wX3Jlc29sdmU6CisgICAgICAgIHJldHVybiBjYW5Db21waWxlUmVzb2x2ZU9wZXJhdGlv
bnMob3Bjb2RlSUQsIGNvZGVCbG9jay0+cmVzb2x2ZU9wZXJhdGlvbnMoaW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKSwgZmFsc2UpOworCisgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fZ2xvYmFs
OgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3RvX2dsb2JhbF9keW5hbWljOgorICAgIGNhc2Ug
b3BfcmVzb2x2ZV9iYXNlX3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3RvX3Nj
b3BlX3dpdGhfdG9wX3Njb3BlX2NoZWNrOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOgorICAg
IGNhc2Ugb3BfcmVzb2x2ZV93aXRoX2Jhc2U6CisgICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhfdGhp
czoKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBpbGVSZXNvbHZlT3BlcmF0aW9ucyhvcGNvZGVJRCwg
Y29kZUJsb2NrLT5yZXNvbHZlT3BlcmF0aW9ucyhpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpLCBm
YWxzZSk7CisKKyAgICBjYXNlIG9wX3B1dF90b19iYXNlX3ZhcmlhYmxlOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2Jhc2U6CisgICAgICAgIHJldHVybiBjYW5Db21waWxlUHV0VG9CYXNlT3BlcmF0aW9u
KGNvZGVCbG9jay0+cHV0VG9CYXNlT3BlcmF0aW9uKGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkp
OworCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgfQpA
QCAtMTkzLDEzICsyNjEsMjMgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bj
b2RlKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqLCBJbnN0cnVjdGkKIGlubGluZSBib29s
IGNhbklubGluZU9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEluc3RydWN0aW9uKiBwYykKIHsKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIAot
ICAgIC8vIFRoZXNlIG9wY29kZXMgd291bGQgYmUgZWFzeSB0byBzdXBwb3J0IHdpdGggaW5saW5p
bmcsIGJ1dCB3ZSBjdXJyZW50bHkgZG9uJ3QgZG8gaXQuCi0gICAgLy8gVGhlIGlzc3VlIGlzIHRo
YXQgdGhlIHNjb3BlIGNoYWluIHdpbGwgbm90IGJlIHNldCBjb3JyZWN0bHkuCi0gICAgY2FzZSBv
cF9nZXRfc2NvcGVkX3ZhcjoKLSAgICBjYXNlIG9wX3B1dF9zY29wZWRfdmFyOgorCisgICAgY2Fz
ZSBvcF9yZXNvbHZlX2dsb2JhbF9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFs
X3ZhcjoKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVkX3ZhcjoKKyAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGVkX3Zhcl9vbl90b3Bfc2NvcGU6CiAgICAgY2FzZSBvcF9yZXNvbHZlOgorICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZWRfdmFyX3dpdGhfdG9wX3Njb3BlX2NoZWNrOgorICAgICAgICBy
ZXR1cm4gY2FuQ29tcGlsZVJlc29sdmVPcGVyYXRpb25zKG9wY29kZUlELCBjb2RlQmxvY2stPnJl
c29sdmVPcGVyYXRpb25zKHBjWzNdLnUub3BlcmFuZCksIHRydWUpID09IENhbkNvbXBpbGU7CisK
KyAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90b19nbG9iYWw6CisgICAgY2FzZSBvcF9yZXNvbHZl
X2Jhc2VfdG9fZ2xvYmFsX2R5bmFtaWM6CisgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fc2Nv
cGU6CisgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fc2NvcGVfd2l0aF90b3Bfc2NvcGVfY2hl
Y2s6CiAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6CisgICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhf
YmFzZToKKyAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF90aGlzOgorICAgICAgICByZXR1cm4gY2Fu
Q29tcGlsZVJlc29sdmVPcGVyYXRpb25zKG9wY29kZUlELCBjb2RlQmxvY2stPnJlc29sdmVPcGVy
YXRpb25zKHBjWzRdLnUub3BlcmFuZCksIHRydWUpID09IENhbkNvbXBpbGU7CiAgICAgICAgIAog
ICAgIC8vIElubGluaW5nIGRvZXNuJ3QgY29ycmVjdGx5IHJlbWFwIHJlZ3VsYXIgZXhwcmVzc2lv
biBvcGVyYW5kcy4KICAgICBjYXNlIG9wX25ld19yZWdleHA6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKaW5kZXggMjEyYzhiYmQyZmNkMDYwNWUwYWFlMjM3MWExODg4OGEwZDI4MDJh
NC4uYjJjNzU0Zjg1MGY1ZWFiNTE0ZGI0NTdiOWZjNjFlMWE1YTZhZmYyMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtNTcsMTAgKzU3LDIzIEBAIHN0cnVjdCBTdG9yYWdl
QWNjZXNzRGF0YSB7CiAKIHN0cnVjdCBSZXNvbHZlR2xvYmFsRGF0YSB7CiAgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlcjsKLSAgICB1bnNpZ25lZCByZXNvbHZlSW5mb0luZGV4OworICAgIHVu
c2lnbmVkIHJlc29sdmVPcGVyYXRpb25zSW5kZXg7CisgICAgdW5zaWduZWQgcHV0VG9CYXNlT3Bl
cmF0aW9uSW5kZXg7CisgICAgdW5zaWduZWQgcmVzb2x2ZVByb3BlcnR5SW5kZXg7CiB9OwogCi0v
LyAKK3N0cnVjdCBSZXNvbHZlT3BlcmF0aW9uRGF0YSB7CisgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlcjsKKyAgICB1bnNpZ25lZCByZXNvbHZlT3BlcmF0aW9uc0luZGV4OworICAgIHVuc2ln
bmVkIHB1dFRvQmFzZU9wZXJhdGlvbkluZGV4OworfTsKKworc3RydWN0IFB1dFRvQmFzZU9wZXJh
dGlvbkRhdGEgeworICAgIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbkluZGV4OworfTsKKwor
CisvLwogLy8gPT09IEdyYXBoID09PQogLy8KIC8vIFRoZSBkYXRhZmxvdyBncmFwaCBpcyBhbiBv
cmRlcmVkIHZlY3RvciBvZiBub2Rlcy4KQEAgLTY2OSw2ICs2ODIsOCBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwogICAgIFZlY3RvcjxTdG9yYWdlQWNj
ZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICBWZWN0b3I8UmVzb2x2ZUdsb2JhbERh
dGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CisgICAgVmVjdG9yPFJlc29sdmVPcGVyYXRpb25EYXRh
PiBtX3Jlc29sdmVPcGVyYXRpb25zRGF0YTsKKyAgICBWZWN0b3I8UHV0VG9CYXNlT3BlcmF0aW9u
RGF0YT4gbV9wdXRUb0Jhc2VPcGVyYXRpb25EYXRhOwogICAgIFZlY3RvcjxOb2RlSW5kZXgsIDg+
IG1fYXJndW1lbnRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2
PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICBTZWdtZW50ZWRWZWN0b3I8QXJndW1lbnRQb3Np
dGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKaW5kZXggZGY2MTkxZWFiZjY4MWI1NzI0NmY5ODg5NTM3YmVjYTEwYjQ1MDVhMi4uNDBiM2Vk
N2VjZTFiZWM3NDkyZWJjOTQ3ZjM2OTFmOGQwODkxNGQxYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKQEAgLTM1Miw5ICszNTIsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNh
c2UgR2V0QnlJZEZsdXNoOgogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0
QnlJZERpcmVjdDoKLSAgICAgICAgY2FzZSBSZXNvbHZlOgotICAgICAgICBjYXNlIFJlc29sdmVC
YXNlOgotICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zNzMsNiArMzcwLDEyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZv
OwogICAgIH0KIAorICAgIHVuc2lnbmVkIHJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChvcCgpID09IFJlc29sdmUgfHwgb3AoKSA9PSBSZXNvbHZlQmFz
ZSB8fCBvcCgpID09IFJlc29sdmVCYXNlU3RyaWN0UHV0KTsKKyAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvOworICAgIH0KKwogICAgIGJvb2wgaGFzQXJpdGhOb2RlRmxhZ3MoKQogICAgIHsKICAgICAg
ICAgc3dpdGNoIChvcCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
aW5kZXggOWM5M2E4YmEzYmFjYzVhZTAzZTQxMjkyZTg4ZjE5ZTUzYmFiYjc0YS4uMWQyNDYwNjU5
ZWM3MmQ0OGE4YmUwMDEyZmMxMTBlMzVkMjQzYzRlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaApAQCAtMjM0LDYgKzIzNCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhUaHJvdywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKFRocm93UmVmZXJlbmNlRXJyb3IsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCisgICAg
bWFjcm8oR2FyYmFnZVZhbHVlLCBOb2RlUmVzdWx0SlMgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAor
ICAgIFwKICAgICAvKiBUaGlzIGlzIGEgcHNldWRvLXRlcm1pbmFsLiBJdCBtZWFucyB0aGF0IGV4
ZWN1dGlvbiBzaG91bGQgZmFsbCBvdXQgb2YgREZHIGF0ICovXAogICAgIC8qIHRoaXMgcG9pbnQs
IGJ1dCBleGVjdXRpb24gZG9lcyBjb250aW51ZSBpbiB0aGUgYmFzaWMgYmxvY2sgLSBqdXN0IGlu
IGEgKi9cCiAgICAgLyogZGlmZmVyZW50IGNvbXBpbGVyLiAqL1wKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IGIzNzAxNzIyZTkyZjg1YTYzYzliY2MyYWViYzU0
YWQ3YmRiMmJiYTkuLjY1NjAwODhmZDI4ZmFhYjI5MTliNDhmZTI3M2U3ODc4OTZiZjY5NDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtNDUsOSArNDUsOSBA
QCBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbAogICAgICwgbV9raW5kKGtpbmQpCiAgICAgLCBtX2Nv
dW50KDApCiAgICAgLCBtX3N0cmVhbUluZGV4KHN0cmVhbUluZGV4KQotICAgICwgbV9sYXN0U2V0
T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCiB7CiAgICAgQVNTRVJUKG1fY29kZU9yaWdp
bi5pc1NldCgpKTsKKyAgICBtX3NldE9wZXJhbmRzLmFwcGVuZChqaXQtPm1fbGFzdFNldE9wZXJh
bmQpOwogfQogCiBib29sIE9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRl
U2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9j
aykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKaW5kZXggY2QyNDM0YzExNjJk
OTQ0NDkyOGQxNmIyNzY3YTcxNjU3NzA2M2QyOS4uMGVjZWZlMzg2MmNiNjAwMzg3NmE1NjkxMjYx
ODAxNmNkZDViZjY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAg
LTExMCw5ICsxMTAsOSBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIG1fc3RyZWFtSW5kZXg7Ci0gICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CisgICAgVmVjdG9y
PGludCwgMT4gbV9zZXRPcGVyYW5kczsKICAgICAKLSAgICBSZWZQdHI8VmFsdWVSZWNvdmVyeU92
ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZTsKKyAgICBWZWN0b3I8UmVmUHRyPFZhbHVl
UmVjb3ZlcnlPdmVycmlkZT4sIDE+IG1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlczsKIAogcHJpdmF0
ZToKICAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxv
Y2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKaW5kZXggMmNl
MWM4ODdiOGU5MDk3NzY1MWUxZmRiNDRiNGQ0NTYzZmU5YjI5NS4uNTVhOTAzYzdhMWUwM2YwM2Q3
YzJhNGMzODMwZjIxZWMxY2YyMDEwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcApAQCAtNzAsMTEgKzcwLDEwIEBAIHZvaWQgY29tcGls
ZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9w
ZXJhbmRzOwogICAgIGNvZGVCbG9jay0+dmFyaWFibGVFdmVudFN0cmVhbSgpLnJlY29uc3RydWN0
KGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGNvZGVCbG9jay0+bWluaWZpZWRERkcoKSwg
ZXhpdC5tX3N0cmVhbUluZGV4LCBvcGVyYW5kcyk7CiAgICAgCi0gICAgLy8gVGhlcmUgbWF5IGJl
IGFuIG92ZXJyaWRlLCBmb3IgZm9yd2FyZCBzcGVjdWxhdGlvbnMuCi0gICAgaWYgKCEhZXhpdC5t
X3ZhbHVlUmVjb3ZlcnlPdmVycmlkZSkgewotICAgICAgICBvcGVyYW5kcy5zZXRPcGVyYW5kKAot
ICAgICAgICAgICAgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZS0+b3BlcmFuZCwgZXhpdC5t
X3ZhbHVlUmVjb3ZlcnlPdmVycmlkZS0+cmVjb3ZlcnkpOwotICAgIH0KKyAgICAvLyBUaGVyZSBt
YXkgYmUgb3ZlcnJpZGVzLCBmb3IgZm9yd2FyZCBzcGVjdWxhdGlvbnMuCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlcy5zaXplKCk7IGkrKykK
KyAgICAgICAgb3BlcmFuZHMuc2V0T3BlcmFuZChleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRl
c1tpXS0+b3BlcmFuZCwgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZXNbaV0tPnJlY292ZXJ5
KTsKKwogICAgIAogICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gMDsKICAgICBp
ZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCmluZGV4IGNiMTNkY2M1MGNiNDM5YzE4
Yjg0ZTI4ZmJlNDk1NzM0MTIyYjVlZTcuLjk4Nzc5YTgwM2MwNmI3NTZiYjllNTBlYzg3ZWYwMzVi
ZjBlNTA2ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyMzJfNjQuY3BwCkBAIC02NzUsOSArNjc1LDkgQEAgdm9pZCBPU1JFeGl0Q29t
cGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZh
bHVlUmVjb3YKICAgICAKICAgICAvLyAxNSkgTG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGJ5
dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1QwLgogICAgIAotICAgIGlmIChleGl0Lm1fbGFzdFNl
dE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkgewotICAgICAgICBt
X2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
ZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwot
ICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rl
cjIpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhpdC5tX3NldE9wZXJhbmRzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRG
b3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fc2V0T3BlcmFuZHNbaV0pLCBHUFJJbmZvOjpjYWNo
ZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9zZXRPcGVyYW5kc1tpXSksIEdQUkluZm86
OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7CiAgICAgfQogICAgIAogICAgIC8vIDE2KSBBZGp1c3Qg
dGhlIGNhbGwgZnJhbWUgcG9pbnRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKaW5kZXggOTY4ZTU2ZjFhZTNiZDViMjQ1MDhlYTk5
ZGY3NzJhMzcwNzM0ZmQ1Yy4uMDMzNTViMmI0ZjNlNDk3NDhhNjlmZDNkMzgwOTAxODg2MzU1ODJi
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXI2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXI2NC5jcHAKQEAgLTYzMywxMCArNjMzLDkgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3YKICAg
ICB9CiAgICAgCiAgICAgLy8gMTYpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29k
ZSBvcGVyYXRpb24gaW50byByZWdUMC4KLSAgICAKLSAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVy
YW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCi0gICAgICAgIG1faml0Lmxv
YWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5t
X2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwotICAgIAor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhpdC5tX3NldE9wZXJhbmRzLnNpemUoKTsgaSsr
KQorICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKWV4aXQubV9zZXRPcGVyYW5kc1tpXSksIEdQUkluZm86OmNhY2hlZFJlc3Vs
dFJlZ2lzdGVyKTsKKwogICAgIC8vIDE3KSBBZGp1c3QgdGhlIGNhbGwgZnJhbWUgcG9pbnRlci4K
ICAgICAKICAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggZGI3MzZmZWViNDhm
NzgxMmNmM2Q0YWI1YzZhOWFhMWQwMDdiNDYxYy4uYzM0NjkyMzY0MjczNTRhMGE5ZGI2MDkwNmMw
MzcxMmU0NTQ3MWE0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCkBAIC0xMDU5LDM1ICsxMDU5LDM4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25Ob3RpZnlHbG9iYWxWYXJXcml0ZShXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQogICAg
IHdhdGNocG9pbnRTZXQtPm5vdGlmeVdyaXRlKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXIqIHBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2
ZShFeGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmVzb2x2ZU9wZXJh
dGlvbnMqIG9wZXJhdGlvbnMpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2
ZShleGVjLCAqcHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Nj
b3BlOjpyZXNvbHZlKGV4ZWMsICpwcm9wZXJ0eU5hbWUsIG9wZXJhdGlvbnMpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZShFeGVjU3RhdGUq
IGV4ZWMsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJhc2UoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyKiBw
cm9wZXJ0eU5hbWUsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVy
YXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgKnByb3BlcnR5TmFtZSwgZmFsc2UpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsICpwcm9wZXJ0
eU5hbWUsIGZhbHNlLCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb25zKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpY3RQdXQo
RXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0KEV4ZWNTdGF0ZSog
ZXhlYywgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0
aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb25zKQogewogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsICpwcm9wZXJ0eU5h
bWUsIHRydWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVC
YXNlKGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHRydWUsIG9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJh
dGlvbnMpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNv
bHZlR2xvYmFsKEV4ZWNTdGF0ZSogZXhlYywgR2xvYmFsUmVzb2x2ZUluZm8qIHJlc29sdmVJbmZv
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVHbG9iYWwoRXhl
Y1N0YXRlKiBleGVjLCBSZXNvbHZlT3BlcmF0aW9uKiByZXNvbHZlT3BlcmF0aW9uLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwotCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKGV4ZWMsICpwcm9wZXJ0eU5h
bWUsIGdsb2JhbE9iamVjdCwgJnJlc29sdmVJbmZvLT5zdHJ1Y3R1cmUsICZyZXNvbHZlSW5mby0+
b2Zmc2V0KSk7CisgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHJl
c29sdmVPcGVyYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOworICAgIEFT
U0VSVChyZXNvbHZlT3BlcmF0aW9uLT5tX29wZXJhdGlvbiA9PSBSZXNvbHZlR2V0QW5kUmV0dXJu
R2xvYmFsUHJvcGVydHkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVz
b2x2ZUdsb2JhbChleGVjLCAqcHJvcGVydHlOYW1lLCBnbG9iYWxPYmplY3QsIHJlc29sdmVPcGVy
YXRpb24pKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1By
aW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAppbmRleCBiNjUzMGI3NTVhMDNhMjZjYTBi
ZjRjNjQ0Y2EwNjg4YzVjYjljZGQxLi44ZDJiZWFjZWM4MGFkMGExMTM4YzdkYmI5YjViNzExY2Fm
YzJlNTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaApAQCAt
MzMsOCArMzMsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IEdsb2JhbFJlc29sdmVJ
bmZvOwotCiBuYW1lc3BhY2UgREZHIHsKIAogZXh0ZXJuICJDIiB7CkBAIC02Niw4ICs2NCwxMCBA
QCB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
QVopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLAogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwq
KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9u
X0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSWRlbnRpZmllciopOwogdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gKCpKX0RGR09wZXJhdGlvbl9FR3JpSnNnSSkoRXhlY1N0YXRlKiwgR2xvYmFsUmVzb2x2
ZUluZm8qLCBKU0dsb2JhbE9iamVjdCosIElkZW50aWZpZXIqKTsKK3R5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VHcmlKc2dJKShFeGVjU3RhdGUq
LCBSZXNvbHZlT3BlcmF0aW9uKiwgSlNHbG9iYWxPYmplY3QqLCBJZGVudGlmaWVyKik7CiB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSSkoRXhl
Y1N0YXRlKiwgSWRlbnRpZmllciopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRUlSbykoRXhlY1N0YXRlKiwgSWRlbnRpZmllciosIFJlc29s
dmVPcGVyYXRpb25zKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FSVJvUHRibykoRXhlY1N0YXRlKiwgSWRlbnRpZmllciosIFJlc29sdmVP
cGVyYXRpb25zKiwgUHV0VG9CYXNlT3BlcmF0aW9uKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRUpBKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNBcnJheSopOwogdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUpJKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciopOwpAQCAtMTMxLDEwICsxMzEsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYywgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTm90
aWZ5R2xvYmFsVmFyV3JpdGUoV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkgV1RGX0lOVEVS
TkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlKEV4ZWNT
dGF0ZSosIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlKEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqKSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVC
YXNlU3RyaWN0UHV0KEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVHbG9iYWwoRXhlY1N0YXRl
KiwgR2xvYmFsUmVzb2x2ZUluZm8qLCBKU0dsb2JhbE9iamVjdCosIElkZW50aWZpZXIqKSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmUo
RXhlY1N0YXRlKiwgSWRlbnRpZmllciosIFJlc29sdmVPcGVyYXRpb25zKikgV1RGX0lOVEVSTkFM
OworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZShFeGVj
U3RhdGUqLCBJZGVudGlmaWVyKiwgUmVzb2x2ZU9wZXJhdGlvbnMqLCBQdXRUb0Jhc2VPcGVyYXRp
b24qKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlc29sdmVCYXNlU3RyaWN0UHV0KEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqLCBSZXNvbHZlT3Bl
cmF0aW9ucyosIFB1dFRvQmFzZU9wZXJhdGlvbiopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUqLCBSZXNv
bHZlT3BlcmF0aW9uKiwgSlNHbG9iYWxPYmplY3QqLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFM
OwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCkgV1RG
X0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KSBXVEZfSU5URVJOQUw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCmluZGV4IGQ3NmZkODAxODY2ZmIwNGFmMzljNWFhODdjNWIwZmI3MDFhMTkxNjku
LmY2YjdlNTVhZWExZjVkOTZiZjBjYTcxMTBjOTQwMjhkMzFhZWJlNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCkBAIC02NzQsNiArNjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVj
a051bWJlcjoKICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CiAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0
Y2guY3BwCmluZGV4IDZmYjE4NWMxMjJlM2I3YzI0YzI1ODkxMDRhNmVmYTcwMjE3Nzc2ZDcuLjhh
ODMwNDMwNDdkYjUyZTgyZDAzOTA1OThjOTBkODExOWVhNGU0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcApAQCAtMjk5LDcgKzI5OSw3IEBAIHN0YXRpYyBib29s
IHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0
dXJlKCk7CiAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIHx8IHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggODUwZDVhYTc0ZjEzOTk5
Nzg5NTQ4ZDY5YzM4ZDVhMTViZjQ4NGJiOS4uNGEyMGI4MDcwMjI1ZjJkMDEwMTAyMjcyZDQ3ZDMz
ZWYzMjMzMzBjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKQEAgLTE2Myw3ICsxNjMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb252
ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdgog
I2VuZGlmCiAgICAgCiAgICAgdW5zaWduZWQgc2V0TG9jYWxJbmRleEluQmxvY2sgPSBtX2luZGV4
SW5CbG9jayArIDE7Ci0gICAgCisKKyAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXQuY29kZUJsb2Nr
KCktPmxhc3RPU1JFeGl0KCk7CisKICAgICBOb2RlKiBzZXRMb2NhbCA9ICZhdChtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChzZXRMb2NhbEluZGV4SW5CbG9jaykpOwogICAgIGJv
b2wgaGFkSW50MzJUb0RvdWJsZSA9IGZhbHNlOwogICAgIApAQCAtMTczLDcgKzE3NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZChjb25zdCBWYWx1
ZVJlY292ZXJ5JiB2YWx1ZVJlY292CiAgICAgfQogICAgIGlmIChzZXRMb2NhbC0+b3AoKSA9PSBG
bHVzaCB8fCBzZXRMb2NhbC0+b3AoKSA9PSBQaGFudG9tKQogICAgICAgICBzZXRMb2NhbCA9ICZh
dChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdCgrK3NldExvY2FsSW5kZXhJbkJs
b2NrKSk7Ci0gICAgICAgIAorICAgIAogICAgIGlmICghIXZhbHVlUmVjb3ZlcnkpIHsKICAgICAg
ICAgaWYgKGhhZEludDMyVG9Eb3VibGUpCiAgICAgICAgICAgICBBU1NFUlQoYXQoc2V0TG9jYWwt
PmNoaWxkMSgpKS5jaGlsZDEoKSA9PSBtX2NvbXBpbGVJbmRleCk7CkBAIC0xODgsMTYgKzE5MCwz
NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoY29u
c3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdgogICAgICAgICAvLyBXZSdyZSBhdCBhbiBpbmxp
bmVkIHJldHVybi4gVXNlIGEgYmFja3dhcmQgc3BlY3VsYXRpb24gaW5zdGVhZC4KICAgICAgICAg
cmV0dXJuOwogICAgIH0KKworICAgIGV4aXQubV9zZXRPcGVyYW5kc1swXSA9IHNldExvY2FsLT5s
b2NhbCgpOworCisgICAgd2hpbGUgKG5leHROb2RlLT5jb2RlT3JpZ2luID09IGF0KG1fY29tcGls
ZUluZGV4KS5jb2RlT3JpZ2luKSB7CisgICAgICAgIEFTU0VSVChuZXh0Tm9kZS0+b3AoKSA9PSBT
ZXRMb2NhbCk7CisgICAgICAgICsrc2V0TG9jYWxJbmRleEluQmxvY2s7CisgICAgICAgIE5vZGUq
IG5leHRTZXRMb2NhbCA9IG5leHROb2RlOworICAgICAgICBpZiAobmV4dFNldExvY2FsLT5vcCgp
ID09IEludDMyVG9Eb3VibGUpCisgICAgICAgICAgICBuZXh0U2V0TG9jYWwgPSAmYXQobV9qaXQu
Z3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoKytzZXRMb2NhbEluZGV4SW5CbG9jaykpOwor
CisgICAgICAgIGlmIChuZXh0U2V0TG9jYWwtPm9wKCkgPT0gRmx1c2ggfHwgbmV4dFNldExvY2Fs
LT5vcCgpID09IFBoYW50b20pCisgICAgICAgICAgICBuZXh0U2V0TG9jYWwgPSAmYXQobV9qaXQu
Z3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoKytzZXRMb2NhbEluZGV4SW5CbG9jaykpOwor
CisgICAgICAgIG5leHROb2RlID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10t
PmF0KHNldExvY2FsSW5kZXhJbkJsb2NrICsgMSkpOworICAgICAgICBBU1NFUlQobmV4dE5vZGUt
Pm9wKCkgIT0gSnVtcCB8fCBuZXh0Tm9kZS0+Y29kZU9yaWdpbiAhPSBhdChtX2NvbXBpbGVJbmRl
eCkuY29kZU9yaWdpbik7CisgICAgICAgIGV4aXQubV9zZXRPcGVyYW5kcy5hcHBlbmQobmV4dFNl
dExvY2FsLT5sb2NhbCgpKTsKKyAgICB9CisKICAgICBBU1NFUlQobmV4dE5vZGUtPmNvZGVPcmln
aW4gIT0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwotICAgICAgICAKLSAgICBPU1JF
eGl0JiBleGl0ID0gbV9qaXQuY29kZUJsb2NrKCktPmxhc3RPU1JFeGl0KCk7CisKICAgICBleGl0
Lm1fY29kZU9yaWdpbiA9IG5leHROb2RlLT5jb2RlT3JpZ2luOwogICAgICAgICAKICAgICBpZiAo
IXZhbHVlUmVjb3ZlcnkpCiAgICAgICAgIHJldHVybjsKLSAgICBleGl0Lm1fbGFzdFNldE9wZXJh
bmQgPSBzZXRMb2NhbC0+bG9jYWwoKTsKLSAgICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRl
ID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUoc2V0TG9jYWwt
PmxvY2FsKCksIHZhbHVlUmVjb3ZlcnkpKTsKKworICAgIEFTU0VSVChleGl0Lm1fc2V0T3BlcmFu
ZHMuc2l6ZSgpID09IDEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhpdC5tX3NldE9w
ZXJhbmRzLnNpemUoKTsgaSsrKQorICAgICAgICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRl
cy5hcHBlbmQoYWRvcHRSZWYobmV3IFZhbHVlUmVjb3ZlcnlPdmVycmlkZShleGl0Lm1fc2V0T3Bl
cmFuZHNbaV0sIHZhbHVlUmVjb3ZlcnkpKSk7CisKIH0KIAogSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludCogU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtp
bmQga2luZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAppbmRleCA5MGI2ZDQ4M2FiNjRiOTU1MjMyNjQ0YzFmOTEyYTgyM2M2ODlkMDM2Li41MDcwYTYz
YTdlOWM2ZThhNmU3ZjI3YzQ5YmRmZmJkNDBkY2I3YzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC04MzAsNiArODMwLDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihpbmRleCk7
CiAgICAgfQogCisgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIHJlc29sdmVPcGVyYXRpb25zKHVuc2ln
bmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0LmNvZGVCbG9jaygpLT5yZXNv
bHZlT3BlcmF0aW9ucyhpbmRleCk7CisgICAgfQorCisgICAgUHV0VG9CYXNlT3BlcmF0aW9uKiBw
dXRUb0Jhc2VPcGVyYXRpb24odW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9qaXQuY29kZUJsb2NrKCktPnB1dFRvQmFzZU9wZXJhdGlvbihpbmRleCk7CisgICAgfQorCiAg
ICAgLy8gU3BpbGwgYWxsIFZpcnR1YWxSZWdpc3RlcnMgYmFjayB0byB0aGUgSlNTdGFjay4KICAg
ICB2b2lkIGZsdXNoUmVnaXN0ZXJzKCkKICAgICB7CkBAIC0xMjA5LDYgKzEyMTksMTYgQEAgcHVi
bGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihpZGVudGlmaWVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSVJvIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgSWRlbnRpZmllciogaWRlbnRpZmllciwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9w
ZXJhdGlvbnMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSwgVHJ1c3RlZEltbVB0cihvcGVyYXRpb25zKSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FSVJvUHRibyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIElk
ZW50aWZpZXIqIGlkZW50aWZpZXIsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRU
b0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCisgICAgeworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSwg
VHJ1c3RlZEltbVB0cihvcGVyYXRpb25zKSwgVHJ1c3RlZEltbVB0cihwdXRUb0Jhc2VPcGVyYXRp
b25zKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEpOwpAQCAtMTcwNyw2ICsxNzI3LDE5IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGltbSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQorCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSVJvIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIElkZW50aWZpZXIqIGlkZW50aWZpZXIs
IFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllciksIFRydXN0
ZWRJbW1QdHIob3BlcmF0aW9ucykpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CisgICAgfQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FSVJvUHRibyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0
aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb25zKQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaWRl
bnRpZmllciksIFRydXN0ZWRJbW1QdHIob3BlcmF0aW9ucyksIFRydXN0ZWRJbW1QdHIocHV0VG9C
YXNlT3BlcmF0aW9ucykpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAg
fQorCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
Q0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMlBheWxvYWQs
IGFyZzJUYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKaW5kZXggMDM5NmY4Njk2NzRlMjhjZmRhZGM1OTU3ZTk2NzEwZWZm
MjdjYTFlMi4uNTk3MTliZDJkOGRmYjNiNWVhODEyOGY3ZGE2MDA1OWQyZmJjYzY3NiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCkBAIC00Mjg1LDcgKzQyODUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlLCByZXN1bHRUYWcuZ3ByKCks
IHJlc3VsdFBheWxvYWQuZ3ByKCksIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkp
KTsKKyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1f
cmVzb2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUucmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZSwgcmVzdWx0VGFnLmdwcigp
LCByZXN1bHRQYXlsb2FkLmdwcigpLCBpZGVudGlmaWVyKGRhdGEuaWRlbnRpZmllck51bWJlciks
IHJlc29sdmVPcGVyYXRpb25zKGRhdGEucmVzb2x2ZU9wZXJhdGlvbnNJbmRleCkpOwogICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00Mjk0LDcgKzQyOTUsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAg
ICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25SZXNvbHZlQmFzZSwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigp
LCBpZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSk7CisgICAgICAgIFJlc29sdmVP
cGVyYXRpb25EYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29sdmVPcGVyYXRpb25zRGF0
YVtub2RlLnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCldOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQu
Z3ByKCksIGlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSwgcmVzb2x2ZU9wZXJhdGlv
bnMoZGF0YS5yZXNvbHZlT3BlcmF0aW9uc0luZGV4KSwgcHV0VG9CYXNlT3BlcmF0aW9uKGRhdGEu
cHV0VG9CYXNlT3BlcmF0aW9uSW5kZXgpKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRU
YWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNDMwMyw3ICs0MzA1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBH
UFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRU
YWcodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJp
Y3RQdXQsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgaWRlbnRpZmllcihu
b2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOworICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYg
ZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS5yZXNvbHZl
T3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25S
ZXNvbHZlQmFzZVN0cmljdFB1dCwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigp
LCBpZGVudGlmaWVyKGRhdGEuaWRlbnRpZmllck51bWJlciksIHJlc29sdmVPcGVyYXRpb25zKGRh
dGEucmVzb2x2ZU9wZXJhdGlvbnNJbmRleCksIHB1dFRvQmFzZU9wZXJhdGlvbihkYXRhLnB1dFRv
QmFzZU9wZXJhdGlvbkluZGV4KSk7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTQzMjAsMTggKzQzMjMsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3Vs
dFBheWxvYWQuZ3ByKCk7CiAKICAgICAgICAgUmVzb2x2ZUdsb2JhbERhdGEmIGRhdGEgPSBtX2pp
dC5ncmFwaCgpLm1fcmVzb2x2ZUdsb2JhbERhdGFbbm9kZS5yZXNvbHZlR2xvYmFsRGF0YUluZGV4
KCldOwotICAgICAgICBHbG9iYWxSZXNvbHZlSW5mbyogcmVzb2x2ZUluZm9BZGRyZXNzID0gJiht
X2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsUmVzb2x2ZUluZm8oZGF0YS5yZXNvbHZlSW5mb0luZGV4
KSk7CisgICAgICAgIFJlc29sdmVPcGVyYXRpb24qIHJlc29sdmVPcGVyYXRpb25BZGRyZXNzID0g
JihtX2ppdC5jb2RlQmxvY2soKS0+cmVzb2x2ZU9wZXJhdGlvbnMoZGF0YS5yZXNvbHZlT3BlcmF0
aW9uc0luZGV4KS0+ZGF0YSgpW2RhdGEucmVzb2x2ZVByb3BlcnR5SW5kZXhdKTsKIAogICAgICAg
ICAvLyBDaGVjayBTdHJ1Y3R1cmUgb2YgZ2xvYmFsIG9iamVjdAogICAgICAgICBtX2ppdC5tb3Zl
KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNv
ZGVPcmlnaW4pKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgbV9qaXQubW92ZShKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbVB0cihyZXNvbHZlSW5mb0FkZHJlc3MpLCByZXNvbHZlSW5mb0dQUik7
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzb2x2ZUluZm9H
UFIsIE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgc3RydWN0dXJlKSksIHJlc3Vs
dFBheWxvYWRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
UHRyKHJlc29sdmVPcGVyYXRpb25BZGRyZXNzKSwgcmVzb2x2ZUluZm9HUFIpOworICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoUmVzb2x2ZU9wZXJhdGlvbiwgbV9zdHJ1Y3R1cmUpKSwgcmVzdWx0UGF5bG9hZEdQ
Uik7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlc05vdE1hdGNoID0gbV9q
aXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgcmVzdWx0UGF5bG9hZEdQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSk7CiAKICAgICAgICAgLy8gRmFzdCBjYXNlCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoR2xvYmFsUmVzb2x2
ZUluZm8sIG9mZnNldCkpLCByZXNvbHZlSW5mb0dQUik7CisgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09GRlNFVE9GKFJlc29s
dmVPcGVyYXRpb24sIG1fb2Zmc2V0KSksIHJlc29sdmVJbmZvR1BSKTsKICNpZiBERkdfRU5BQkxF
KEpJVF9BU1NFUlQpCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT3V0T2ZMaW5lID0gbV9q
aXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzb2x2ZUluZm9H
UFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICBtX2ppdC5i
cmVha3BvaW50KCk7CkBAIC00NzM2LDYgKzQ3MzksMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9u
KG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgR2FyYmFnZVZhbHVlOgorICAgICAg
ICAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IHRvIHRoZSBwb2ludCBvZiBjb2RlIGVtaXNzaW9uIGZv
ciBhIEdhcmJhZ2VWYWx1ZQorICAgICAgICBDUkFTSCgpOworICAgICAgICBicmVhazsKKwogICAg
IGNhc2UgRm9yY2VPU1JFeGl0OiB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAppbmRleCAwOTI4ZGZhNTg1YmE4YTRkNjg2Yzk3ZjAxYzQ2NjYzOTVjOGUzZTViLi4y
OGMwOTU0MzQ2NWMyYWUwYWExZDI2ZTEwMjRlYjY5Y2EyOTYxYzA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTQyNTksNyAr
NDI1OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBj
YXNlIFJlc29sdmU6IHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZl
LCByZXN1bHQuZ3ByKCksIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAg
ICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVzb2x2
ZU9wZXJhdGlvbnNEYXRhW25vZGUucmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZSwgcmVzdWx0LmdwcigpLCBpZGVudGlm
aWVyKGRhdGEuaWRlbnRpZmllck51bWJlciksIHJlc29sdmVPcGVyYXRpb25zKGRhdGEucmVzb2x2
ZU9wZXJhdGlvbnNJbmRleCkpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00MjY3LDcgKzQyNjgs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBS
ZXNvbHZlQmFzZTogewogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBHUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVC
YXNlLCByZXN1bHQuZ3ByKCksIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsK
KyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVz
b2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUucmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJhc2UsIHJlc3VsdC5ncHIoKSwg
aWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIpLCByZXNvbHZlT3BlcmF0aW9ucyhkYXRh
LnJlc29sdmVPcGVyYXRpb25zSW5kZXgpLCBwdXRUb0Jhc2VPcGVyYXRpb24oZGF0YS5wdXRUb0Jh
c2VPcGVyYXRpb25JbmRleCkpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00Mjc1LDcgKzQyNzcs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBS
ZXNvbHZlQmFzZVN0cmljdFB1dDogewogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAg
ICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blJlc29sdmVCYXNlU3RyaWN0UHV0LCByZXN1bHQuZ3ByKCksIGlkZW50aWZpZXIobm9kZS5pZGVu
dGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBt
X2ppdC5ncmFwaCgpLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUucmVzb2x2ZU9wZXJhdGlv
bnNEYXRhSW5kZXgoKV07CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJh
c2VTdHJpY3RQdXQsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1i
ZXIpLCByZXNvbHZlT3BlcmF0aW9ucyhkYXRhLnJlc29sdmVPcGVyYXRpb25zSW5kZXgpLCBwdXRU
b0Jhc2VPcGVyYXRpb24oZGF0YS5wdXRUb0Jhc2VPcGVyYXRpb25JbmRleCkpOwogICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC00MjkwLDE2ICs0MjkzLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKIAogICAgICAgICBSZXNvbHZlR2xvYmFsRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9y
ZXNvbHZlR2xvYmFsRGF0YVtub2RlLnJlc29sdmVHbG9iYWxEYXRhSW5kZXgoKV07Ci0gICAgICAg
IEdsb2JhbFJlc29sdmVJbmZvKiByZXNvbHZlSW5mb0FkZHJlc3MgPSAmKG1faml0LmNvZGVCbG9j
aygpLT5nbG9iYWxSZXNvbHZlSW5mbyhkYXRhLnJlc29sdmVJbmZvSW5kZXgpKTsKKyAgICAgICAg
UmVzb2x2ZU9wZXJhdGlvbiogcmVzb2x2ZU9wZXJhdGlvbkFkZHJlc3MgPSAmKG1faml0LmNvZGVC
bG9jaygpLT5yZXNvbHZlT3BlcmF0aW9ucyhkYXRhLnJlc29sdmVPcGVyYXRpb25zSW5kZXgpLT5k
YXRhKClbZGF0YS5yZXNvbHZlUHJvcGVydHlJbmRleF0pOwogCiAgICAgICAgIC8vIENoZWNrIFN0
cnVjdHVyZSBvZiBnbG9iYWwgb2JqZWN0CiAgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpLCBn
bG9iYWxPYmplY3RHUFIpOwotICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tUHRyKHJlc29sdmVJbmZvQWRkcmVzcyksIHJlc29sdmVJbmZvR1BSKTsKLSAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09G
RlNFVE9GKEdsb2JhbFJlc29sdmVJbmZvLCBzdHJ1Y3R1cmUpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZXNvbHZlT3BlcmF0aW9u
QWRkcmVzcyksIHJlc29sdmVJbmZvR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09GRlNFVE9GKFJlc29sdmVPcGVy
YXRpb24sIG1fc3RydWN0dXJlKSksIHJlc3VsdEdQUik7CiAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIHN0cnVjdHVyZXNEb250TWF0Y2ggPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogCiAgICAgICAgIC8vIEZhc3QgY2FzZQotICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzb2x2ZUluZm9HUFIsIE9C
SkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgb2Zmc2V0KSksIHJlc29sdmVJbmZvR1BS
KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZv
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoUmVzb2x2ZU9wZXJhdGlvbiwgbV9vZmZzZXQpKSwgcmVzb2x2
ZUluZm9HUFIpOwogI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNPdXRPZkxpbmUgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRl
clRoYW5PckVxdWFsLCByZXNvbHZlSW5mb0dQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSk7CiAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKQEAgLTQ2NjgsNiArNDY3MSwx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGNv
bXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24obm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAg
Y2FzZSBHYXJiYWdlVmFsdWU6CisgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBnZXQgdG8gdGhl
IHBvaW50IG9mIGNvZGUgZW1pc3Npb24gZm9yIGEgR2FyYmFnZVZhbHVlCisgICAgICAgIENSQVNI
KCk7CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6IHsKICAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApp
bmRleCAyZTQ0YWYyZDc3OTExMDQ4MmZhZDMxZGM4MmFkZTljZDM5YTdiZDI0Li4yMmI5Mzk1YjU2
YTFkMTBhNDkwNzE3OGI2MTY4NWQxMjc4ZjQxNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
CkBAIC0xNDQsNiArMTQ0LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnZvdGUobm9kZSwgVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgR2FyYmFnZVZhbHVlOgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUsIFZvdGVP
dGhlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNDlmOWVjM2I1M2QzMDNlNDk3
MmUyYzlmYjI4YTk5OWNhOTY4ZWFlZi4uYzA1MTQ0NDdlODcxMmQyMDAzMjYwMWU5ZDk4MmQ4Yjdk
MDYyNzkxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMjcwLDEwICsyNzAsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChv
cF9nZXRfYnlfdmFsKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCkK
ICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV9wbmFtZSkKLSAgICAgICAgREVGSU5FX09QKG9w
X2dldF9nbG9iYWxfdmFyX3dhdGNoYWJsZSkKLSAgICAgICAgREVGSU5FX09QKG9wX2dldF9nbG9i
YWxfdmFyKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3BuYW1lcykKLSAgICAgICAgREVGSU5F
X09QKG9wX2dldF9zY29wZWRfdmFyKQogICAgICAgICBERUZJTkVfT1Aob3BfY2hlY2tfaGFzX2lu
c3RhbmNlKQogICAgICAgICBERUZJTkVfT1Aob3BfaW5zdGFuY2VvZikKICAgICAgICAgREVGSU5F
X09QKG9wX2lzX3VuZGVmaW5lZCkKQEAgLTMzOCwxNyArMzM1LDI2IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX3B1dF9ieV9pbmRleCkK
ICAgICAgICAgREVGSU5FX09QKG9wX3B1dF9ieV92YWwpCiAgICAgICAgIERFRklORV9PUChvcF9w
dXRfZ2V0dGVyX3NldHRlcikKLSAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKLSAg
ICAgICAgREVGSU5FX09QKG9wX3B1dF9nbG9iYWxfdmFyKQotICAgICAgICBjYXNlIG9wX2luaXRf
Z2xvYmFsX2NvbnN0X2NoZWNrOgotICAgICAgICBERUZJTkVfT1Aob3BfcHV0X2dsb2JhbF92YXJf
Y2hlY2spCi0gICAgICAgIERFRklORV9PUChvcF9wdXRfc2NvcGVkX3ZhcikKKyAgICAgICAgREVG
SU5FX09QKG9wX2luaXRfZ2xvYmFsX2NvbnN0KQorICAgICAgICBERUZJTkVfT1Aob3BfaW5pdF9n
bG9iYWxfY29uc3RfY2hlY2spCisKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbF9wcm9w
ZXJ0eToKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbF92YXI6CisgICAgICAgIGNhc2Ug
b3BfcmVzb2x2ZV9zY29wZWRfdmFyOgorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVkX3Zh
cl9vbl90b3Bfc2NvcGU6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZWRfdmFyX3dpdGhf
dG9wX3Njb3BlX2NoZWNrOgogICAgICAgICBERUZJTkVfT1Aob3BfcmVzb2x2ZSkKKworICAgICAg
ICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90b19nbG9iYWw6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2
ZV9iYXNlX3RvX2dsb2JhbF9keW5hbWljOgorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90
b19zY29wZToKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fc2NvcGVfd2l0aF90b3Bf
c2NvcGVfY2hlY2s6CiAgICAgICAgIERFRklORV9PUChvcF9yZXNvbHZlX2Jhc2UpCisKKyAgICAg
ICAgY2FzZSBvcF9wdXRfdG9fYmFzZV92YXJpYWJsZToKKyAgICAgICAgREVGSU5FX09QKG9wX3B1
dF90b19iYXNlKQorCiAgICAgICAgIERFRklORV9PUChvcF9lbnN1cmVfcHJvcGVydHlfZXhpc3Rz
KQotICAgICAgICBERUZJTkVfT1Aob3BfcmVzb2x2ZV9nbG9iYWwpCi0gICAgICAgIERFRklORV9P
UChvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKQotICAgICAgICBERUZJTkVfT1Aob3BfcmVzb2x2
ZV9za2lwKQogICAgICAgICBERUZJTkVfT1Aob3BfcmVzb2x2ZV93aXRoX2Jhc2UpCiAgICAgICAg
IERFRklORV9PUChvcF9yZXNvbHZlX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX09QKG9wX3Jl
dCkKQEAgLTUwMiwxNiArNTA4LDMyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9s
aW5lOgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X2J5X2lkKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X2J5X3ZhbCkKLSAgICAgICAgY2FzZSBvcF9pbml0X2ds
b2JhbF9jb25zdF9jaGVjazoKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF9nbG9i
YWxfdmFyX2NoZWNrKTsKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3Jlc29sdmVfZ2xv
YmFsKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1p
YykKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNr
KTsKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3JzaGlmdCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX3Vyc2hpZnQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9z
dHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX3RvX2pzbnVtYmVyKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfdG9fcHJpbWl0aXZlKQorCisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWxfcHJv
cGVydHk6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWxfdmFyOgorICAgICAgICBjYXNl
IG9wX3Jlc29sdmVfc2NvcGVkX3ZhcjoKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlZF92
YXJfb25fdG9wX3Njb3BlOgorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVkX3Zhcl93aXRo
X3RvcF9zY29wZV9jaGVjazoKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3Jlc29sdmUp
CisKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fZ2xvYmFsOgorICAgICAgICBjYXNl
IG9wX3Jlc29sdmVfYmFzZV90b19nbG9iYWxfZHluYW1pYzoKKyAgICAgICAgY2FzZSBvcF9yZXNv
bHZlX2Jhc2VfdG9fc2NvcGU6CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3RvX3Njb3Bl
X3dpdGhfdG9wX3Njb3BlX2NoZWNrOgorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcmVz
b2x2ZV9iYXNlKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcmVzb2x2ZV93aXRoX2Jh
c2UpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9yZXNvbHZlX3dpdGhfdGhpcykKKwor
ICAgICAgICBjYXNlIG9wX3B1dF90b19iYXNlX3ZhcmlhYmxlOgorICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfcHV0X3RvX2Jhc2UpCisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApp
bmRleCAzZTE2OTcyZTIzNDAzZjk3NDE2MjE3NDJiMTAyZjg2OWM4MWNhMzUyLi41YmY3YTA4Mzdk
ZDE0MjkzNTk1NDU0NjU2YTI1YzUxMWM3ZGQ1OGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTY3Niw5ICs2NzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9hcmd1
bWVudF9ieV92YWwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9ieV9w
bmFtZShJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2dsb2JhbF92YXIo
SW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9nbG9iYWxfdmFyX3dhdGNo
YWJsZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pIHsgZW1pdF9vcF9nZXRfZ2xvYmFsX3Zhcihp
bnN0cnVjdGlvbik7IH0KLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9zY29wZWRfdmFyKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pbml0X2xhenlfcmVnKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jaGVja19oYXNfaW5zdGFuY2UoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qKTsKQEAgLTc0
MCwxNyArNzM3LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0
X2J5X2luZGV4KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfYnlfdmFs
KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcihJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKEluc3Ry
dWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjdGlv
biopOworICAgICAgICB2b2lkIGVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3QoSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9yZXNvbHZlX29wZXJhdGlvbnMoUmVzb2x2ZU9wZXJh
dGlvbnMqLCBjb25zdCBpbnQqIGJhc2UsIGNvbnN0IGludCogdmFsdWUpOworICAgICAgICB2b2lk
IGVtaXRTbG93X2xpbmtfcmVzb2x2ZV9vcGVyYXRpb25zKFJlc29sdmVPcGVyYXRpb25zKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfcmVz
b2x2ZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9iYXNlKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnN1cmVfcHJvcGVydHlfZXhpc3Rz
KEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX2dsb2JhbChJbnN0
cnVjdGlvbiosIGJvb2wgZHluYW1pYyA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX3Jl
c29sdmVfZ2xvYmFsX2R5bmFtaWMoSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29w
X3Jlc29sdmVfc2tpcChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2
ZV93aXRoX2Jhc2UoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVf
d2l0aF90aGlzKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYmFz
ZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcmV0KEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3JzaGlmdChJbnN0cnVjdGlvbiopOwpAQCAtODE5LDkgKzgx
NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3ByZV9pbmMo
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwo
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2dsb2JhbF92YXJfY2hlY2soSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
cmVzb2x2ZV9nbG9iYWwoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyhJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjayhJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9yc2hpZnQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3Vi
KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtODI5
LDcgKzgyMywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdXJzaGlmdChJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9u
ZXdfYXJyYXkoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIAorCisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcmVzb2x2ZShJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9yZXNvbHZlX2Jhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcmVzb2x2ZV93aXRoX2Jhc2Uo
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcmVzb2x2ZV93aXRoX3RoaXMoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X3RvX2Jhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNp
Z25lZCk7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCAzM2RiMWQ0NGY5MmIy
NWE0ZWJiMmRmMjczNWVkNzg1MzZmNWRjNTY0Li41OWNlZDk1OWRkYWIwYzI1MDAwNGY0YjBhMmVm
MTEyNzk3MmVjNTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
QEAgLTYzMSwxMyArNjMxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlz
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgcmV0KCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZSk7Ci0gICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0
aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
QEAgLTY2MiwxMyArNjU1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyY2F0KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9iYXNlKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA/IGN0aV9vcF9yZXNvbHZl
X2Jhc2Vfc3RyaWN0X3B1dCA6IGN0aV9vcF9yZXNvbHZlX2Jhc2UpOwotICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVBy
b2ZpbGluZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLX0KLQogdm9pZCBKSVQ6
OmVtaXRfb3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9lbnN1cmVf
cHJvcGVydHlfZXhpc3RzKTsKQEAgLTY3Nyw1MCArNjYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW5zdXJlX3Byb3BlcnR5X2V4aXN0cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2tpcChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZl
X3NraXApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBib29sKQotewotICAgIC8v
IEZhc3QgY2FzZQotICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBtX2dsb2JhbFJlc29sdmVJbmZv
SW5kZXgrKzsKLSAgICBHbG9iYWxSZXNvbHZlSW5mbyogcmVzb2x2ZUluZm9BZGRyZXNzID0gJiht
X2NvZGVCbG9jay0+Z2xvYmFsUmVzb2x2ZUluZm8oY3VycmVudEluZGV4KSk7Ci0KLSAgICAvLyBD
aGVjayBTdHJ1Y3R1cmUgb2YgZ2xvYmFsIG9iamVjdAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
bG9iYWxPYmplY3QpLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHJlc29sdmVJbmZv
QWRkcmVzcyksIHJlZ1QyKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZT
RVRPRihHbG9iYWxSZXNvbHZlSW5mbywgc3RydWN0dXJlKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSkpOyAvLyBTdHJ1Y3R1cmVzIGRvbid0IG1hdGNoCi0KLSAgICAvLyBM
b2FkIGNhY2hlZCBwcm9wZXJ0eQotICAgIC8vIEFzc3VtZSB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0
IGFsd2F5cyB1c2VzIGV4dGVybmFsIHN0b3JhZ2UuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIs
IE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgb2Zmc2V0KSksIHJlZ1QxKTsKLSAg
ICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMCwgcmVnVDEsIHJlZ1QwLCBLbm93
bk5vdEZpbmFsKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfZ2xvYmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
dW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBJZGVu
dGlmaWVyKiBpZGVudCA9ICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKLSAgICAKLSAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBtX2ds
b2JhbFJlc29sdmVJbmZvSW5kZXgrKzsKLSAgICAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0g
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVfZ2xvYmFsKTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGlkZW50KSk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbmRleCkpOwotICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5n
KGRzdCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX25vdChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCwgcmVnVDApOwpAQCAtODE0LDIyICs3NTYsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfd2l0aF9iYXNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29s
dmVfd2l0aF9iYXNlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkp
OwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV93aXRoX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV93aXRoX3RoaXMpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
KTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CkBAIC0xNTcxLDUxICsxNDk3LDQwNSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0bwogICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFsdWVQcm9maWxpbmcoZHN0
KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2Jhc2UoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgaW50IGlkID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAg
UHV0VG9CYXNlT3BlcmF0aW9uKiBvcGVyYXRpb24gPSBtX2NvZGVCbG9jay0+cHV0VG9CYXNlT3Bl
cmF0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgIHN3aXRjaCAob3Bl
cmF0aW9uLT5tX2tpbmQpIHsKKyAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsVmFy
aWFibGVQdXRDaGVja2VkOgorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJv
LCBBYnNvbHV0ZUFkZHJlc3Mob3BlcmF0aW9uLT5tX3ByZWRpY2F0ZVBvaW50ZXIpKSk7CisgICAg
Y2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFZhcmlhYmxlUHV0OiB7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgICAgIGlmIChvcGVyYXRpb24tPm1faXNEeW5hbWljKSB7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSkp
OworICAgICAgICB9CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhdGlvbi0+bV9yZWdpc3RlckFkZHJlc3Mp
OworICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCisgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0
ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVn
VDEpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTVmFyaWFibGVPYmplY3Q6Om9m
ZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMik7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBvcGVyYXRpb24tPm1fb2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAg
ICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCisgICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1l
ZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsUHJvcGVydHlQdXQ6
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCBy
ZWdUMSk7CisgICAgICAgIGxvYWRQdHIoJm9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUsIHJlZ1QyKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVy
YXRpb24tPm1fc3RydWN0dXJlIHx8ICFvcGVyYXRpb24tPm1fc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGxvYWQzMigmb3BlcmF0aW9uLT5tX29mZnNl
dEluQnV0dGVyZmx5LCByZWdUMyk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCBy
ZWdUMyk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QzLCBU
aW1lc0VpZ2h0KSk7CisgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkK
KyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMs
IFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpV
bmluaXRpYWxpc2VkOgorICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpSZWFkb25seToKKyAg
ICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6R2VuZXJpYzoKKyAgICAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF90b19iYXNlKTsKKworICAgICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoYmFzZSkpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpZCkpKTsKKyAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKHZhbHVlKSk7CisgICAgICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uKSk7CisgICAgICAgIHN0
dWJDYWxsLmNhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X3Jlc29sdmVf
b3BlcmF0aW9ucyhSZXNvbHZlT3BlcmF0aW9ucyogcmVzb2x2ZU9wZXJhdGlvbnMsIGNvbnN0IGlu
dCogYmFzZVZSLCBjb25zdCBpbnQqIHZhbHVlVlIpCiB7Ci0gICAgaW50IHNraXAgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJlZ1QwKTsKLSAgICAKLSAgICBib29sIGNo
ZWNrVG9wTGV2ZWwgPSBtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYg
bV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAgICBBU1NFUlQoc2tpcCB8fCAh
Y2hlY2tUb3BMZXZlbCk7Ci0gICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAg
ICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQ7Ci0gICAgICAgIGlmIChjaGVja1RvcExldmVs
KQotICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKFplcm8s
IGFkZHJlc3NGb3IobV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICBhY3RpdmF0
aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB1
bm1hcCgpOworI2Vsc2UKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisjZW5kaWYKKwor
ICAgIGlmIChyZXNvbHZlT3BlcmF0aW9ucy0+aXNFbXB0eSgpKSB7CisgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgd2hpbGUgKHNraXAtLSkg
ewotICAgICAgICBhZGRTbG93Q2FzZShjaGVja1N0cnVjdHVyZShyZWdUMCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpKTsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKworICAg
IGNvbnN0IFJlZ2lzdGVySUQgdmFsdWUgPSByZWdUMDsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWVUYWcgPSByZWdUMTsKKyNlbmRpZgorICAgIGNvbnN0
IFJlZ2lzdGVySUQgc2NvcGUgPSByZWdUMjsKKyAgICBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2gg
PSByZWdUMzsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgUmVzb2x2ZU9wZXJhdGlvbiogcGMgPSByZXNvbHZlT3Bl
cmF0aW9ucy0+ZGF0YSgpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4sIHNjb3BlKTsKKyAgICBib29sIHNldEJhc2UgPSBmYWxzZTsKKyAgICBi
b29sIHJlc29sdmluZ0Jhc2UgPSB0cnVlOworICAgIHdoaWxlIChyZXNvbHZpbmdCYXNlKSB7Cisg
ICAgICAgIHN3aXRjaCAocGMtPm1fb3BlcmF0aW9uKSB7CisgICAgICAgIGNhc2UgUmVzb2x2ZVJl
dHVybkdsb2JhbE9iamVjdEFzQmFzZToKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
bG9iYWxPYmplY3QpLCB2YWx1ZSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1ZVRhZyk7CisjZW5kaWYK
KyAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICAgICAgICAgIGVtaXRT
dG9yZUNlbGwoKmJhc2VWUiwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIFJlc29sdmVTZXRCYXNlVG9HbG9iYWw6CisgICAgICAgICAgICBBU1NFUlQoYmFzZVZSKTsK
KyAgICAgICAgICAgIHNldEJhc2UgPSB0cnVlOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdsb2JhbE9iamVjdCksIHNjcmF0Y2gpOworICAgICAgICAgICAgZW1pdFN0b3JlQ2VsbCgq
YmFzZVZSLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHJlc29sdmluZ0Jhc2UgPSBmYWxzZTsKKyAg
ICAgICAgICAgICsrcGM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXNvbHZl
U2V0QmFzZVRvVW5kZWZpbmVkOiB7CisgICAgICAgICAgICBBU1NFUlQoYmFzZVZSKTsKKyAgICAg
ICAgICAgIHNldEJhc2UgPSB0cnVlOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSkpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKCpiYXNlVlIsIHNjcmF0Y2gpOworI2Vsc2UKKyAgICAgICAgICAgIGVtaXRTdG9yZSgqYmFz
ZVZSLCBqc1VuZGVmaW5lZCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9
IGZhbHNlOworICAgICAgICAgICAgKytwYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgUmVzb2x2ZVNldEJhc2VUb1Njb3BlOgorICAgICAgICAgICAgQVNTRVJU
KGJhc2VWUik7CisgICAgICAgICAgICBzZXRCYXNlID0gdHJ1ZTsKKyAgICAgICAgICAgIGVtaXRT
dG9yZUNlbGwoKmJhc2VWUiwgc2NvcGUpOworICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9IGZh
bHNlOworICAgICAgICAgICAgKytwYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFJlc29sdmVSZXR1cm5TY29wZUFzQmFzZToKKyAgICAgICAgICAgIGVtaXRTdG9yZUNlbGwoKmJh
c2VWUiwgc2NvcGUpOworICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZSk7CisgICAgICAgICAgICBt
b3ZlKHNjb3BlLCB2YWx1ZSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1ZVRhZyk7CisjZW5kaWYKKyAg
ICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBSZXNvbHZlU2tpcFRvcFNjb3BlTm9kZTogeworICAgICAgICAgICAgSnVt
cCBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgcGF5bG9hZEZvciht
X2NvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY29wZSwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBzY29wZSk7CisgICAgICAg
ICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworICAgICAgICAgICAgKytwYzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUmVzb2x2ZUNoZWNr
Rm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9iYWxTY29wZTogeworICAgICAgICAgICAgbW92ZShz
Y29wZSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIEp1bXAgYXRUb3BPZlNjb3Bl
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSk7CisgICAgICAgICAgICBMYWJlbCBsb29wU3Rh
cnQgPSBsYWJlbCgpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICAgICAgSnVtcCBpc0FjdGl2YXRp
b24gPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+
YWN0aXZhdGlvblN0cnVjdHVyZSgpKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hQ
dHIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+bmFtZVNjb3Bl
U3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICBpc0FjdGl2YXRpb24ubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBi
cmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QxLCBsb29wU3RhcnQpOworICAgICAgICAgICAgYXRU
b3BPZlNjb3BlLmxpbmsodGhpcyk7CisgICAgICAgICAgICArK3BjOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBSZXNvbHZlU2tpcFNjb3BlczogeworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYy0+bV9zY29wZXNUb1NraXA7IGkrKykKKyAgICAg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgp
KSwgc2NvcGUpOworICAgICAgICAgICAgKytwYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgUmVzb2x2ZUZhaWw6CisgICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmVzb2x2aW5nQmFzZSA9IGZhbHNlOworICAgICAgICB9CiAgICAgfQotICAgIGVtaXRfb3Bf
cmVzb2x2ZV9nbG9iYWwoY3VycmVudEluc3RydWN0aW9uLCB0cnVlKTsKKyAgICBpZiAoYmFzZVZS
ICYmICFzZXRCYXNlKQorICAgICAgICBlbWl0U3RvcmVDZWxsKCpiYXNlVlIsIHNjb3BlKTsKKwor
ICAgIEFTU0VSVCh2YWx1ZVZSKTsKKyAgICBSZXNvbHZlT3BlcmF0aW9uKiByZXNvbHZlVmFsdWVP
cGVyYXRpb24gPSBwYzsKKyAgICBzd2l0Y2ggKHJlc29sdmVWYWx1ZU9wZXJhdGlvbi0+bV9vcGVy
YXRpb24pIHsKKyAgICBjYXNlIFJlc29sdmVHZXRBbmRSZXR1cm5HbG9iYWxQcm9wZXJ0eTogewor
ICAgICAgICAvLyBWZXJpZnkgc3RydWN0dXJlLgorICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0KSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVzb2x2
ZVZhbHVlT3BlcmF0aW9uKSwgcmVnVDMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMs
IE9CSkVDVF9PRkZTRVRPRihSZXNvbHZlT3BlcmF0aW9uLCBtX3N0cnVjdHVyZSkpLCByZWdUMSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gTG9hZCBw
cm9wZXJ0eS4KKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihS
ZXNvbHZlT3BlcmF0aW9uLCBtX29mZnNldCkpLCByZWdUMyk7CisKKyAgICAgICAgLy8gcmVnVDI6
IEdsb2JhbE9iamVjdAorICAgICAgICAvLyByZWdUMzogb2Zmc2V0CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMiwgdmFsdWVUYWcsIHZh
bHVlLCByZWdUMywgS25vd25Ob3RGaW5hbCk7CisjZWxzZQorICAgICAgICBjb21waWxlR2V0RGly
ZWN0T2Zmc2V0KHJlZ1QyLCB2YWx1ZSwgcmVnVDMsIHJlZ1QxLCBLbm93bk5vdEZpbmFsKTsKKyNl
bmRpZgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBSZXNvbHZlR2V0QW5kUmV0dXJu
R2xvYmFsVmFyV2F0Y2hhYmxlOgorICAgIGNhc2UgUmVzb2x2ZUdldEFuZFJldHVybkdsb2JhbFZh
cjogeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGxvYWRQdHIocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4ocGMtPm1fcmVnaXN0ZXJBZGRyZXNzKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpLCB2YWx1ZVRhZyk7CisjZW5kaWYKKyAgICAgICAgbG9hZFB0cihy
ZWludGVycHJldF9jYXN0PGNoYXIqPihwYy0+bV9yZWdpc3RlckFkZHJlc3MpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpLCB2YWx1ZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFJlc29sdmVHZXRBbmRSZXR1cm5TY29wZWRWYXI6IHsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lz
dGVycygpKSwgc2NvcGUpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY29wZSwgcGMtPm1fb2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgdmFsdWVUYWcpOworI2VuZGlmCisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgcGMtPm1fb2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVy
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZhbHVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVtaXRT
dG9yZSgqdmFsdWVWUiwgdmFsdWVUYWcsIHZhbHVlKTsKKyNlbHNlCisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcigqdmFsdWVWUiwgdmFsdWUpOworI2VuZGlmCisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZSgpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWxfZHlu
YW1pYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X2xpbmtfcmVzb2x2ZV9vcGVy
YXRpb25zKFJlc29sdmVPcGVyYXRpb25zKiByZXNvbHZlT3BlcmF0aW9ucywgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIElkZW50aWZpZXIqIGlkZW50ID0gJm1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAg
IGludCBza2lwID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKLSAgICB3aGlsZSAo
c2tpcC0tKQorICAgIGlmIChyZXNvbHZlT3BlcmF0aW9ucy0+aXNFbXB0eSgpKSB7CiAgICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBKSVRTdHViQ2FsbCByZXNvbHZlU3R1YkNhbGwodGhp
cywgY3RpX29wX3Jlc29sdmUpOwotICAgIHJlc29sdmVTdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tUHRyKGlkZW50KSk7Ci0gICAgcmVzb2x2ZVN0dWJDYWxsLmNhbGwoZHN0KTsKLSAgICBl
bWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV9nbG9iYWxf
ZHluYW1pYykpOwotICAgIAotICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IG1fZ2xvYmFsUmVz
b2x2ZUluZm9JbmRleCsrOwotICAgIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gV2UgbWFu
YWdlZCB0byBza2lwIGFsbCB0aGUgbm9kZXMgaW4gdGhlIHNjb3BlIGNoYWluLCBidXQgdGhlIGNh
Y2hlIG1pc3NlZC4KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2
ZV9nbG9iYWwpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoaWRlbnQp
KTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluZGV4KSk7
Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgIHN0dWJDYWxsLmNhbGxXaXRo
VmFsdWVQcm9maWxpbmcoZHN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc29s
dmVPcGVyYXRpb24qIHBjID0gcmVzb2x2ZU9wZXJhdGlvbnMtPmRhdGEoKTsKKyAgICBib29sIHJl
c29sdmluZ0Jhc2UgPSB0cnVlOworICAgIHdoaWxlIChyZXNvbHZpbmdCYXNlKSB7CisgICAgICAg
IHN3aXRjaCAocGMtPm1fb3BlcmF0aW9uKSB7CisgICAgICAgIGNhc2UgUmVzb2x2ZVJldHVybkds
b2JhbE9iamVjdEFzQmFzZToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBSZXNv
bHZlU2V0QmFzZVRvR2xvYmFsOgorICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9IGZhbHNlOwor
ICAgICAgICAgICAgKytwYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlc29s
dmVTZXRCYXNlVG9VbmRlZmluZWQ6IHsKKyAgICAgICAgICAgIHJlc29sdmluZ0Jhc2UgPSBmYWxz
ZTsKKyAgICAgICAgICAgICsrcGM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFJlc29sdmVTZXRCYXNlVG9TY29wZToKKyAgICAgICAgICAgIHJlc29sdmluZ0Jh
c2UgPSBmYWxzZTsKKyAgICAgICAgICAgICsrcGM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBSZXNvbHZlUmV0dXJuU2NvcGVBc0Jhc2U6CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgUmVzb2x2ZVNraXBUb3BTY29wZU5vZGU6IHsKKyAgICAgICAgICAgICsrcGM7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFJlc29sdmVTa2lw
U2NvcGVzOgorICAgICAgICAgICAgKytwYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFJlc29sdmVGYWlsOgorICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFJlc29sdmVDaGVja0ZvckR5bmFtaWNFbnRyaWVz
QmVmb3JlR2xvYmFsU2NvcGU6IHsKKyAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAg
ICAgICAgICAgICsrcGM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIFJlc29sdmVPcGVyYXRpb24qIHJlc29sdmVWYWx1ZU9wZXJhdGlvbiA9IHBjOwor
ICAgIHN3aXRjaCAocmVzb2x2ZVZhbHVlT3BlcmF0aW9uLT5tX29wZXJhdGlvbikgeworICAgIGNh
c2UgUmVzb2x2ZUdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5OiB7CisgICAgICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUmVzb2x2ZUdldEFu
ZFJldHVybkdsb2JhbFZhcldhdGNoYWJsZToKKyAgICBjYXNlIFJlc29sdmVHZXRBbmRSZXR1cm5H
bG9iYWxWYXI6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVzb2x2ZUdldEFuZFJldHVyblNj
b3BlZFZhcjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIFJlc29sdmVPcGVyYXRpb25z
KiBvcGVyYXRpb25zID0gbV9jb2RlQmxvY2stPnJlc29sdmVPcGVyYXRpb25zKGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGVtaXRfcmVzb2x2ZV9vcGVyYXRpb25zKG9wZXJhdGlvbnMsIDAs
ICZkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQoreworICAgIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zID0gbV9jb2RlQmxvY2stPnJl
c29sdmVPcGVyYXRpb25zKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIGVt
aXRTbG93X2xpbmtfcmVzb2x2ZV9vcGVyYXRpb25zKG9wZXJhdGlvbnMsIGl0ZXIpOworICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlKTsKKyAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPnJlc29sdmVPcGVyYXRpb25zKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpKSk7CisgICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGlu
ZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9iYXNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
UmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBtX2NvZGVCbG9jay0+cmVzb2x2ZU9wZXJh
dGlvbnMoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgZW1pdF9yZXNvbHZlX29wZXJhdGlv
bnMob3BlcmF0aW9ucywgJmRzdCwgMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9yZXNv
bHZlX2Jhc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0
aW9ucyA9IG1fY29kZUJsb2NrLT5yZXNvbHZlT3BlcmF0aW9ucyhjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kKTsKKyAgICBlbWl0U2xvd19saW5rX3Jlc29sdmVfb3BlcmF0aW9ucyhvcGVy
YXRpb25zLCBpdGVyKTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kID8gY3RpX29wX3Jlc29sdmVfYmFzZV9zdHJpY3RfcHV0IDog
Y3RpX29wX3Jlc29sdmVfYmFzZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCkpKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5yZXNvbHZlT3BlcmF0aW9ucyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkp
OworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPnB1
dFRvQmFzZU9wZXJhdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSkpOworICAg
IHN0dWJDYWxsLmNhbGxXaXRoVmFsdWVQcm9maWxpbmcoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfd2l0aF9iYXNlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9w
ZXJhdGlvbnMgPSBtX2NvZGVCbG9jay0+cmVzb2x2ZU9wZXJhdGlvbnMoY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCk7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgZW1pdF9yZXNvbHZlX29wZXJhdGlvbnMob3BlcmF0aW9ucywgJmJhc2UsICZ2YWx1
ZSk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9yZXNvbHZlX3dpdGhfYmFzZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQoreworICAgIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zID0gbV9jb2RlQmxv
Y2stPnJlc29sdmVPcGVyYXRpb25zKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwor
ICAgIGVtaXRTbG93X2xpbmtfcmVzb2x2ZV9vcGVyYXRpb25zKG9wZXJhdGlvbnMsIGl0ZXIpOwor
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlX3dpdGhfYmFzZSk7
CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKTsKKyAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
PnJlc29sdmVPcGVyYXRpb25zKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKSk7Cisg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+cHV0VG9C
YXNlT3BlcmF0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpKSk7CisgICAgc3R1
YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV93aXRoX3RoaXMoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0
aW9ucyA9IG1fY29kZUJsb2NrLT5yZXNvbHZlT3BlcmF0aW9ucyhjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kKTsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICBlbWl0X3Jlc29sdmVfb3BlcmF0aW9ucyhvcGVyYXRpb25zLCAmYmFzZSwgJnZhbHVlKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfd2l0aF90aGlzKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit7CisgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBtX2NvZGVCbG9jay0+
cmVzb2x2ZU9wZXJhdGlvbnMoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAg
ZW1pdFNsb3dfbGlua19yZXNvbHZlX29wZXJhdGlvbnMob3BlcmF0aW9ucywgaXRlcik7CisgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVfd2l0aF90aGlzKTsKKyAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOworICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7
CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+cmVz
b2x2ZU9wZXJhdGlvbnMoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpKTsKKyAgICBz
dHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX2Jhc2UoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgaW50IGlkID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQg
dmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGludCBvcGVyYXRp
b24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworCisgICAgUHV0VG9CYXNlT3Bl
cmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb24gPSBtX2NvZGVCbG9jay0+cHV0VG9CYXNlT3BlcmF0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgIHN3aXRjaCAocHV0VG9C
YXNlT3BlcmF0aW9uLT5tX2tpbmQpIHsKKyAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6VmFy
aWFibGVQdXQ6CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9u
OjpHbG9iYWxWYXJpYWJsZVB1dDoKKyAgICAgICAgaWYgKCFwdXRUb0Jhc2VPcGVyYXRpb24tPm1f
aXNEeW5hbWljKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlVuaW5p
dGlhbGlzZWQ6CisgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlJlYWRvbmx5OgorICAgIGNh
c2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHZW5lcmljOgorICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsVmFyaWFibGVQdXRDaGVja2VkOgorICAgIGNh
c2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxQcm9wZXJ0eVB1dDoKKyAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOworICAgICAgICBicmVhazsKKworICAgIH0KKworICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRfdG9fYmFzZSk7CisKKyAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChUcnVzdGVkSW1tMzIoYmFzZSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkKSkpOworICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMih2YWx1ZSkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPnB1dFRvQmFzZU9wZXJhdGlvbihvcGVyYXRp
b24pKSk7CisgICAgc3R1YkNhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
cmVnZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggZGI1MzY1NTM1Mjc1NzU5YWE1
NTdkYWZkNzk2ODE3OTA5NGNkMTExMS4uNDQxMjNiZTE5ODE3OWUxYjc2Yjc1MTI4MjRkM2E4Yzkz
ZjBlZTk0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiSlNWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC03MTgsMTMgKzcxOSw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RlYXJfb2Zm
X2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFyZ3NOb3RD
cmVhdGVkLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfcmVzb2x2ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRp
dmUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKQEAgLTc2MCwxMyArNzU0LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3RyY2F0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
c3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9iYXNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCA/IGN0aV9vcF9yZXNvbHZlX2Jhc2Vfc3RyaWN0X3B1dCA6IGN0aV9vcF9y
ZXNvbHZlX2Jhc2UpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoJm1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7
Ci0gICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZW5zdXJlX3Byb3BlcnR5X2V4
aXN0cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9lbnN1cmVfcHJvcGVydHlfZXhpc3RzKTsKQEAgLTc3NSw1
MyArNzYyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2tpcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlX3NraXApOwotICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3Rl
ZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5j
YWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBib29sIGR5bmFtaWMpCi17Ci0gICAgLy8gRklYTUU6IE9wdGltaXplIHRv
IHVzZSBwYXRjaGluZyBpbnN0ZWFkIG9mIHNvIG1hbnkgbWVtb3J5IGFjY2Vzc2VzLgotCi0gICAg
dW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB2b2lk
KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0KLSAgICB1bnNp
Z25lZCBjdXJyZW50SW5kZXggPSBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXgrKzsKLSAgICBHbG9i
YWxSZXNvbHZlSW5mbyogcmVzb2x2ZUluZm9BZGRyZXNzID0gJm1fY29kZUJsb2NrLT5nbG9iYWxS
ZXNvbHZlSW5mbyhjdXJyZW50SW5kZXgpOwotCi0KLSAgICAvLyBWZXJpZnkgc3RydWN0dXJlLgot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKHJlc29sdmVJbmZvQWRkcmVzcyksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgc3RydWN0dXJl
KSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSkpOwotCi0gICAgLy8gTG9h
ZCBwcm9wZXJ0eS4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEds
b2JhbFJlc29sdmVJbmZvLCBvZmZzZXQpKSwgcmVnVDMpOwotICAgIGNvbXBpbGVHZXREaXJlY3RP
ZmZzZXQocmVnVDIsIHJlZ1QxLCByZWdUMCwgcmVnVDMsIEtub3duTm90RmluYWwpOwotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDAp
OwotICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgKGR5bmFtaWMgPyBPUENPREVfTEVOR1RIKG9w
X3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMpIDogT1BDT0RFX0xFTkdUSChvcF9yZXNvbHZlX2dsb2Jh
bCkpLCBkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9yZXNv
bHZlX2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgSWRlbnRpZmllciogaWRlbnQgPSAmbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0KLSAg
ICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXgrKzsKLQot
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfcmVzb2x2ZV9nbG9iYWwpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJ
bW1QdHIoaWRlbnQpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3Vy
cmVudEluZGV4KSk7Ci0gICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhkc3QpOwot
fQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwpAQCAtMTIxNCwyMiArMTE1NCw2IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1Qx
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV93aXRoX2Jhc2UoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0
ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVl
UHJvZmlsaW5nKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3dpdGhfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlX3dp
dGhfdGhpcyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFsdWVQcm9maWxpbmcoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3Rocm93
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgdW5zaWduZWQgZXhjZXB0
aW9uID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKQEAgLTE2ODYsNiArMTYxMCw3
MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFsdWVQ
cm9maWxpbmcoZHN0KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2Jhc2UoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGlkID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworCisgICAgUHV0VG9CYXNlT3BlcmF0aW9uKiBvcGVyYXRpb24gPSBtX2NvZGVCbG9jay0+
cHV0VG9CYXNlT3BlcmF0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworCisK
KyAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+bV9raW5kKSB7CisgICAgY2FzZSBQdXRUb0Jhc2VPcGVy
YXRpb246Okdsb2JhbFZhcmlhYmxlUHV0Q2hlY2tlZDoKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKG9wZXJhdGlvbi0+bV9wcmVkaWNhdGVQ
b2ludGVyKSkpOworICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxWYXJpYWJsZVB1
dDogeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICBpZiAob3BlcmF0aW9uLT5tX2lzRHluYW1pYykKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcGF5bG9hZEZvcihiYXNl
KSwgVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpKSk7CisKKyAgICAgICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QwLCByZWludGVycHJldF9j
YXN0PGNoYXIqPihvcGVyYXRpb24tPm1fcmVnaXN0ZXJBZGRyZXNzKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihvcGVyYXRpb24tPm1fcmVnaXN0ZXJBZGRyZXNzKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKTsKKyAgICAgICAgaWYgKEhlYXA6
OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKQorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihn
bG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVC
YXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7CisgICAgICAgIGxvYWRQdHIocGF5
bG9hZEZvcihiYXNlKSwgcmVnVDMpOworICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU1ZhcmlhYmxlT2JqZWN0Ojpv
ZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QyLCBvcGVyYXRpb24tPm1fb2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdG9yZTMy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBvcGVyYXRpb24tPm1fb2Zmc2V0ICogc2l6ZW9mKFJlZ2lz
dGVyKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAg
IGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKKyAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIocmVnVDMsIHJlZ1QxLCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0
ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFByb3BlcnR5UHV0OiB7Cisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcihiYXNlKSwgcmVnVDMpOworICAg
ICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cigmb3Bl
cmF0aW9uLT5tX3N0cnVjdHVyZSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBy
ZWdUMikpOworICAgICAgICBBU1NFUlQoIW9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUgfHwgIW9wZXJh
dGlvbi0+bV9zdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAg
ICAgbG9hZDMyKCZvcGVyYXRpb24tPm1fb2Zmc2V0SW5CdXR0ZXJmbHksIHJlZ1QzKTsKKyAgICAg
ICAgc3RvcmVQdHIocmVnVDAsIEJhc2VJbmRleChyZWdUMiwgcmVnVDMsIFRpbWVzRWlnaHQsIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdG9y
ZVB0cihyZWdUMSwgQmFzZUluZGV4KHJlZ1QyLCByZWdUMywgVGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgaWYgKEhlYXA6OmlzV3Jp
dGVCYXJyaWVyRW5hYmxlZCgpKQorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxP
YmplY3QsIHJlZ1QxLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVy
Rm9yVmFyaWFibGVBY2Nlc3MpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFB1
dFRvQmFzZU9wZXJhdGlvbjo6VW5pbml0aWFsaXNlZDoKKyAgICBjYXNlIFB1dFRvQmFzZU9wZXJh
dGlvbjo6UmVhZG9ubHk6CisgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OkdlbmVyaWM6Cisg
ICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRfdG9fYmFzZSk7CisK
KyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGJhc2UpKTsKKyAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoaWQpKSk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMih2
YWx1ZSkpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKG9wZXJh
dGlvbikpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRl
eCA5ZGVkZWQ2MmE2Y2IzZjkxZWI0M2I1YzM0YmU4ODU2Zjg0NTQxNDMxLi4wNmY2ZWZhYWU4ZThi
ODQ0OTQyMDBlNGUwMWI5ZDkzNmY5MmMzNGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMTE5MCw5MCArMTE5MCwzNSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBTdHJ1Y3R1cmUqIHN0cgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5j
dGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xp
c3QpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlZF92YXIoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0
YWNrOjpTY29wZUNoYWluLCByZWdUMCk7Ci0gICAgYm9vbCBjaGVja1RvcExldmVsID0gbV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJsb2NrLT5uZWVkc0Z1
bGxTY29wZUNoYWluKCk7Ci0gICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAg
IGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgewotICAgICAgICBKdW1wIGFjdGl2YXRpb25O
b3RDcmVhdGVkOwotICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKLSAgICAgICAgICAgIGFjdGl2
YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCBhZGRyZXNzRm9yKG1fY29kZUJs
b2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICBhY3RpdmF0aW9u
Tm90Q3JlYXRlZC5saW5rKHRoaXMpOwotICAgIH0KLSAgICB3aGlsZSAoc2tpcC0tKQotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRP
ZlJlZ2lzdGVycygpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3B1dF9zY29wZWRfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
aW50IHNraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMCk7
Ci0KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWlu
LCByZWdUMSk7Ci0gICAgYm9vbCBjaGVja1RvcExldmVsID0gbV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7
Ci0gICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAgIGlmIChjaGVja1RvcExl
dmVsICYmIHNraXAtLSkgewotICAgICAgICBKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOwotICAg
ICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKLSAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVk
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBhZGRyZXNzRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9u
UmVnaXN0ZXIoKSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTU2NvcGU6Om9m
ZnNldE9mTmV4dCgpKSwgcmVnVDEpOwotICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5r
KHRoaXMpOwotICAgIH0KLSAgICB3aGlsZSAoc2tpcC0tKQotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDEpOwotCi0gICAgZW1pdFdy
aXRlQmFycmllcihyZWdUMSwgcmVnVDAsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRp
YXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwotCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDEp
OwotICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGxvYWRQdHIoY3VycmVudEluc3RydWN0aW9uWzJdLnUucmVnaXN0ZXJQb2ludGVyLCByZWdUMCk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lk
IEpJVDo6ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAgICAKKwogICAgIHN0b3JlUHRyKHJl
Z1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwogICAgIGlmIChI
ZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKICAgICAgICAgZW1pdFdyaXRlQmFycmllcihn
bG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVC
YXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2xv
YmFsX3Zhcl9jaGVjayhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6
OmVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2soSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAgICAKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5wcmVk
aWNhdGVQb2ludGVyKSkpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICAKKwogICAgIHN0b3JlUHRyKHJlZ1QwLCBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwogICAgIGlmIChIZWFwOjpp
c1dyaXRlQmFycmllckVuYWJsZWQoKSkKICAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxP
YmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVy
Rm9yVmFyaWFibGVBY2Nlc3MpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2dsb2Jh
bF92YXJfY2hlY2soSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbml0X2ds
b2JhbF9jb25zdF9jaGVjayhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKLSAgICAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHV0X2dsb2Jh
bF92YXJfY2hlY2spOworCisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2lu
aXRfZ2xvYmFsX2NvbnN0X2NoZWNrKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7
CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQpKTsKICAgICBzdHViQ2FsbC5jYWxsKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCBlN2M0
YTQ3OWI4NWJhZTllNGNmNzRhOWRiZDI4Y2ZhYWE4OGU0YTY3Li45OWUxNTlmZDA2NDIxYzk1OTQy
NmQxZDVjNzllYWRhYmVlYTEzYzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTEyMzIsNzIgKzEyMzIsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93QwogICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlZF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGlu
dCBza2lwID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJlZ1QyKTsKLSAgICBi
b29sIGNoZWNrVG9wTGV2ZWwgPSBtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAgICBBU1NFUlQoc2tp
cCB8fCAhY2hlY2tUb3BMZXZlbCk7Ci0gICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7
Ci0gICAgICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQ7Ci0gICAgICAgIGlmIChjaGVja1Rv
cExldmVsKQotICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVh
bCwgdGFnRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMik7Ci0gICAgICAgIGFjdGl2YXRpb25O
b3RDcmVhdGVkLmxpbmsodGhpcyk7Ci0gICAgfQotICAgIHdoaWxlIChza2lwLS0pCi0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMik7
Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9m
UmVnaXN0ZXJzKCkpLCByZWdUMik7Ci0KLSAgICBlbWl0TG9hZChpbmRleCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMik7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRTdG9yZShk
c3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVO
R1RIKG9wX2dldF9zY29wZWRfdmFyKSwgZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHNraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCB2
YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJlZ1QyKTsKLSAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBt
X2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BMZXZlbCk7
Ci0gICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgIEp1bXAgYWN0aXZh
dGlvbk5vdENyZWF0ZWQ7Ci0gICAgICAgIGlmIChjaGVja1RvcExldmVsKQotICAgICAgICAgICAg
YWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwgdGFnRm9yKG1fY29kZUJsb2Nr
LT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZWdUMik7Ci0gICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsodGhpcyk7
Ci0gICAgfQotICAgIHdoaWxlIChza2lwLS0pCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMik7Ci0KLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMyk7
Ci0gICAgZW1pdFN0b3JlKGluZGV4LCByZWdUMSwgcmVnVDAsIHJlZ1QzKTsKLSAgICBlbWl0V3Jp
dGVCYXJyaWVyKHJlZ1QyLCByZWdUMSwgcmVnVDAsIHJlZ1QxLCBTaG91bGRGaWx0ZXJJbW1lZGlh
dGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5yZWdpc3RlclBvaW50ZXI7Ci0KLSAgICBsb2FkMzIocmVnaXN0ZXJQb2ludGVyLT50YWdQb2lu
dGVyKCksIHJlZ1QxKTsKLSAgICBsb2FkMzIocmVnaXN0ZXJQb2ludGVyLT5wYXlsb2FkUG9pbnRl
cigpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRTdG9y
ZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVf
TEVOR1RIKG9wX2dldF9nbG9iYWxfdmFyKSwgZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3QoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVy
UG9pbnRlciA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lzdGVyUG9pbnRlcjsKICAgICBp
bnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwpAQCAtMTMxNCwxMCAr
MTI0OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogCiAgICAgc3RvcmUzMihyZWdUMSwgcmVnaXN0ZXJQb2ludGVy
LT50YWdQb2ludGVyKCkpOwogICAgIHN0b3JlMzIocmVnVDAsIHJlZ2lzdGVyUG9pbnRlci0+cGF5
bG9hZFBvaW50ZXIoKSk7Ci0gICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RI
KG9wX3B1dF9nbG9iYWxfdmFyKSwgdmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgbWFwKG1fYnl0
ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2luaXRfZ2xvYmFsX2NvbnN0KSwgdmFsdWUs
IHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyX2No
ZWNrKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9p
bml0X2dsb2JhbF9jb25zdF9jaGVjayhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyOwogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CkBAIC0xMzM4LDExICsxMjczLDExIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgdW5tYXAoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9nbG9i
YWxfdmFyX2NoZWNrKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5pdF9n
bG9iYWxfY29uc3RfY2hlY2soSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CiAgICAgCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF9nbG9i
YWxfdmFyX2NoZWNrKTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfaW5p
dF9nbG9iYWxfY29uc3RfY2hlY2spOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxLCBy
ZWdUMCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKICAgICBzdHViQ2FsbC5jYWxsKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCmluZGV4IDFhMmM2NTRiY2Q1MjViZDhjN2M3MzIyNzhm
OTdjNGM0YTI2NGY2NDMuLjhlYTk0NTNiM2MxZTIzM2VmNjFiY2Y0ODIyZTgwNmY1Njc5ZmIwNmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC0yMzY3LDcgKzIzNjcs
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19hcnJheV9idWZmZXIp
CiAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0Zy
YW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVyKHN0YWNrRnJhbWUuYXJn
c1swXS5pbnQzMigpKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCkpOwogfQogCi1ERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjaykKK0RFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQsIG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKQogewogICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKICAgICAKQEAgLTIzODIsMTEgKzIzODIsMjIg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX3Jlc29sdmUpCiAKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0gICAgSlNW
YWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdz
WzBdLmlkZW50aWZpZXIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZl
KGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5h
cmdzWzFdLnJlc29sdmVPcGVyYXRpb25zKCkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRf
RU5EKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCitERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfdG9fYmFzZSkKK3sKKyAgICBTVFVCX0lOSVRfU1RB
Q0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNr
RnJhbWUuY2FsbEZyYW1lOworICAgIEpTVmFsdWUgYmFzZSA9IGNhbGxGcmFtZS0+cihzdGFja0Zy
YW1lLmFyZ3NbMF0uaW50MzIoKSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxs
RnJhbWUtPnIoc3RhY2tGcmFtZS5hcmdzWzJdLmludDMyKCkpLmpzVmFsdWUoKTsKKyAgICBKU1Nj
b3BlOjpyZXNvbHZlUHV0KGNhbGxGcmFtZSwgYmFzZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50
aWZpZXIoKSwgdmFsdWUsIHN0YWNrRnJhbWUuYXJnc1szXS5wdXRUb0Jhc2VPcGVyYXRpb24oKSk7
CisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKK30KKwogREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCkKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0yNzExLDE0ICsyNzIyLDE0
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9yZXNvbHZlX2Jhc2Up
CiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlQmFzZShzdGFja0ZyYW1lLmNhbGxGcmFt
ZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVCYXNlKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBmYWxzZSwgc3RhY2tGcmFtZS5hcmdz
WzFdLnJlc29sdmVPcGVyYXRpb25zKCksIHN0YWNrRnJhbWUuYXJnc1syXS5wdXRUb0Jhc2VPcGVy
YXRpb24oKSkpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3Bf
cmVzb2x2ZV9iYXNlX3N0cmljdF9wdXQpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOwogCi0gICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUJh
c2Uoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCks
IHRydWUpKQorICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVCYXNlKHN0
YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCB0cnVl
LCBzdGFja0ZyYW1lLmFyZ3NbMV0ucmVzb2x2ZU9wZXJhdGlvbnMoKSwgc3RhY2tGcmFtZS5hcmdz
WzJdLnB1dFRvQmFzZU9wZXJhdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQpAQCAtMjczNywzNiArMjc0
OCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9lbnN1cmVfcHJv
cGVydHlfZXhpc3RzKQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlKTsKIH0KLSAg
ICAKLURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9yZXNvbHZlX3NraXAp
Ci17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgSlNWYWx1
ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlU2tpcChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3Rh
Y2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCkp
OwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfcmVzb2x2ZV9nbG9iYWwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFt
ZTsKLSAgICBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVy
KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwot
ICAgIHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbmZvSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
aW50MzIoKTsKLSAgICBHbG9iYWxSZXNvbHZlSW5mbyYgZ2xvYmFsUmVzb2x2ZUluZm8gPSBjb2Rl
QmxvY2stPmdsb2JhbFJlc29sdmVJbmZvKGdsb2JhbFJlc29sdmVJbmZvSW5kZXgpOwotCi0gICAg
SlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKAotICAgICAgICBjYWxsRnJh
bWUsCi0gICAgICAgIGlkZW50LAotICAgICAgICBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwKLSAgICAgICAgJmdsb2JhbFJlc29sdmVJbmZvLnN0cnVjdHVyZSwKLSAgICAgICAgJmds
b2JhbFJlc29sdmVJbmZvLm9mZnNldAotICAgICk7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KIAogREVGSU5FX1NUVUJf
RlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2RpdikKIHsKQEAgLTMwNDcsNyArMzAyOCw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9yZXNvbHZlX3dpdGhfYmFz
ZSkKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKICAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNlKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBd
LmlkZW50aWZpZXIoKSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzFd
LmludDMyKCldKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoQmFz
ZShjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksICZjYWxsRnJhbWUt
PnJlZ2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpXSwgc3RhY2tGcmFtZS5hcmdz
WzJdLnJlc29sdmVPcGVyYXRpb25zKCksIHN0YWNrRnJhbWUuYXJnc1szXS5wdXRUb0Jhc2VPcGVy
YXRpb24oKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0zMDU3LDcgKzMwMzgsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfcmVzb2x2ZV93aXRoX3RoaXMpCiAgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2Nv
cGU6OnJlc29sdmVXaXRoVGhpcyhjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlm
aWVyKCksICZjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigp
XSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlV2l0aFRoaXMoY2FsbEZy
YW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCAmY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKVtzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKV0sIHN0YWNrRnJhbWUuYXJnc1syXS5yZXNv
bHZlT3BlcmF0aW9ucygpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaAppbmRleCBlY2Y0MTVkMWYwMTc1NDdmYjBiOTJlMGYwZTY0ZjE5MDc4MjdmMTk4
Li5lZjljODcyYTIwYTBiMzM1MWNmODgxYTIyNDk4Y2I4OWJiMjEyNWUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiTG93TGV2
ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiUmVzb2x2ZU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTgy
LDYgKzgzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTU3RyaW5nKiBqc1N0cmluZygp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oYXNQb2ludGVyKTsgfQogICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZSo+KGFz
UG9pbnRlcik7IH0KICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKCkgeyBy
ZXR1cm4gUmV0dXJuQWRkcmVzc1B0cihhc1BvaW50ZXIpOyB9CisgICAgICAgIFJlc29sdmVPcGVy
YXRpb25zKiByZXNvbHZlT3BlcmF0aW9ucygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlc29sdmVP
cGVyYXRpb25zKj4oYXNQb2ludGVyKTsgfQorICAgICAgICBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1
dFRvQmFzZU9wZXJhdGlvbigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFB1dFRvQmFzZU9wZXJhdGlv
bio+KGFzUG9pbnRlcik7IH0KICAgICB9OwogICAgIAogICAgIHN0cnVjdCBUcmFtcG9saW5lU3Ry
dWN0dXJlIHsKQEAgLTM5OCwxMSArNDAxLDkgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpT
VmFsdWUgSklUX1NUVUIgY3RpX29wX3Jlc29sdmVfYmFzZShTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfcmVzb2x2
ZV9iYXNlX3N0cmljdF9wdXQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHMo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci0gICAgRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX3Jlc29sdmVfZ2xvYmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOwotICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX2ds
b2JhbF9keW5hbWljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotICAgIEVu
Y29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX3NraXAoU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29w
X3Jlc29sdmVfd2l0aF9iYXNlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwog
ICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX3dpdGhfdGhpcyhTVFVC
X0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9v
cF9wdXRfdG9fYmFzZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBF
bmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfcnNoaWZ0KFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9zdHJj
YXQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFs
dWUgSklUX1NUVUIgY3RpX29wX3N0cmljdGVxKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwpAQCAtNDQ5LDcgKzQ1MCw3IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NU
VUIgY3RpX29wX3B1dF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9n
ZXR0ZXJfc2V0dGVyKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotICAgIHZv
aWQgSklUX1NUVUIgY3RpX29wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2luaXRfZ2xvYmFs
X2NvbnN0X2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZv
aWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYXJn
dW1lbnRzKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklU
X1NUVUIgY3RpX29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcihTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCmluZGV4IDVhOWI0MWRhNzQ3MTRjNmVhNmVjOWI3ZDk2NDZjMDNkYjhlNDhkOTQu
LjgzZTkyNjFlMDFkMmIyZDZiNjdlOGFiOWNkMTk0ZjVjMmUwYzZmMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMTE4LDEyICsxMTgs
MjAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgICAgIEpTVmFsdWUg
X19ycF9yZXR1cm5WYWx1ZSA9ICh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgTExJTlRfT1AoMSkgPSBfX3JwX3JldHVyblZhbHVlOyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIHBjW09QQ09ERV9MRU5HVEgob3Bjb2RlKSAtIDFdLnUucHJv
ZmlsZS0+bV9idWNrZXRzWzBdID0gXAotICAgICAgICAgICAgSlNWYWx1ZTo6ZW5jb2RlKF9fcnBf
cmV0dXJuVmFsdWUpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTExJTlRfUFJPRklMRV9W
QUxVRShvcGNvZGUsIF9fcnBfcmV0dXJuVmFsdWUpOyAgICAgICAgICBcCiAgICAgICAgIExMSU5U
X0VORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IH0gd2hpbGUgKGZhbHNlKQorCisjZGVmaW5lIExMSU5UX1BST0ZJTEVfVkFMVUUob3Bjb2RlLCB2
YWx1ZSkgZG8geyBcCisgICAgICAgIHBjW09QQ09ERV9MRU5HVEgob3Bjb2RlKSAtIDFdLnUucHJv
ZmlsZS0+bV9idWNrZXRzWzBdID0gXAorICAgICAgICBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOyAg
ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwogI2Vsc2UgLy8gRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQogI2RlZmluZSBMTElOVF9SRVRVUk5fUFJPRklMRUQob3Bjb2RlLCB2
YWx1ZSkgTExJTlRfUkVUVVJOKHZhbHVlKQorCisjZGVmaW5lIExMSU5UX1BST0ZJTEVfVkFMVUUo
b3Bjb2RlLCB2YWx1ZSkgZG8geyB9IHdoaWxlIChmYWxzZSkKKwogI2VuZGlmIC8vIEVOQUJMRShW
QUxVRV9QUk9GSUxFUikKIAogI2RlZmluZSBMTElOVF9DQUxMX0VORF9JTVBMKGV4ZWMsIGNhbGxU
YXJnZXQpIExMSU5UX1JFVFVSTl9UV08oKGNhbGxUYXJnZXQpLCAoZXhlYykpCkBAIC03NzAsNTIg
Kzc3OCw4NCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW4pCiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAg
IExMSU5UX1JFVFVSTl9QUk9GSUxFRChvcF9yZXNvbHZlLCBKU1Njb3BlOjpyZXNvbHZlKGV4ZWMs
IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCkpKTsKLX0KKyAg
ICBJZGVudGlmaWVyIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbMl0u
dS5vcGVyYW5kKTsKKyAgICBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5yZXNvbHZlT3BlcmF0aW9ucyhwY1szXS51Lm9wZXJhbmQpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZShleGVjLCBpZGVudCwgb3BlcmF0aW9ucyk7Cisg
ICAgQVNTRVJUKG9wZXJhdGlvbnMtPnNpemUoKSk7CisgICAgQVNTRVJUKG9wZXJhdGlvbnMgPT0g
ZXhlYy0+Y29kZUJsb2NrKCktPnJlc29sdmVPcGVyYXRpb25zKHBjWzNdLnUub3BlcmFuZCkpOwor
ICAgIHN3aXRjaCAob3BlcmF0aW9ucy0+ZGF0YSgpWzBdLm1fb3BlcmF0aW9uKSB7CisgICAgY2Fz
ZSBSZXNvbHZlR2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHk6CisgICAgICAgIHBjWzBdLnUub3Bj
b2RlID0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9yZXNvbHZlX2dsb2JhbF9wcm9wZXJ0eSk7
CisgICAgICAgIGJyZWFrOwogCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2
ZV9za2lwKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgTExJTlRfUkVUVVJOX1BST0ZJTEVE
KAotICAgICAgICBvcF9yZXNvbHZlX3NraXAsCi0gICAgICAgIEpTU2NvcGU6OnJlc29sdmVTa2lw
KAotICAgICAgICAgICAgZXhlYywKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVu
dGlmaWVyKHBjWzJdLnUub3BlcmFuZCksCi0gICAgICAgICAgICBwY1szXS51Lm9wZXJhbmQpKTsK
LX0KKyAgICBjYXNlIFJlc29sdmVHZXRBbmRSZXR1cm5HbG9iYWxWYXI6CisgICAgICAgIHBjWzBd
LnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9yZXNvbHZlX2dsb2JhbF92YXIp
OworICAgICAgICBicmVhazsKIAotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29s
dmVfZ2xvYmFsKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQg
PSBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwotICAgIExM
SU5UX1JFVFVSTl9QUk9GSUxFRChvcF9yZXNvbHZlX2dsb2JhbCwgSlNTY29wZTo6cmVzb2x2ZUds
b2JhbChleGVjLCBpZGVudCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAmcGNbM10udS5z
dHJ1Y3R1cmUsICZwY1s0XS51Lm9wZXJhbmQpKTsKLX0KKyAgICBjYXNlIFJlc29sdmVTa2lwVG9w
U2NvcGVOb2RlOgorICAgICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxp
bnRfb3BfcmVzb2x2ZV9zY29wZWRfdmFyX3dpdGhfdG9wX3Njb3BlX2NoZWNrKTsKKyAgICAgICAg
YnJlYWs7CiAKLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX2dsb2JhbF9k
eW5hbWljKQotewotICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMTIxODU0ODc+IExMSW50
IHJlc29sdmVfZ2xvYmFsX2R5bmFtaWMgZG9lc24ndCBjaGVjayBpbnRlcnZlbmluZyBzY29wZXMg
Zm9yIG1vZGlmaWNhdGlvbgotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSWRlbnRpZmllciYgaWRl
bnQgPSBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwotICAg
IExMSU5UX1JFVFVSTl9QUk9GSUxFRChvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljLCBKU1Njb3Bl
OjpyZXNvbHZlR2xvYmFsKGV4ZWMsIGlkZW50LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
ICZwY1szXS51LnN0cnVjdHVyZSwgJnBjWzRdLnUub3BlcmFuZCkpOworICAgIGNhc2UgUmVzb2x2
ZVNraXBTY29wZXM6CisgICAgICAgIGlmIChvcGVyYXRpb25zLT5kYXRhKClbMF0ubV9zY29wZXNU
b1NraXApCisgICAgICAgICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxp
bnRfb3BfcmVzb2x2ZV9zY29wZWRfdmFyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGNb
MF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3Jlc29sdmVfc2NvcGVkX3Zh
cl9vbl90b3Bfc2NvcGUpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBMTElOVF9SRVRVUk5fUFJPRklMRUQob3BfcmVzb2x2ZSwgcmVz
dWx0KTsKIH0KIAotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfZm9yX3Jl
c29sdmVfZ2xvYmFsX2R5bmFtaWMpCitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X3RvX2Jhc2UpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBMTElOVF9SRVRVUk5fUFJPRklM
RUQob3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYywgSlNTY29wZTo6cmVzb2x2ZShleGVjLCBleGVj
LT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpKSk7CisgICAgUHV0VG9C
YXNlT3BlcmF0aW9uKiBvcGVyYXRpb24gPSBleGVjLT5jb2RlQmxvY2soKS0+cHV0VG9CYXNlT3Bl
cmF0aW9uKHBjWzRdLnUub3BlcmFuZCk7CisgICAgSlNTY29wZTo6cmVzb2x2ZVB1dChleGVjLCBM
TElOVF9PUF9DKDEpLmpzVmFsdWUoKSwgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNb
Ml0udS5vcGVyYW5kKSwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIG9wZXJhdGlvbik7CisgICAg
c3dpdGNoIChvcGVyYXRpb24tPm1fa2luZCkgeworICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9u
OjpWYXJpYWJsZVB1dDoKKyAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2Rl
KGxsaW50X29wX3B1dF90b19iYXNlX3ZhcmlhYmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgTExJTlRfRU5EKCk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX2Jhc2UpCiB7CiAgICAgTExJTlRf
QkVHSU4oKTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVu
dGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7CisgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlv
bnMgPSBleGVjLT5jb2RlQmxvY2soKS0+cmVzb2x2ZU9wZXJhdGlvbnMocGNbNF0udS5vcGVyYW5k
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAocGNbM10udS5vcGVyYW5kKSB7Ci0gICAg
ICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsIGlkZW50
LCB0cnVlKSkKLSAgICAgICAgICAgIExMSU5UX1JFVFVSTihyZXN1bHQpOwotICAgICAgICBMTElO
VF9USFJPVyhnbG9iYWxEYXRhLmV4Y2VwdGlvbik7CisgICAgICAgIHJlc3VsdCA9IEpTU2NvcGU6
OnJlc29sdmVCYXNlKGV4ZWMsIGlkZW50LCB0cnVlLCBvcGVyYXRpb25zLCBleGVjLT5jb2RlQmxv
Y2soKS0+cHV0VG9CYXNlT3BlcmF0aW9uKHBjWzVdLnUub3BlcmFuZCkpOworICAgICAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgICAgIExMSU5UX1RIUk9XKGdsb2JhbERhdGEuZXhjZXB0aW9uKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywg
aWRlbnQsIGZhbHNlLCBvcGVyYXRpb25zLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0VG9CYXNlT3Bl
cmF0aW9uKHBjWzVdLnUub3BlcmFuZCkpOworICAgIEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkp
OworICAgIHN3aXRjaCAob3BlcmF0aW9ucy0+ZGF0YSgpWzBdLm1fb3BlcmF0aW9uKSB7CisgICAg
Y2FzZSBSZXNvbHZlUmV0dXJuR2xvYmFsT2JqZWN0QXNCYXNlOgorICAgICAgICBwY1swXS51Lm9w
Y29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcmVzb2x2ZV9iYXNlX3RvX2dsb2JhbCk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSZXNvbHZlU2tpcFRvcFNjb3BlTm9kZToKKyAg
ICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3Jlc29sdmVf
YmFzZV90b19zY29wZV93aXRoX3RvcF9zY29wZV9jaGVjayk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBSZXNvbHZlU2tpcFNjb3BlczoKKyAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTElu
dDo6Z2V0T3Bjb2RlKGxsaW50X29wX3Jlc29sdmVfYmFzZV90b19zY29wZSk7CisgICAgICAgIGJy
ZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgTExJTlRf
UkVUVVJOX1BST0ZJTEVEKG9wX3Jlc29sdmVfYmFzZSwgSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhl
YywgaWRlbnQsIGZhbHNlKSk7CisgICAgTExJTlRfUFJPRklMRV9WQUxVRShvcF9yZXNvbHZlX2Jh
c2UsIHJlc3VsdCk7CisgICAgTExJTlRfUkVUVVJOKHJlc3VsdCk7CiB9CiAKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9lbnN1cmVfcHJvcGVydHlfZXhpc3RzKQpAQCAtODMyLDI0ICs4
NzIsMjYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Vuc3VyZV9wcm9wZXJ0eV9l
eGlzdHMpCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV93aXRoX2Jhc2Up
CiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJl
c29sdmVXaXRoQmFzZShleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1szXS51
Lm9wZXJhbmQpLCAmTExJTlRfT1AoMSkpOworICAgIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRp
b25zID0gZXhlYy0+Y29kZUJsb2NrKCktPnJlc29sdmVPcGVyYXRpb25zKHBjWzRdLnUub3BlcmFu
ZCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlV2l0aEJhc2UoZXhlYywg
ZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKSwgJkxMSU5UX09Q
KDEpLCBvcGVyYXRpb25zLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0VG9CYXNlT3BlcmF0aW9uKHBj
WzVdLnUub3BlcmFuZCkpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIExMSU5U
X09QKDIpID0gcmVzdWx0OwotICAgIC8vIEZJWE1FOiB0ZWNobmljYWxseSBzaG91bGQgaGF2ZSBw
cm9maWxpbmcsIGJ1dCB3ZSBkb24ndCBkbyBpdCBiZWNhdXNlIHRoZSBERkcgd29uJ3QgdXNlIGl0
LgorICAgIExMSU5UX1BST0ZJTEVfVkFMVUUob3BfcmVzb2x2ZV93aXRoX2Jhc2UsIHJlc3VsdCk7
CiAgICAgTExJTlRfRU5EKCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9y
ZXNvbHZlX3dpdGhfdGhpcykKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5p
ZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCksICZMTElOVF9PUCgxKSk7CisgICAgUmVzb2x2ZU9w
ZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBleGVjLT5jb2RlQmxvY2soKS0+cmVzb2x2ZU9wZXJhdGlv
bnMocGNbNF0udS5vcGVyYW5kKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29s
dmVXaXRoVGhpcyhleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1szXS51Lm9w
ZXJhbmQpLCAmTExJTlRfT1AoMSksIG9wZXJhdGlvbnMpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQ
VElPTigpOwogICAgIExMSU5UX09QKDIpID0gcmVzdWx0OwotICAgIC8vIEZJWE1FOiB0ZWNobmlj
YWxseSBzaG91bGQgaGF2ZSBwcm9maWxpbmcsIGJ1dCB3ZSBkb24ndCBkbyBpdCBiZWNhdXNlIHRo
ZSBERkcgd29uJ3QgdXNlIGl0LgorICAgIExMSU5UX1BST0ZJTEVfVkFMVUUob3BfcmVzb2x2ZV93
aXRoX3RoaXMsIHJlc3VsdCk7CiAgICAgTExJTlRfRU5EKCk7CiB9CiAKLUxMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2xvYmFsX3Zhcl9jaGVjaykKK0xMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9pbml0X2dsb2JhbF9jb25zdF9jaGVjaykKIHsKICAgICBMTElOVF9CRUdJ
TigpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCmluZGV4IDViZmIwY2Nk
ZmEwZTczNGFkNjhkZDRmNWRkNTA3Mjg4ZDg4OGQyNTQuLjA1NDA5YTM4MjA5Y2I2N2IzMTU1ZWJi
MDg4OTIzOWI4ZWUzZGZjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5oCkBAIC0xNTYsMTUgKzE1NiwxMiBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2lzX29iamVjdCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2lzX2Z1bmN0aW9uKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfaW4pOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZl
KTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcmVzb2x2ZV9za2lwKTsK
LUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcmVzb2x2ZV9nbG9iYWwpOwot
TExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX2dsb2JhbF9keW5h
bWljKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcmVzb2x2ZV9mb3Jf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYyk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3B1dF90b19iYXNlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfcmVzb2x2ZV9iYXNlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
ZW5zdXJlX3Byb3BlcnR5X2V4aXN0cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3Jlc29sdmVfd2l0aF9iYXNlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfcmVzb2x2ZV93aXRoX3RoaXMpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayk7CitMTElOVF9TTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKTsKIExMSU5UX1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkKTsKIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfZ2V0X2FyZ3VtZW50c19sZW5ndGgpOwogTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGE5NzFhYmY0ZjYy
YmM2YWIyMzkwYWIyMzFiMDI0ZTM0NzhmMDQxYzAuLjYxYmZmZWM1MzdjMjdkNmUxOTNjMDI2NDM0
ZDdiMDNiZDNmODA5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTU0LDggKzU0LDI4IEBAIGlmIEpTVkFMVUU2NAog
ICAgIGNvbnN0IFBCID0gdDYKICAgICBjb25zdCB0YWdUeXBlTnVtYmVyID0gY3NyMQogICAgIGNv
bnN0IHRhZ01hc2sgPSBjc3IyCisgICAgCisgICAgbWFjcm8gbG9hZGlzRnJvbUluc3RydWN0aW9u
KG9mZnNldCwgZGVzdCkKKyAgICAgICAgbG9hZGlzIG9mZnNldCAqIDhbUEIsIFBDLCA4XSwgZGVz
dAorICAgIGVuZAorICAgIAorICAgIG1hY3JvIGxvYWRwRnJvbUluc3RydWN0aW9uKG9mZnNldCwg
ZGVzdCkKKyAgICAgICAgbG9hZHAgb2Zmc2V0ICogOFtQQiwgUEMsIDhdLCBkZXN0CisgICAgZW5k
CisgICAgCisgICAgbWFjcm8gc3RvcmVwVG9JbnN0cnVjdGlvbih2YWx1ZSwgb2Zmc2V0KQorICAg
ICAgICBzdG9yZXAgdmFsdWUsIG9mZnNldCAqIDhbUEIsIFBDLCA4XQorICAgIGVuZAorCiBlbHNl
CiAgICAgY29uc3QgUEMgPSB0NAorICAgIG1hY3JvIGxvYWRpc0Zyb21JbnN0cnVjdGlvbihvZmZz
ZXQsIGRlc3QpCisgICAgICAgIGxvYWRpcyBvZmZzZXQgKiA0W1BDXSwgZGVzdAorICAgIGVuZAor
ICAgIAorICAgIG1hY3JvIGxvYWRwRnJvbUluc3RydWN0aW9uKG9mZnNldCwgZGVzdCkKKyAgICAg
ICAgbG9hZHAgb2Zmc2V0ICogNFtQQ10sIGRlc3QKKyAgICBlbmQKIGVuZAogCiAjIENvbnN0YW50
cyBmb3IgcmVhc29uaW5nIGFib3V0IHZhbHVlIHJlcHJlc2VudGF0aW9uLgpAQCAtMTAwLDYgKzEy
MCwyOSBAQCBjb25zdCBIYXNoRmxhZ3M4Qml0QnVmZmVyID0gNjQKICMgQ29waWVkIGZyb20gUHJv
cGVydHlPZmZzZXQuaAogY29uc3QgZmlyc3RPdXRPZkxpbmVPZmZzZXQgPSAxMDAKIAorIyBGcm9t
IFJlc29sdmVPcGVyYXRpb25zLmgKK2NvbnN0IFJlc29sdmVGYWlsID0gMAorY29uc3QgUmVzb2x2
ZVNldEJhc2VUb1VuZGVmaW5lZCA9IDEKK2NvbnN0IFJlc29sdmVSZXR1cm5TY29wZUFzQmFzZSA9
IDIKK2NvbnN0IFJlc29sdmVTZXRCYXNlVG9TY29wZSA9IDMKK2NvbnN0IFJlc29sdmVTZXRCYXNl
VG9HbG9iYWwgPSA0Citjb25zdCBSZXNvbHZlR2V0QW5kUmV0dXJuU2NvcGVkVmFyID0gNQorY29u
c3QgUmVzb2x2ZUdldEFuZFJldHVybkdsb2JhbFZhciA9IDYKK2NvbnN0IFJlc29sdmVHZXRBbmRS
ZXR1cm5HbG9iYWxWYXJXYXRjaGFibGUgPSA3Citjb25zdCBSZXNvbHZlU2tpcFRvcFNjb3BlTm9k
ZSA9IDgKK2NvbnN0IFJlc29sdmVTa2lwU2NvcGVzID0gOQorY29uc3QgUmVzb2x2ZVJldHVybkds
b2JhbE9iamVjdEFzQmFzZSA9IDEwCitjb25zdCBSZXNvbHZlR2V0QW5kUmV0dXJuR2xvYmFsUHJv
cGVydHkgPSAxMQorY29uc3QgUmVzb2x2ZUNoZWNrRm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9i
YWxTY29wZSA9IDEyCisKK2NvbnN0IFB1dFRvQmFzZU9wZXJhdGlvbktpbmRVbmluaXRpYWxpc2Vk
ID0gMAorY29uc3QgUHV0VG9CYXNlT3BlcmF0aW9uS2luZEdlbmVyaWMgPSAxCitjb25zdCBQdXRU
b0Jhc2VPcGVyYXRpb25LaW5kUmVhZG9ubHkgPSAyCitjb25zdCBQdXRUb0Jhc2VPcGVyYXRpb25L
aW5kR2xvYmFsVmFyaWFibGVQdXQgPSAzCitjb25zdCBQdXRUb0Jhc2VPcGVyYXRpb25LaW5kR2xv
YmFsVmFyaWFibGVQdXRDaGVja2VkID0gNAorY29uc3QgUHV0VG9CYXNlT3BlcmF0aW9uS2luZEds
b2JhbFByb3BlcnR5UHV0ID0gNQorY29uc3QgUHV0VG9CYXNlT3BlcmF0aW9uS2luZFZhcmlhYmxl
UHV0ID0gNgorCiAjIEFsbG9jYXRpb24gY29uc3RhbnRzCiBpZiBKU1ZBTFVFNjQKICAgICBjb25z
dCBKU0ZpbmFsT2JqZWN0U2l6ZUNsYXNzSW5kZXggPSAxCkBAIC00OTMsNDEgKzUzNiw0MTcgQEAg
X2xsaW50X29wX2luOgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2luKQogICAg
IGRpc3BhdGNoKDQpCiAKK21hY3JvIGdldFB1dFRvQmFzZU9wZXJhdGlvbkZpZWxkKHNjcmF0Y2gs
IHNjcmF0Y2gxLCBmaWVsZE9mZnNldCwgZmllbGRHZXR0ZXIpCisgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDQsIHNjcmF0Y2gpCisgICAgbXVscCBzaXplb2YgUHV0VG9CYXNlT3BlcmF0aW9uLCBz
Y3JhdGNoLCBzY3JhdGNoCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHNjcmF0Y2gxCisgICAg
bG9hZHAgVmVjdG9yQnVmZmVyT2Zmc2V0ICsgQ29kZUJsb2NrOjptX3B1dFRvQmFzZU9wZXJhdGlv
bnNbc2NyYXRjaDFdLCBzY3JhdGNoMQorICAgIGZpZWxkR2V0dGVyKGZpZWxkT2Zmc2V0W3NjcmF0
Y2gxLCBzY3JhdGNoLCAxXSkKK2VuZAorCittYWNybyBtb3ZlSlNWYWx1ZUZyb21SZWdpc3Rlcldp
dGhvdXRQcm9maWxpbmcodmFsdWUsIGRlc3RCdWZmZXIsIGRlc3RPZmZzZXRSZWcpCisgICAgc3Rv
cmVwIHZhbHVlLCBbZGVzdEJ1ZmZlciwgZGVzdE9mZnNldFJlZywgOF0KK2VuZAorCisKK21hY3Jv
IG1vdmVKU1ZhbHVlRnJvbVJlZ2lzdGVyc1dpdGhvdXRQcm9maWxpbmcodGFnLCBwYXlsb2FkLCBk
ZXN0QnVmZmVyLCBkZXN0T2Zmc2V0UmVnKQorICAgIHN0b3JlcCB0YWcsIFRhZ09mZnNldFtkZXN0
QnVmZmVyLCBkZXN0T2Zmc2V0UmVnLCA4XQorICAgIHN0b3JlcCBwYXlsb2FkLCBQYXlsb2FkT2Zm
c2V0W2Rlc3RCdWZmZXIsIGRlc3RPZmZzZXRSZWcsIDhdCitlbmQKKworbWFjcm8gcHV0VG9CYXNl
VmFyaWFibGVCb2R5KHZhcmlhYmxlT2Zmc2V0LCBzY3JhdGNoMSwgc2NyYXRjaDIsIHNjcmF0Y2gz
KQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCBzY3JhdGNoMSkKKyAgICBsb2FkcCBQYXls
b2FkT2Zmc2V0W2Nmciwgc2NyYXRjaDEsIDhdLCBzY3JhdGNoMQorICAgIGxvYWRwIEpTVmFyaWFi
bGVPYmplY3Q6Om1fcmVnaXN0ZXJzW3NjcmF0Y2gxXSwgc2NyYXRjaDEKKyAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMywgc2NyYXRjaDIpCisgICAgaWYgSlNWQUxVRTY0CisgICAgICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2NyYXRjaDIsIHNjcmF0Y2gzKQorICAgICAgICBtb3ZlSlNWYWx1
ZUZyb21SZWdpc3RlcldpdGhvdXRQcm9maWxpbmcoc2NyYXRjaDMsIHNjcmF0Y2gxLCB2YXJpYWJs
ZU9mZnNldCkKKyAgICBlbHNlCisgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2NyYXRj
aDIsIHNjcmF0Y2gzLCBzY3JhdGNoMikgIyBzY3JhdGNoMz10YWcsIHNjcmF0Y2gyPXBheWxvYWQK
KyAgICAgICAgbW92ZUpTVmFsdWVGcm9tUmVnaXN0ZXJzV2l0aG91dFByb2ZpbGluZyhzY3JhdGNo
Mywgc2NyYXRjaDIsIHNjcmF0Y2gxLCB2YXJpYWJsZU9mZnNldCkKKyAgICBlbmQKK2VuZAorCitf
bGxpbnRfb3BfcHV0X3RvX2Jhc2VfdmFyaWFibGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAg
IGdldFB1dFRvQmFzZU9wZXJhdGlvbkZpZWxkKHQwLCB0MSwgUHV0VG9CYXNlT3BlcmF0aW9uOjpt
X29mZnNldCwgbWFjcm8oYWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2FkaXMgIGFkZHIsIHQwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQpCisgICAgcHV0VG9CYXNlVmFyaWFibGVCb2R5KHQwLCB0MSwgdDIs
IHQzKQorICAgIGRpc3BhdGNoKDUpCisKK19sbGludF9vcF9wdXRfdG9fYmFzZToKKyAgICB0cmFj
ZUV4ZWN1dGlvbigpCisgICAgZ2V0UHV0VG9CYXNlT3BlcmF0aW9uRmllbGQodDAsIHQxLCAwLCBt
YWNybyhhZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlYXAgYWRkciwgdDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiYm5lcSBQdXRUb0Jhc2VPcGVyYXRpb246Om1fa2luZEFzVWludDhbdDBdLCBQdXRUb0Jh
c2VPcGVyYXRpb25LaW5kVmFyaWFibGVQdXQsIC5ub3RQdXRUb0Jhc2VWYXJpYWJsZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpcyBQdXRUb0Jhc2VP
cGVyYXRpb246Om1fb2Zmc2V0W3QwXSwgdDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VWYXJpYWJsZUJvZHkodDAsIHQxLCB0MiwgdDMpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goNSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubm90UHV0VG9C
YXNlVmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bmQpCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcHV0X3RvX2Jhc2UpCisgICAg
ZGlzcGF0Y2goNSkKKworbWFjcm8gZ2V0UmVzb2x2ZU9wZXJhdGlvbihyZXNvbHZlT3BlcmF0aW9u
SW5kZXgsIGRlc3QsIHNjcmF0Y2gpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKHJlc29sdmVP
cGVyYXRpb25JbmRleCwgZGVzdCkKKyAgICBtdWxwIHNpemVvZiBSZXNvbHZlT3BlcmF0aW9ucywg
ZGVzdCwgZGVzdAorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBzY3JhdGNoCisgICAgbG9hZHAg
VmVjdG9yQnVmZmVyT2Zmc2V0ICsgQ29kZUJsb2NrOjptX3Jlc29sdmVPcGVyYXRpb25zW3NjcmF0
Y2hdLCBzY3JhdGNoCisgICAgbG9hZHAgVmVjdG9yQnVmZmVyT2Zmc2V0W3NjcmF0Y2gsIGRlc3Qs
IDFdLCBkZXN0CitlbmQKKworbWFjcm8gZ2V0U2NvcGUobG9hZEluaXRpYWxTY29wZSwgc2NvcGVD
b3VudCwgZGVzdCwgc2NyYXRjaCkKKyAgICBsb2FkSW5pdGlhbFNjb3BlKGRlc3QpCisgICAgbG9h
ZGkgc2NvcGVDb3VudCwgc2NyYXRjaAorCisgICAgYnRpeiBzY3JhdGNoLCAuZG9uZQorLmxvb3A6
CisgICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W2Rlc3RdLCBkZXN0CisgICAgc3ViaSAxLCBzY3Jh
dGNoCisgICAgYnRpbnogc2NyYXRjaCwgLmxvb3AKKworLmRvbmU6CitlbmQKKworbWFjcm8gbW92
ZUpTVmFsdWUoc291cmNlQnVmZmVyLCBzb3VyY2VPZmZzZXRSZWcsIGRlc3RCdWZmZXIsIGRlc3RP
ZmZzZXRSZWcsIHByb2ZpbGVPZmZzZXQsIHNjcmF0Y2hSZWdpc3RlcikKKyAgICBpZiBKU1ZBTFVF
NjQKKyAgICAgICAgbG9hZHAgW3NvdXJjZUJ1ZmZlciwgc291cmNlT2Zmc2V0UmVnLCA4XSwgc2Ny
YXRjaFJlZ2lzdGVyCisgICAgICAgIHN0b3JlcCBzY3JhdGNoUmVnaXN0ZXIsIFtkZXN0QnVmZmVy
LCBkZXN0T2Zmc2V0UmVnLCA4XQorICAgICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbihwcm9maWxl
T2Zmc2V0LCBkZXN0T2Zmc2V0UmVnKQorICAgICAgICB2YWx1ZVByb2ZpbGUoc2NyYXRjaFJlZ2lz
dGVyLCBkZXN0T2Zmc2V0UmVnKQorICAgIGVsc2UKKyAgICAgICAgbG9hZHAgUGF5bG9hZE9mZnNl
dFtzb3VyY2VCdWZmZXIsIHNvdXJjZU9mZnNldFJlZywgOF0sIHNjcmF0Y2hSZWdpc3RlcgorICAg
ICAgICBzdG9yZXAgc2NyYXRjaFJlZ2lzdGVyLCBQYXlsb2FkT2Zmc2V0W2Rlc3RCdWZmZXIsIGRl
c3RPZmZzZXRSZWcsIDhdCisgICAgICAgIGxvYWRwIFRhZ09mZnNldFtzb3VyY2VCdWZmZXIsIHNv
dXJjZU9mZnNldFJlZywgOF0sIHNvdXJjZU9mZnNldFJlZworICAgICAgICBzdG9yZXAgc291cmNl
T2Zmc2V0UmVnLCBUYWdPZmZzZXRbZGVzdEJ1ZmZlciwgZGVzdE9mZnNldFJlZywgOF0KKyAgICAg
ICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24ocHJvZmlsZU9mZnNldCwgZGVzdE9mZnNldFJlZykKKyAg
ICAgICAgdmFsdWVQcm9maWxlKHNvdXJjZU9mZnNldFJlZywgc2NyYXRjaFJlZ2lzdGVyLCBkZXN0
T2Zmc2V0UmVnKQorICAgIGVuZAorZW5kCisKK21hY3JvIG1vdmVKU1ZhbHVlRnJvbVNsb3Qoc2xv
dCwgZGVzdEJ1ZmZlciwgZGVzdE9mZnNldFJlZywgcHJvZmlsZU9mZnNldCwgc2NyYXRjaFJlZ2lz
dGVyKQorICAgIGlmIEpTVkFMVUU2NAorICAgICAgICBsb2FkcCBbc2xvdF0sIHNjcmF0Y2hSZWdp
c3RlcgorICAgICAgICBzdG9yZXAgc2NyYXRjaFJlZ2lzdGVyLCBbZGVzdEJ1ZmZlciwgZGVzdE9m
ZnNldFJlZywgOF0KKyAgICAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24ocHJvZmlsZU9mZnNldCwg
ZGVzdE9mZnNldFJlZykKKyAgICAgICAgdmFsdWVQcm9maWxlKHNjcmF0Y2hSZWdpc3RlciwgZGVz
dE9mZnNldFJlZykKKyAgICBlbHNlCisgICAgICAgIGxvYWRwIFBheWxvYWRPZmZzZXRbc2xvdF0s
IHNjcmF0Y2hSZWdpc3RlcgorICAgICAgICBzdG9yZXAgc2NyYXRjaFJlZ2lzdGVyLCBQYXlsb2Fk
T2Zmc2V0W2Rlc3RCdWZmZXIsIGRlc3RPZmZzZXRSZWcsIDhdCisgICAgICAgIGxvYWRwIFRhZ09m
ZnNldFtzbG90XSwgc2xvdAorICAgICAgICBzdG9yZXAgc2xvdCwgVGFnT2Zmc2V0W2Rlc3RCdWZm
ZXIsIGRlc3RPZmZzZXRSZWcsIDhdCisgICAgICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKHByb2Zp
bGVPZmZzZXQsIGRlc3RPZmZzZXRSZWcpCisgICAgICAgIHZhbHVlUHJvZmlsZShzbG90LCBzY3Jh
dGNoUmVnaXN0ZXIsIGRlc3RPZmZzZXRSZWcpCisgICAgZW5kCitlbmQKKworbWFjcm8gbW92ZUpT
VmFsdWVGcm9tUmVnaXN0ZXIodmFsdWUsIGRlc3RCdWZmZXIsIGRlc3RPZmZzZXRSZWcsIHByb2Zp
bGVPZmZzZXQpCisgICAgc3RvcmVwIHZhbHVlLCBbZGVzdEJ1ZmZlciwgZGVzdE9mZnNldFJlZywg
OF0KKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbihwcm9maWxlT2Zmc2V0LCBkZXN0T2Zmc2V0UmVn
KQorICAgIHZhbHVlUHJvZmlsZSh2YWx1ZSwgZGVzdE9mZnNldFJlZykKK2VuZAorCittYWNybyBt
b3ZlSlNWYWx1ZUZyb21SZWdpc3RlcnModGFnLCBwYXlsb2FkLCBkZXN0QnVmZmVyLCBkZXN0T2Zm
c2V0UmVnLCBwcm9maWxlT2Zmc2V0KQorICAgIHN0b3JlcCB0YWcsIFRhZ09mZnNldFtkZXN0QnVm
ZmVyLCBkZXN0T2Zmc2V0UmVnLCA4XQorICAgIHN0b3JlcCBwYXlsb2FkLCBQYXlsb2FkT2Zmc2V0
W2Rlc3RCdWZmZXIsIGRlc3RPZmZzZXRSZWcsIDhdCisgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24o
cHJvZmlsZU9mZnNldCwgZGVzdE9mZnNldFJlZykKKyAgICB2YWx1ZVByb2ZpbGUodGFnLCBwYXls
b2FkLCBkZXN0T2Zmc2V0UmVnKQorZW5kCisKK19sbGludF9vcF9yZXNvbHZlX2dsb2JhbF9wcm9w
ZXJ0eToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgZ2V0UmVzb2x2ZU9wZXJhdGlvbigzLCB0
MCwgdDEpCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCisgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2dsb2JhbE9iamVjdFt0MV0sIHQxCisgICAgbG9hZHAgUmVzb2x2ZU9wZXJhdGlvbjo6bV9z
dHJ1Y3R1cmVbdDBdLCB0MgorICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0Miwg
X2xsaW50X29wX3Jlc29sdmUKKyAgICBsb2FkaXMgUmVzb2x2ZU9wZXJhdGlvbjo6bV9vZmZzZXRb
dDBdLCB0MAorICAgIGlmIEpTVkFMVUU2NAorICAgICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxl
T2Zmc2V0S25vd25Ob3RJbmxpbmUodDAsIHQxLCB0MikKKyAgICAgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDEsIHQwKQorICAgICAgICBtb3ZlSlNWYWx1ZUZyb21SZWdpc3Rlcih0MiwgY2ZyLCB0
MCwgNCkKKyAgICBlbHNlCisgICAgICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93
bk5vdElubGluZSh0MCwgdDEsIHQyLCB0MykKKyAgICAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9u
KDEsIHQwKQorICAgICAgICBtb3ZlSlNWYWx1ZUZyb21SZWdpc3RlcnModDIsIHQzLCBjZnIsIHQw
LCA0KQorICAgIGVuZAorICAgIGRpc3BhdGNoKDUpCisKK19sbGludF9vcF9yZXNvbHZlX2dsb2Jh
bF92YXI6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGdldFJlc29sdmVPcGVyYXRpb24oMywg
dDAsIHQxKQorICAgIGxvYWRwIFJlc29sdmVPcGVyYXRpb246Om1fcmVnaXN0ZXJBZGRyZXNzW3Qw
XSwgdDAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEpCisgICAgbW92ZUpTVmFsdWVG
cm9tU2xvdCh0MCwgY2ZyLCB0MSwgNCwgdDMpCisgICAgZGlzcGF0Y2goNSkKKworbWFjcm8gcmVz
b2x2ZVNjb3BlZFZhckJvZHkocmVzb2x2ZU9wZXJhdGlvbnMpCisgICAgIyBGaXJzdCBSZXNvbHZl
T3BlcmF0aW9uIGlzIHRvIHNraXAgc2NvcGUgY2hhaW4gbm9kZXMKKyAgICBnZXRTY29wZShtYWNy
byhkZXN0KQorICAgICAgICAgICAgICAgICBsb2FkcCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNl
dFtjZnJdLCBkZXN0CisgICAgICAgICAgICAgZW5kLAorICAgICAgICAgICAgIFJlc29sdmVPcGVy
YXRpb246Om1fc2NvcGVzVG9Ta2lwW3Jlc29sdmVPcGVyYXRpb25zXSwgdDEsIHQyKQorICAgIGxv
YWRwIEpTVmFyaWFibGVPYmplY3Q6Om1fcmVnaXN0ZXJzW3QxXSwgdDEgIyB0MSBub3cgY29udGFp
bnMgdGhlIGFjdGl2YXRpb24gcmVnaXN0ZXJzCisgICAgCisgICAgIyBTZWNvbmQgUmVzb2x2ZU9w
ZXJhdGlvbiB0ZWxscyB1cyB3aGF0IG9mZnNldCB0byB1c2UKKyAgICBsb2FkaXMgUmVzb2x2ZU9w
ZXJhdGlvbjo6bV9vZmZzZXQgKyBzaXplb2YgUmVzb2x2ZU9wZXJhdGlvbltyZXNvbHZlT3BlcmF0
aW9uc10sIHQyCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQzKQorICAgIG1vdmVKU1Zh
bHVlKHQxLCB0MiwgY2ZyLCB0MywgNCwgdDApCitlbmQKKworX2xsaW50X29wX3Jlc29sdmVfc2Nv
cGVkX3ZhcjoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgZ2V0UmVzb2x2ZU9wZXJhdGlvbigz
LCB0MCwgdDEpCisgICAgcmVzb2x2ZVNjb3BlZFZhckJvZHkodDApCisgICAgZGlzcGF0Y2goNSkK
KyAgICAKK19sbGludF9vcF9yZXNvbHZlX3Njb3BlZF92YXJfb25fdG9wX3Njb3BlOgorICAgIHRy
YWNlRXhlY3V0aW9uKCkKKyAgICBnZXRSZXNvbHZlT3BlcmF0aW9uKDMsIHQwLCB0MSkKKworICAg
ICMgTG9hZCBkZXN0aW5hdGlvbiBpbmRleAorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0
MykKKworICAgICMgV2Uga25vdyB3ZSB3YW50IHRoZSB0b3Agc2NvcGUgY2hhaW4gZW50cnkKKyAg
ICBsb2FkcCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0MQorICAgIGxvYWRwIEpT
VmFyaWFibGVPYmplY3Q6Om1fcmVnaXN0ZXJzW3QxXSwgdDEgIyB0MSBub3cgY29udGFpbnMgdGhl
IGFjdGl2YXRpb24gcmVnaXN0ZXJzCisgICAgCisgICAgIyBTZWNvbmQgUmVzb2x2ZU9wZXJhdGlv
biB0ZWxscyB1cyB3aGF0IG9mZnNldCB0byB1c2UKKyAgICBsb2FkaXMgUmVzb2x2ZU9wZXJhdGlv
bjo6bV9vZmZzZXQgKyBzaXplb2YgUmVzb2x2ZU9wZXJhdGlvblt0MF0sIHQyCisKKyAgICBtb3Zl
SlNWYWx1ZSh0MSwgdDIsIGNmciwgdDMsIDQsIHQwKQorICAgIGRpc3BhdGNoKDUpCisKK19sbGlu
dF9vcF9yZXNvbHZlX3Njb3BlZF92YXJfd2l0aF90b3Bfc2NvcGVfY2hlY2s6CisgICAgdHJhY2VF
eGVjdXRpb24oKQorICAgIGdldFJlc29sdmVPcGVyYXRpb24oMywgdDAsIHQxKQorICAgICMgRmly
c3QgUmVzb2x2ZU9wZXJhdGlvbiB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIHRvIGNoZWNrCisgICAg
bG9hZGlzIFJlc29sdmVPcGVyYXRpb246Om1fYWN0aXZhdGlvblJlZ2lzdGVyW3QwXSwgdDEKKwor
ICAgIGxvYWRwIFBheWxvYWRPZmZzZXRbY2ZyLCB0MSwgOF0sIHQxCisKKyAgICBnZXRTY29wZSht
YWNybyhkZXN0KQorICAgICAgICAgICAgICAgICBidHB6IHQxLCAuc2NvcGVDaGFpbk5vdENyZWF0
ZWQKKyAgICAgICAgICAgICAgICAgICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFt0MV0sIGRlc3QK
KyAgICAgICAgICAgICAgICAgam1wIC5kb25lCisgICAgICAgICAgICAgICAgIC5zY29wZUNoYWlu
Tm90Q3JlYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgIGxvYWRwIFNjb3BlQ2hhaW4gKyBQYXls
b2FkT2Zmc2V0W2Nmcl0sIGRlc3QKKyAgICAgICAgICAgICAgICAgLmRvbmU6CisgICAgICAgICAg
ICAgZW5kLCAKKyAgICAgICAgICAgICAjIFNlY29uZCBSZXNvbHZlT3BlcmF0aW9uIHRlbGxzIHVz
IGhvdyBtYW55IG1vcmUgbm9kZXMgdG8gc2tpcAorICAgICAgICAgICAgIFJlc29sdmVPcGVyYXRp
b246Om1fc2NvcGVzVG9Ta2lwICsgc2l6ZW9mIFJlc29sdmVPcGVyYXRpb25bdDBdLCB0MSwgdDIp
CisgICAgbG9hZHAgSlNWYXJpYWJsZU9iamVjdDo6bV9yZWdpc3RlcnNbdDFdLCB0MSAjIHQxIG5v
dyBjb250YWlucyB0aGUgYWN0aXZhdGlvbiByZWdpc3RlcnMKKyAgICAKKyAgICAjIFRoaXJkIG9w
ZXJhdGlvbiB0ZWxscyB1cyB3aGF0IG9mZnNldCB0byB1c2UKKyAgICBsb2FkaXMgUmVzb2x2ZU9w
ZXJhdGlvbjo6bV9vZmZzZXQgKyAyICogc2l6ZW9mIFJlc29sdmVPcGVyYXRpb25bdDBdLCB0Mgor
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MykKKyAgICBtb3ZlSlNWYWx1ZSh0MSwgdDIs
IGNmciwgdDMsIDQsIHQwKQorICAgIGRpc3BhdGNoKDUpCiAKIF9sbGludF9vcF9yZXNvbHZlOgog
ICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBnZXRSZXNvbHZlT3BlcmF0aW9uKDMsIHQwLCB0MSkK
KyAgICBidHB6IHQwLCAubm9JbnN0cnVjdGlvbnMKKyAgICBsb2FkaXMgUmVzb2x2ZU9wZXJhdGlv
bjo6bV9vcGVyYXRpb25bdDBdLCB0MQorICAgIGJpbmVxIHQxLCBSZXNvbHZlU2tpcFNjb3Blcywg
Lm5vdFNraXBTY29wZXMKKyAgICAgICAgcmVzb2x2ZVNjb3BlZFZhckJvZHkodDApCisgICAgICAg
IGRpc3BhdGNoKDUpCisubm90U2tpcFNjb3BlczoKKyAgICBiaW5lcSB0MSwgUmVzb2x2ZUdldEFu
ZFJldHVybkdsb2JhbFZhciwgLm5vdEdldEFuZFJldHVybkdsb2JhbFZhcgorICAgICAgICBsb2Fk
cCBSZXNvbHZlT3BlcmF0aW9uOjptX3JlZ2lzdGVyQWRkcmVzc1t0MF0sIHQwCisgICAgICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKKyAgICAgICAgbW92ZUpTVmFsdWVGcm9tU2xvdCh0
MCwgY2ZyLCB0MSwgNCwgdDMpCisgICAgICAgIGRpc3BhdGNoKDUpCisubm90R2V0QW5kUmV0dXJu
R2xvYmFsVmFyOgorCisubm9JbnN0cnVjdGlvbnM6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9z
bG93X3BhdGhfcmVzb2x2ZSkKLSAgICBkaXNwYXRjaCg0KQorICAgIGRpc3BhdGNoKDUpCisKK19s
bGludF9vcF9yZXNvbHZlX2Jhc2VfdG9fZ2xvYmFsOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFs
T2JqZWN0W3QxXSwgdDEKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDMpCisgICAgaWYg
SlNWQUxVRTY0CisgICAgICAgIG1vdmVKU1ZhbHVlRnJvbVJlZ2lzdGVyKHQxLCBjZnIsIHQzLCA2
KQorICAgIGVsc2UKKyAgICAgICAgbW92ZSBDZWxsVGFnLCB0MgorICAgICAgICBtb3ZlSlNWYWx1
ZUZyb21SZWdpc3RlcnModDIsIHQxLCBjZnIsIHQzLCA2KQorICAgIGVuZAorICAgIGRpc3BhdGNo
KDcpCiAKK19sbGludF9vcF9yZXNvbHZlX2Jhc2VfdG9fZ2xvYmFsX2R5bmFtaWM6CisgICAgam1w
IF9sbGludF9vcF9yZXNvbHZlX2Jhc2UKIAotX2xsaW50X29wX3Jlc29sdmVfc2tpcDoKK19sbGlu
dF9vcF9yZXNvbHZlX2Jhc2VfdG9fc2NvcGU6CiAgICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNh
bGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jlc29sdmVfc2tpcCkKLSAgICBkaXNwYXRjaCg1
KQorICAgIGdldFJlc29sdmVPcGVyYXRpb24oNCwgdDAsIHQxKQorICAgICMgRmlyc3QgUmVzb2x2
ZU9wZXJhdGlvbiBpcyB0byBza2lwIHNjb3BlIGNoYWluIG5vZGVzCisgICAgZ2V0U2NvcGUobWFj
cm8oZGVzdCkKKyAgICAgICAgICAgICAgICAgbG9hZHAgU2NvcGVDaGFpbiArIFBheWxvYWRPZmZz
ZXRbY2ZyXSwgZGVzdAorICAgICAgICAgICAgIGVuZCwKKyAgICAgICAgICAgICBSZXNvbHZlT3Bl
cmF0aW9uOjptX3Njb3Blc1RvU2tpcFt0MF0sIHQxLCB0MikKKyAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMSwgdDMpCisgICAgaWYgSlNWQUxVRTY0CisgICAgICAgIG1vdmVKU1ZhbHVlRnJvbVJl
Z2lzdGVyKHQxLCBjZnIsIHQzLCA2KQorICAgIGVsc2UKKyAgICAgICAgbW92ZSBDZWxsVGFnLCB0
MgorICAgICAgICBtb3ZlSlNWYWx1ZUZyb21SZWdpc3RlcnModDIsIHQxLCBjZnIsIHQzLCA2KQor
ICAgIGVuZAorICAgIGRpc3BhdGNoKDcpCiAKK19sbGludF9vcF9yZXNvbHZlX2Jhc2VfdG9fc2Nv
cGVfd2l0aF90b3Bfc2NvcGVfY2hlY2s6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGdldFJl
c29sdmVPcGVyYXRpb24oNCwgdDAsIHQxKQorICAgICMgRmlyc3QgUmVzb2x2ZU9wZXJhdGlvbiB0
ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIHRvIGNoZWNrCisgICAgbG9hZGlzIFJlc29sdmVPcGVyYXRp
b246Om1fYWN0aXZhdGlvblJlZ2lzdGVyW3QwXSwgdDEKKworICAgIGxvYWRwIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MSwgOF0sIHQxCisKKyAgICBnZXRTY29wZShtYWNybyhkZXN0KQorICAgICAgICAg
ICAgICAgICBidHB6IHQxLCAuc2NvcGVDaGFpbk5vdENyZWF0ZWQKKyAgICAgICAgICAgICAgICAg
ICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFt0MV0sIGRlc3QKKyAgICAgICAgICAgICAgICAgam1w
IC5kb25lCisgICAgICAgICAgICAgICAgIC5zY29wZUNoYWluTm90Q3JlYXRlZDoKKyAgICAgICAg
ICAgICAgICAgICAgIGxvYWRwIFNjb3BlQ2hhaW4gKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIGRlc3QK
KyAgICAgICAgICAgICAgICAgLmRvbmU6CisgICAgICAgICAgICAgZW5kLCAKKyAgICAgICAgICAg
ICAjIFNlY29uZCBSZXNvbHZlT3BlcmF0aW9uIHRlbGxzIHVzIGhvdyBtYW55IG1vcmUgbm9kZXMg
dG8gc2tpcAorICAgICAgICAgICAgIFJlc29sdmVPcGVyYXRpb246Om1fc2NvcGVzVG9Ta2lwICsg
c2l6ZW9mIFJlc29sdmVPcGVyYXRpb25bdDBdLCB0MSwgdDIpCisKKyAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oMSwgdDMpCisgICAgaWYgSlNWQUxVRTY0CisgICAgICAgIG1vdmVKU1ZhbHVlRnJv
bVJlZ2lzdGVyKHQxLCBjZnIsIHQzLCA2KQorICAgIGVsc2UKKyAgICAgICAgbW92ZSBDZWxsVGFn
LCB0MgorICAgICAgICBtb3ZlSlNWYWx1ZUZyb21SZWdpc3RlcnModDIsIHQxLCBjZnIsIHQzLCA2
KQorICAgIGVuZAorICAgIGRpc3BhdGNoKDcpCiAKIF9sbGludF9vcF9yZXNvbHZlX2Jhc2U6CiAg
ICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jl
c29sdmVfYmFzZSkKLSAgICBkaXNwYXRjaCg1KQotCisgICAgZGlzcGF0Y2goNykKIAogX2xsaW50
X29wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHM6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNh
bGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHMpCiAgICAg
ZGlzcGF0Y2goMykKIAorbWFjcm8gaW50ZXJwcmV0UmVzb2x2ZVdpdGhCYXNlKG9wY29kZUxlbmd0
aCwgc2xvd1BhdGgpCisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGdldFJlc29sdmVPcGVyYXRp
b24oNCwgdDAsIHQxKQorICAgIGJ0cHogdDAsIC5zbG93UGF0aAorCisgICAgbG9hZHAgU2NvcGVD
aGFpbltjZnJdLCB0MworICAgICMgR2V0IHRoZSBiYXNlCisgICAgbG9hZGlzIFJlc29sdmVPcGVy
YXRpb246Om1fb3BlcmF0aW9uW3QwXSwgdDIKKworICAgIGJpbmVxIHQyLCBSZXNvbHZlU2tpcFNj
b3BlcywgLm5vdFNraXBTY29wZXMKKyAgICAgICAgZ2V0U2NvcGUobWFjcm8oZGVzdCkgbW92ZSB0
MywgZGVzdCBlbmQsCisgICAgICAgICAgICAgICAgIFJlc29sdmVPcGVyYXRpb246Om1fc2NvcGVz
VG9Ta2lwW3QwXSwgdDEsIHQyKQorICAgICAgICBtb3ZlIHQxLCB0MworICAgICAgICBhZGRwIHNp
emVvZiBSZXNvbHZlT3BlcmF0aW9uLCB0MCwgdDAKKyAgICAgICAgam1wIC5oYXZlQ29ycmVjdFNj
b3BlCisKKyAgICAubm90U2tpcFNjb3BlczoKKworICAgIGJpbmVxIHQyLCBSZXNvbHZlU2tpcFRv
cFNjb3BlTm9kZSwgLm5vdFNraXBUb3BTY29wZU5vZGUKKyAgICAgICAgbG9hZGlzIFJlc29sdmVP
cGVyYXRpb246Om1fYWN0aXZhdGlvblJlZ2lzdGVyW3QwXSwgdDEKKyAgICAgICAgbG9hZHAgUGF5
bG9hZE9mZnNldFtjZnIsIHQxLCA4XSwgdDEKKworICAgICAgICBnZXRTY29wZShtYWNybyhkZXN0
KQorICAgICAgICAgICAgICAgICAgICAgYnRweiB0MSwgLnNjb3BlQ2hhaW5Ob3RDcmVhdGVkCisg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3QxXSwgZGVzdAor
ICAgICAgICAgICAgICAgICAgICAgam1wIC5kb25lCisgICAgICAgICAgICAgICAgICAgICAuc2Nv
cGVDaGFpbk5vdENyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZHAgU2NvcGVD
aGFpbiArIFBheWxvYWRPZmZzZXRbY2ZyXSwgZGVzdAorICAgICAgICAgICAgICAgICAgICAgLmRv
bmU6CisgICAgICAgICAgICAgICAgIGVuZCwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mIFJlc29s
dmVPcGVyYXRpb24gKyBSZXNvbHZlT3BlcmF0aW9uOjptX3Njb3Blc1RvU2tpcFt0MF0sIHQxLCB0
MikKKyAgICAgICAgbW92ZSB0MSwgdDMKKyAgICAgICAgIyBXZSd2ZSBoYW5kbGVkIHR3byBvcGNv
ZGVzIGhlcmUKKyAgICAgICAgYWRkcCAyICogc2l6ZW9mIFJlc29sdmVPcGVyYXRpb24sIHQwLCB0
MAorCisgICAgLm5vdFNraXBUb3BTY29wZU5vZGU6CisKKyAgICAuaGF2ZUNvcnJlY3RTY29wZToK
KworICAgICMgdDMgbm93IGNvbnRhaW5zIHRoZSBjb3JyZWN0IFNjb3BlCisgICAgIyB0MCBjb250
YWlucyBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgUmVzb2x2ZU9wZXJhdGlvbgorCisgICAgbG9h
ZGlzIFJlc29sdmVPcGVyYXRpb246Om1fb3BlcmF0aW9uW3QwXSwgdDIKKyAgICAjIHQyIGNvbnRh
aW5zIHRoZSBuZXh0IGluc3RydWN0aW9uCisKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwg
dDEpCisgICAgIyB0MSBub3cgY29udGFpbnMgdGhlIGluZGV4IGZvciB0aGUgYmFzZSByZWdpc3Rl
cgorCisgICAgYmluZXEgdDIsIFJlc29sdmVTZXRCYXNlVG9TY29wZSwgLm5vdFNldEJhc2VUb1Nj
b3BlCisgICAgICAgIHN0b3JlcCB0MywgUGF5bG9hZE9mZnNldFtjZnIsIHQxLCA4XQorICAgICAg
ICBpZiBKU1ZBTFVFNjQKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RvcmVwIENlbGxUYWcs
IFRhZ09mZnNldFtjZnIsIHQxLCA4XQorICAgICAgICBlbmQKKyAgICAgICAgam1wIC5oYXZlU2V0
QmFzZQorCisgICAgLm5vdFNldEJhc2VUb1Njb3BlOgorCisgICAgYmluZXEgdDIsIFJlc29sdmVT
ZXRCYXNlVG9VbmRlZmluZWQsIC5ub3RTZXRCYXNlVG9VbmRlZmluZWQKKyAgICAgICAgaWYgSlNW
QUxVRTY0CisgICAgICAgICAgICBzdG9yZXAgVmFsdWVVbmRlZmluZWQsIFBheWxvYWRPZmZzZXRb
Y2ZyLCB0MSwgOF0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RvcmVwIDAsIFBheWxvYWRP
ZmZzZXRbY2ZyLCB0MSwgOF0KKyAgICAgICAgICAgIHN0b3JlcCBVbmRlZmluZWRUYWcsIFRhZ09m
ZnNldFtjZnIsIHQxLCA4XQorICAgICAgICBlbmQKKyAgICAgICAgam1wIC5oYXZlU2V0QmFzZQor
CisgICAgLm5vdFNldEJhc2VUb1VuZGVmaW5lZDoKKyAgICBiaW5lcSB0MiwgUmVzb2x2ZVNldEJh
c2VUb0dsb2JhbCwgLnNsb3dQYXRoCisgICAgICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVb
dDNdLCB0MgorICAgICAgICBsb2FkcCBTdHJ1Y3R1cmU6Om1fZ2xvYmFsT2JqZWN0W3QyXSwgdDIK
KyAgICAgICAgc3RvcmVwIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDEsIDhdCisgICAgICAgIGlm
IEpTVkFMVUU2NAorICAgICAgICBlbHNlCisgICAgICAgICAgICBzdG9yZXAgQ2VsbFRhZywgVGFn
T2Zmc2V0W2NmciwgdDEsIDhdCisgICAgICAgIGVuZAorCisgICAgLmhhdmVTZXRCYXNlOgorCisg
ICAgIyBHZXQgdGhlIHZhbHVlCisKKyAgICAjIExvYWQgdGhlIG9wZXJhdGlvbiBpbnRvIHQyCisg
ICAgbG9hZGlzIFJlc29sdmVPcGVyYXRpb246Om1fb3BlcmF0aW9uICsgc2l6ZW9mIFJlc29sdmVP
cGVyYXRpb25bdDBdLCB0MgorCisgICAgIyBMb2FkIHRoZSBpbmRleCBmb3IgdGhlIHZhbHVlIHJl
Z2lzdGVyIGludG8gdDEKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDEpCisKKyAgICBi
aW5lcSB0MiwgUmVzb2x2ZUdldEFuZFJldHVyblNjb3BlZFZhciwgLm5vdEdldEFuZFJldHVyblNj
b3BlZFZhcgorICAgICAgICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0M10s
IHQzICMgdDMgbm93IGNvbnRhaW5zIHRoZSBhY3RpdmF0aW9uIHJlZ2lzdGVycworCisgICAgICAg
ICMgU2Vjb25kIFJlc29sdmVPcGVyYXRpb24gdGVsbHMgdXMgd2hhdCBvZmZzZXQgdG8gdXNlCisg
ICAgICAgIGxvYWRpcyBSZXNvbHZlT3BlcmF0aW9uOjptX29mZnNldCArIHNpemVvZiBSZXNvbHZl
T3BlcmF0aW9uW3QwXSwgdDIKKyAgICAgICAgbW92ZUpTVmFsdWUodDMsIHQyLCBjZnIsIHQxLCBv
cGNvZGVMZW5ndGggLSAxLCB0MCkKKyAgICAgICAgZGlzcGF0Y2gob3Bjb2RlTGVuZ3RoKQorCisg
ICAgLm5vdEdldEFuZFJldHVyblNjb3BlZFZhcjoKKyAgICBiaW5lcSB0MiwgUmVzb2x2ZUdldEFu
ZFJldHVybkdsb2JhbFByb3BlcnR5LCAuc2xvd1BhdGgKKyAgICAgICAgY2FsbFNsb3dQYXRoKHNs
b3dQYXRoKQorICAgICAgICBkaXNwYXRjaChvcGNvZGVMZW5ndGgpCisKKy5zbG93UGF0aDoKKyAg
ICBjYWxsU2xvd1BhdGgoc2xvd1BhdGgpCisgICAgZGlzcGF0Y2gob3Bjb2RlTGVuZ3RoKQorZW5k
CiAKIF9sbGludF9vcF9yZXNvbHZlX3dpdGhfYmFzZToKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0g
ICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVzb2x2ZV93aXRoX2Jhc2UpCi0gICAg
ZGlzcGF0Y2goNSkKKyAgICBpbnRlcnByZXRSZXNvbHZlV2l0aEJhc2UoNywgX2xsaW50X3Nsb3df
cGF0aF9yZXNvbHZlX3dpdGhfYmFzZSkKIAogCiBfbGxpbnRfb3BfcmVzb2x2ZV93aXRoX3RoaXM6
Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRo
X3Jlc29sdmVfd2l0aF90aGlzKQotICAgIGRpc3BhdGNoKDUpCisgICAgaW50ZXJwcmV0UmVzb2x2
ZVdpdGhCYXNlKDYsIF9sbGludF9zbG93X3BhdGhfcmVzb2x2ZV93aXRoX3RoaXMpCiAKIAogbWFj
cm8gd2l0aElubGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVhdGlv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggZjBkNDVlYjBlMTI5ZDJkNmM4YTg0ZTg4Yzc4YjU1NTE1
OGMzYjc4ZC4uZDAwNzJkNzE0NjY5MTM5YWI0ODhkNTViYTUyNDRhMTFjNjUyYzU2NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KQEAgLTk3NiwxMjYgKzk3Niw3IEBAIG1hY3JvIHJlc29sdmVHbG9iYWwoc2l6
ZSwgc2xvdykKICAgICB2YWx1ZVByb2ZpbGUodDIsIHQzLCB0MCkKIGVuZAogCi1fbGxpbnRfb3Bf
cmVzb2x2ZV9nbG9iYWw6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIHJlc29sdmVHbG9iYWwo
NiwgLm9wUmVzb2x2ZUdsb2JhbFNsb3cpCi0gICAgZGlzcGF0Y2goNikKLQotLm9wUmVzb2x2ZUds
b2JhbFNsb3c6Ci0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVzb2x2ZV9nbG9i
YWwpCi0gICAgZGlzcGF0Y2goNikKLQotCi0jIEdpdmVzIHlvdSB0aGUgc2NvcGUgaW4gdDAsIHdo
aWxlIGFsbG93aW5nIHlvdSB0byBvcHRpb25hbGx5IHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3Mg
b24gdGhlCi0jIHNjb3BlcyBhcyB0aGV5IGFyZSB0cmF2ZXJzZWQuIHNjb3BlQ2hlY2soKSBpcyBj
YWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOiB0aGUgcmVnaXN0ZXIKLSMgaG9sZGluZyB0aGUgc2Nv
cGUsIGFuZCBhIHJlZ2lzdGVyIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHNjcmF0Y2guIE5vdGUgdGhh
dCB0aGlzIGRvZXMgbm90Ci0jIHVzZSB0Mywgc28geW91IGNhbiBob2xkIHN0dWZmIGluIHQzIGlm
IG5lZWQgYmUuCi1tYWNybyBnZXRTY29wZShkZUJydWlqaW5JbmRleE9wZXJhbmQsIHNjb3BlQ2hl
Y2spCi0gICAgbG9hZHAgU2NvcGVDaGFpbiArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDAKLSAgICBs
b2FkaSBkZUJydWlqaW5JbmRleE9wZXJhbmQsIHQyCi0gICAgCi0gICAgYnRpeiB0MiwgLmRvbmUK
LSAgICAKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKLSAgICBiaW5lcSBDb2RlQmxvY2s6
Om1fY29kZVR5cGVbdDFdLCBGdW5jdGlvbkNvZGUsIC5sb29wCi0gICAgYnRieiBDb2RlQmxvY2s6
Om1fbmVlZHNGdWxsU2NvcGVDaGFpblt0MV0sIC5sb29wCi0gICAgCi0gICAgbG9hZGkgQ29kZUJs
b2NrOjptX2FjdGl2YXRpb25SZWdpc3Rlclt0MV0sIHQxCi0KLSAgICAjIE5lZWQgdG8gY29uZGl0
aW9uYWxseSBza2lwIG92ZXIgb25lIHNjb3BlLgotICAgIGJpZXEgVGFnT2Zmc2V0W2NmciwgdDEs
IDhdLCBFbXB0eVZhbHVlVGFnLCAubm9BY3RpdmF0aW9uCi0gICAgc2NvcGVDaGVjayh0MCwgdDEp
Ci0gICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3QwXSwgdDAKLS5ub0FjdGl2YXRpb246Ci0gICAg
c3ViaSAxLCB0MgotICAgIAotICAgIGJ0aXogdDIsIC5kb25lCi0ubG9vcDoKLSAgICBzY29wZUNo
ZWNrKHQwLCB0MSkKLSAgICBsb2FkcCBKU1Njb3BlOjptX25leHRbdDBdLCB0MAotICAgIHN1Ymkg
MSwgdDIKLSAgICBidGlueiB0MiwgLmxvb3AKLQotLmRvbmU6Ci1lbmQKLQotX2xsaW50X29wX3Jl
c29sdmVfZ2xvYmFsX2R5bmFtaWM6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCB0MwotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDNd
LCB0MwotICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX2FjdGl2YXRpb25TdHJ1Y3R1cmVbdDNd
LCB0MwotICAgIGdldFNjb3BlKAotICAgICAgICAyMFtQQ10sCi0gICAgICAgIG1hY3JvIChzY29w
ZSwgc2NyYXRjaCkKLSAgICAgICAgICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbc2NvcGVd
LCB0MywgLm9wUmVzb2x2ZUdsb2JhbER5bmFtaWNTdXBlclNsb3cKLSAgICAgICAgZW5kKQotICAg
IHJlc29sdmVHbG9iYWwoNywgLm9wUmVzb2x2ZUdsb2JhbER5bmFtaWNTbG93KQotICAgIGRpc3Bh
dGNoKDcpCi0KLS5vcFJlc29sdmVHbG9iYWxEeW5hbWljU3VwZXJTbG93OgotICAgIGNhbGxTbG93
UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jlc29sdmVfZm9yX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMp
Ci0gICAgZGlzcGF0Y2goNykKLQotLm9wUmVzb2x2ZUdsb2JhbER5bmFtaWNTbG93OgotICAgIGNh
bGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMpCi0gICAg
ZGlzcGF0Y2goNykKLQotCi1fbGxpbnRfb3BfZ2V0X3Njb3BlZF92YXI6Ci0gICAgdHJhY2VFeGVj
dXRpb24oKQotICAgICMgT3BlcmFuZHMgYXJlIGFzIGZvbGxvd3M6Ci0gICAgIyA0W1BDXSAgIERl
c3RpbmF0aW9uIGZvciB0aGUgbG9hZC4KLSAgICAjIDhbUENdICAgSW5kZXggb2YgcmVnaXN0ZXIg
aW4gdGhlIHNjb3BlLgotICAgICMgMTJbUENdICBEZSBCcnVpamluIGluZGV4LgotICAgIGdldFNj
b3BlKDEyW1BDXSwgbWFjcm8gKHNjb3BlLCBzY3JhdGNoKSBlbmQpCi0gICAgbG9hZGkgNFtQQ10s
IHQxCi0gICAgbG9hZGkgOFtQQ10sIHQyCi0gICAgbG9hZHAgSlNWYXJpYWJsZU9iamVjdDo6bV9y
ZWdpc3RlcnNbdDBdLCB0MAotICAgIGxvYWRpIFRhZ09mZnNldFt0MCwgdDIsIDhdLCB0MwotICAg
IGxvYWRpIFBheWxvYWRPZmZzZXRbdDAsIHQyLCA4XSwgdDAKLSAgICBzdG9yZWkgdDMsIFRhZ09m
ZnNldFtjZnIsIHQxLCA4XQotICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQxLCA4
XQotICAgIGxvYWRpIDE2W1BDXSwgdDEKLSAgICB2YWx1ZVByb2ZpbGUodDMsIHQwLCB0MSkKLSAg
ICBkaXNwYXRjaCg1KQotCi0KLV9sbGludF9vcF9wdXRfc2NvcGVkX3ZhcjoKLSAgICB0cmFjZUV4
ZWN1dGlvbigpCi0gICAgZ2V0U2NvcGUoOFtQQ10sIG1hY3JvIChzY29wZSwgc2NyYXRjaCkgZW5k
KQotICAgIGxvYWRpIDEyW1BDXSwgdDEKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0
MywgdDIpCi0gICAgbG9hZGkgNFtQQ10sIHQxCi0gICAgd3JpdGVCYXJyaWVyKHQzLCB0MikKLSAg
ICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQwCi0gICAgc3RvcmVp
IHQzLCBUYWdPZmZzZXRbdDAsIHQxLCA4XQotICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFt0
MCwgdDEsIDhdCi0gICAgZGlzcGF0Y2goNCkKLQotCi1tYWNybyBnZXRHbG9iYWxWYXIoc2l6ZSkK
LSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZHAgOFtQQ10sIHQwCi0gICAgbG9hZGkgNFtQ
Q10sIHQzCi0gICAgbG9hZGkgVGFnT2Zmc2V0W3QwXSwgdDIKLSAgICBsb2FkaSBQYXlsb2FkT2Zm
c2V0W3QwXSwgdDEKLSAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFtjZnIsIHQzLCA4XQotICAgIHN0
b3JlaSB0MSwgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XQotICAgIGxvYWRpIChzaXplIC0gMSkg
KiA0W1BDXSwgdDMKLSAgICB2YWx1ZVByb2ZpbGUodDIsIHQxLCB0MykKLSAgICBkaXNwYXRjaChz
aXplKQotZW5kCi0KLV9sbGludF9vcF9nZXRfZ2xvYmFsX3ZhcjoKLSAgICBnZXRHbG9iYWxWYXIo
NCkKLQotCi1fbGxpbnRfb3BfZ2V0X2dsb2JhbF92YXJfd2F0Y2hhYmxlOgotICAgIGdldEdsb2Jh
bFZhcig1KQotCi0KIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdDoKLV9sbGludF9vcF9wdXRf
Z2xvYmFsX3ZhcjoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGkgOFtQQ10sIHQxCiAg
ICAgbG9hZGkgNFtQQ10sIHQwCkBAIC0xMTA3LDIyICs5ODgsMjAgQEAgX2xsaW50X29wX3B1dF9n
bG9iYWxfdmFyOgogCiAKIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazoKLV9sbGlu
dF9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjazoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9h
ZHAgMTJbUENdLCB0MgogICAgIGxvYWRpIDhbUENdLCB0MQogICAgIGxvYWRpIDRbUENdLCB0MAot
ICAgIGJ0Ym56IFt0Ml0sIC5vcFB1dEdsb2JhbFZhckNoZWNrU2xvdworICAgIGJ0Ym56IFt0Ml0s
IC5vcEluaXRHbG9iYWxDb25zdENoZWNrU2xvdwogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
dDEsIHQyLCB0MykKICAgICB3cml0ZUJhcnJpZXIodDIsIHQzKQogICAgIHN0b3JlaSB0MiwgVGFn
T2Zmc2V0W3QwXQogICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFt0MF0KICAgICBkaXNwYXRj
aCg1KQotLm9wUHV0R2xvYmFsVmFyQ2hlY2tTbG93OgotICAgIGNhbGxTbG93UGF0aChfbGxpbnRf
c2xvd19wYXRoX3B1dF9nbG9iYWxfdmFyX2NoZWNrKQorLm9wSW5pdEdsb2JhbENvbnN0Q2hlY2tT
bG93OgorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2luaXRfZ2xvYmFsX2NvbnN0
X2NoZWNrKQogICAgIGRpc3BhdGNoKDUpCiAKLQogIyBXZSBvbmx5IGRvIG1vbm9tb3JwaGljIGdl
dF9ieV9pZCBjYWNoaW5nIGZvciBub3csIGFuZCB3ZSBkbyBub3QgbW9kaWZ5IHRoZQogIyBvcGNv
ZGUuIFdlIGRvLCBob3dldmVyLCBhbGxvdyBmb3IgdGhlIGNhY2hlIHRvIGNoYW5nZSBhbnl0aW1l
IGlmIGZhaWxzLCBzaW5jZQogIyBwaW5nLXBvbmdpbmcgaXMgZnJlZS4gQXQgYmVzdCB3ZSBnZXQg
bHVja3kgYW5kIHRoZSBnZXRfYnlfaWQgd2lsbCBjb250aW51ZQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCA4Yjcy
Njc0YWJhMDVmN2UxZWQyMjg1YTZhNGU4YzkwYTRiZGFhYzk5Li41OWZhMThjY2ZlNmRkOTFiMWIw
MmI5MjU4MTFmNzVhMzJhYzE0NGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtODE1LDEzOSArODE1LDcgQEAg
bWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBv
YmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBsb2FkcCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVl
CiBlbmQKIAotbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQotICAgICMgT3BlcmFuZHMg
YXJlIGFzIGZvbGxvd3M6Ci0gICAgIyA4W1BCLCBQQywgOF0gICBEZXN0aW5hdGlvbiBmb3IgdGhl
IGxvYWQuCi0gICAgIyAxNltQQiwgUEMsIDhdICBQcm9wZXJ0eSBpZGVudGlmaWVyIGluZGV4IGlu
IHRoZSBjb2RlIGJsb2NrLgotICAgICMgMjRbUEIsIFBDLCA4XSAgU3RydWN0dXJlIHBvaW50ZXIs
IGluaXRpYWxpemVkIHRvIDAgYnkgYnl0ZWNvZGUgZ2VuZXJhdG9yLgotICAgICMgMzJbUEIsIFBD
LCA4XSAgT2Zmc2V0IGluIGdsb2JhbCBvYmplY3QsIGluaXRpYWxpemVkIHRvIDAgYnkgYnl0ZWNv
ZGUgZ2VuZXJhdG9yLgotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENv
ZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDBdLCB0MAotICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1
Y3R1cmVbdDBdLCB0MQotICAgIGJwbmVxIHQxLCAyNFtQQiwgUEMsIDhdLCBzbG93Ci0gICAgbG9h
ZGlzIDMyW1BCLCBQQywgOF0sIHQxCi0gICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtu
b3duTm90SW5saW5lKHQxLCB0MCwgdDIpCi0gICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKLSAg
ICBzdG9yZXAgdDIsIFtjZnIsIHQwLCA4XQotICAgIGxvYWRwIChzaXplIC0gMSkgKiA4W1BCLCBQ
QywgOF0sIHQwCi0gICAgdmFsdWVQcm9maWxlKHQyLCB0MCkKLWVuZAotCi1fbGxpbnRfb3BfcmVz
b2x2ZV9nbG9iYWw6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIHJlc29sdmVHbG9iYWwoNiwg
Lm9wUmVzb2x2ZUdsb2JhbFNsb3cpCi0gICAgZGlzcGF0Y2goNikKLQotLm9wUmVzb2x2ZUdsb2Jh
bFNsb3c6Ci0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVzb2x2ZV9nbG9iYWwp
Ci0gICAgZGlzcGF0Y2goNikKLQotCi0jIEdpdmVzIHlvdSB0aGUgc2NvcGUgaW4gdDAsIHdoaWxl
IGFsbG93aW5nIHlvdSB0byBvcHRpb25hbGx5IHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3Mgb24g
dGhlCi0jIHNjb3BlcyBhcyB0aGV5IGFyZSB0cmF2ZXJzZWQuIHNjb3BlQ2hlY2soKSBpcyBjYWxs
ZWQgd2l0aCB0d28gYXJndW1lbnRzOiB0aGUgcmVnaXN0ZXIKLSMgaG9sZGluZyB0aGUgc2NvcGUs
IGFuZCBhIHJlZ2lzdGVyIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHNjcmF0Y2guIE5vdGUgdGhhdCB0
aGlzIGRvZXMgbm90Ci0jIHVzZSB0Mywgc28geW91IGNhbiBob2xkIHN0dWZmIGluIHQzIGlmIG5l
ZWQgYmUuCi1tYWNybyBnZXRTY29wZShkZUJydWlqaW5JbmRleE9wZXJhbmQsIHNjb3BlQ2hlY2sp
Ci0gICAgbG9hZHAgU2NvcGVDaGFpbltjZnJdLCB0MAotICAgIGxvYWRpcyBkZUJydWlqaW5JbmRl
eE9wZXJhbmQsIHQyCi0gICAgCi0gICAgYnRpeiB0MiwgLmRvbmUKLSAgICAKLSAgICBsb2FkcCBD
b2RlQmxvY2tbY2ZyXSwgdDEKLSAgICBiaW5lcSBDb2RlQmxvY2s6Om1fY29kZVR5cGVbdDFdLCBG
dW5jdGlvbkNvZGUsIC5sb29wCi0gICAgYnRieiBDb2RlQmxvY2s6Om1fbmVlZHNGdWxsU2NvcGVD
aGFpblt0MV0sIC5sb29wCi0gICAgCi0gICAgbG9hZGlzIENvZGVCbG9jazo6bV9hY3RpdmF0aW9u
UmVnaXN0ZXJbdDFdLCB0MQotCi0gICAgIyBOZWVkIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBvdmVy
IG9uZSBzY29wZS4KLSAgICBidHB6IFtjZnIsIHQxLCA4XSwgLm5vQWN0aXZhdGlvbgotICAgIHNj
b3BlQ2hlY2sodDAsIHQxKQotICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFt0MF0sIHQwCi0ubm9B
Y3RpdmF0aW9uOgotICAgIHN1YmkgMSwgdDIKLSAgICAKLSAgICBidGl6IHQyLCAuZG9uZQotLmxv
b3A6Ci0gICAgc2NvcGVDaGVjayh0MCwgdDEpCi0gICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3Qw
XSwgdDAKLSAgICBzdWJpIDEsIHQyCi0gICAgYnRpbnogdDIsIC5sb29wCi0KLS5kb25lOgotZW5k
Ci0KLV9sbGludF9vcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljOgotICAgIHRyYWNlRXhlY3V0aW9u
KCkKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1f
Z2xvYmFsT2JqZWN0W3QzXSwgdDMKLSAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9hY3RpdmF0
aW9uU3RydWN0dXJlW3QzXSwgdDMKLSAgICBnZXRTY29wZSgKLSAgICAgICAgNDBbUEIsIFBDLCA4
XSwKLSAgICAgICAgbWFjcm8gKHNjb3BlLCBzY3JhdGNoKQotICAgICAgICAgICAgYnBuZXEgSlND
ZWxsOjptX3N0cnVjdHVyZVtzY29wZV0sIHQzLCAub3BSZXNvbHZlR2xvYmFsRHluYW1pY1N1cGVy
U2xvdwotICAgICAgICBlbmQpCi0gICAgcmVzb2x2ZUdsb2JhbCg3LCAub3BSZXNvbHZlR2xvYmFs
RHluYW1pY1Nsb3cpCi0gICAgZGlzcGF0Y2goNykKLQotLm9wUmVzb2x2ZUdsb2JhbER5bmFtaWNT
dXBlclNsb3c6Ci0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVzb2x2ZV9mb3Jf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYykKLSAgICBkaXNwYXRjaCg3KQotCi0ub3BSZXNvbHZlR2xv
YmFsRHluYW1pY1Nsb3c6Ci0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVzb2x2
ZV9nbG9iYWxfZHluYW1pYykKLSAgICBkaXNwYXRjaCg3KQotCi0KLV9sbGludF9vcF9nZXRfc2Nv
cGVkX3ZhcjoKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgIyBPcGVyYW5kcyBhcmUgYXMgZm9s
bG93czoKLSAgICAjIDhbUEIsIFBDLCA4XSAgIERlc3RpbmF0aW9uIGZvciB0aGUgbG9hZAotICAg
ICMgMTZbUEIsIFBDLCA4XSAgSW5kZXggb2YgcmVnaXN0ZXIgaW4gdGhlIHNjb3BlCi0gICAgIyAy
NFtQQiwgUEMsIDhdICBEZSBCcnVpamluIGluZGV4LgotICAgIGdldFNjb3BlKDI0W1BCLCBQQywg
OF0sIG1hY3JvIChzY29wZSwgc2NyYXRjaCkgZW5kKQotICAgIGxvYWRpcyA4W1BCLCBQQywgOF0s
IHQxCi0gICAgbG9hZGlzIDE2W1BCLCBQQywgOF0sIHQyCi0gICAgbG9hZHAgSlNWYXJpYWJsZU9i
amVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0MAotICAgIGxvYWRwIFt0MCwgdDIsIDhdLCB0MwotICAg
IHN0b3JlcCB0MywgW2NmciwgdDEsIDhdCi0gICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDEKLSAg
ICB2YWx1ZVByb2ZpbGUodDMsIHQxKQotICAgIGRpc3BhdGNoKDUpCi0KLQotX2xsaW50X29wX3B1
dF9zY29wZWRfdmFyOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBnZXRTY29wZSgxNltQQiwg
UEMsIDhdLCBtYWNybyAoc2NvcGUsIHNjcmF0Y2gpIGVuZCkKLSAgICBsb2FkaXMgMjRbUEIsIFBD
LCA4XSwgdDEKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MykKLSAgICBsb2FkaXMg
OFtQQiwgUEMsIDhdLCB0MQotICAgIHdyaXRlQmFycmllcih0MykKLSAgICBsb2FkcCBKU1Zhcmlh
YmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQwCi0gICAgc3RvcmVwIHQzLCBbdDAsIHQxLCA4
XQotICAgIGRpc3BhdGNoKDQpCi0KLQotbWFjcm8gZ2V0R2xvYmFsVmFyKHNpemUpCi0gICAgdHJh
Y2VFeGVjdXRpb24oKQotICAgIGxvYWRwIDE2W1BCLCBQQywgOF0sIHQwCi0gICAgbG9hZGlzIDhb
UEIsIFBDLCA4XSwgdDMKLSAgICBsb2FkcCBbdDBdLCB0MQotICAgIHN0b3JlcCB0MSwgW2Nmciwg
dDMsIDhdCi0gICAgbG9hZHAgKHNpemUgLSAxKSAqIDhbUEIsIFBDLCA4XSwgdDAKLSAgICB2YWx1
ZVByb2ZpbGUodDEsIHQwKQotICAgIGRpc3BhdGNoKHNpemUpCi1lbmQKLQotX2xsaW50X29wX2dl
dF9nbG9iYWxfdmFyOgotICAgIGdldEdsb2JhbFZhcig0KQotCi0KLV9sbGludF9vcF9nZXRfZ2xv
YmFsX3Zhcl93YXRjaGFibGU6Ci0gICAgZ2V0R2xvYmFsVmFyKDUpCi0KLQogX2xsaW50X29wX2lu
aXRfZ2xvYmFsX2NvbnN0OgotX2xsaW50X29wX3B1dF9nbG9iYWxfdmFyOgogICAgIHRyYWNlRXhl
Y3V0aW9uKCkKICAgICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwgdDEKICAgICBsb2FkcCA4W1BCLCBQ
QywgOF0sIHQwCkBAIC05NTgsMjEgKzgyNiwxOSBAQCBfbGxpbnRfb3BfcHV0X2dsb2JhbF92YXI6
CiAKIAogX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOgotX2xsaW50X29wX3B1dF9n
bG9iYWxfdmFyX2NoZWNrOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkcCAyNFtQQiwg
UEMsIDhdLCB0MgogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0MQogICAgIGxvYWRwIDhbUEIs
IFBDLCA4XSwgdDAKLSAgICBidGJueiBbdDJdLCAub3BQdXRHbG9iYWxWYXJDaGVja1Nsb3cKKyAg
ICBidGJueiBbdDJdLCAub3BJbml0R2xvYmFsQ29uc3RDaGVja1Nsb3cKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHQxLCB0MikKICAgICB3cml0ZUJhcnJpZXIodDIpCiAgICAgc3RvcmVwIHQy
LCBbdDBdCiAgICAgZGlzcGF0Y2goNSkKLS5vcFB1dEdsb2JhbFZhckNoZWNrU2xvdzoKLSAgICBj
YWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRfZ2xvYmFsX3Zhcl9jaGVjaykKKy5vcElu
aXRHbG9iYWxDb25zdENoZWNrU2xvdzoKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF9pbml0X2dsb2JhbF9jb25zdF9jaGVjaykKICAgICBkaXNwYXRjaCg1KQogCi0KIG1hY3JvIGdl
dEJ5SWQoZ2V0UHJvcGVydHlTdG9yYWdlKQogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICAjIFdl
IG9ubHkgZG8gbW9ub21vcnBoaWMgZ2V0X2J5X2lkIGNhY2hpbmcgZm9yIG5vdywgYW5kIHdlIGRv
IG5vdCBtb2RpZnkgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Njb3BlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3Bw
CmluZGV4IDhmZDQ5Yjg2MTE4ODVhNDFhYzRkNGJiM2I3NzVkMjI2NmZmZWYxZWMuLmI5ZDZlZGJh
NDQ3ZTRiODcyYzY5ZTM0MzViYjJhYjMwNTNhNzZkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2NvcGUuY3BwCkBAIC04NiwxMjYgKzg2LDM4NCBAQCBpbnQgSlNTY29wZTo6
bG9jYWxEZXB0aCgpCiAgICAgcmV0dXJuIHNjb3BlRGVwdGg7CiB9CiAKLUpTVmFsdWUgSlNTY29w
ZTo6cmVzb2x2ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllcikKLXsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICBB
U1NFUlQoc2NvcGUpOworc3RydWN0IExvb2t1cFJlc3VsdCB7CisgICAgSlNWYWx1ZSBiYXNlKCkg
Y29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKyAgICB2b2lkIHNldEJhc2UoSlNWYWx1ZSBiYXNlKSB7IEFTU0VSVChi
YXNlKTsgbV9iYXNlID0gYmFzZTsgfQorICAgIHZvaWQgc2V0VmFsdWUoSlNWYWx1ZSB2YWx1ZSkg
eyBBU1NFUlQodmFsdWUpOyBtX3ZhbHVlID0gdmFsdWU7IH0KIAotICAgIGRvIHsKLSAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGUpOwotICAgICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwotICAgICAgICBpZiAob2JqZWN0LT5nZXRQcm9w
ZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90KSkKLSAgICAgICAgICAgIHJldHVy
biBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnRpZmllcik7Ci0gICAgfSB3aGlsZSAoKHNj
b3BlID0gc2NvcGUtPm5leHQoKSkpOworcHJpdmF0ZToKKyAgICBKU1ZhbHVlIG1fYmFzZTsKKyAg
ICBKU1ZhbHVlIG1fdmFsdWU7Cit9OwogCi0gICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbEZyYW1l
LCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnRpZmllcikpOwor
CitzdGF0aWMgdm9pZCBzZXRQdXRQcm9wZXJ0eUFjY2Vzc09mZnNldChQdXRUb0Jhc2VPcGVyYXRp
b24qIG9wZXJhdGlvbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIEFTU0VSVChpc091
dE9mTGluZU9mZnNldChvZmZzZXQpKTsKKyAgICBvcGVyYXRpb24tPm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgIG9wZXJhdGlvbi0+bV9vZmZzZXRJbkJ1dHRlcmZseSA9IG9mZnNldEluQnV0dGVyZmx5
KG9mZnNldCk7Cit9CisKK3N0YXRpYyBib29sIGV4ZWN1dGVSZXNvbHZlT3BlcmF0aW9ucyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUmVzb2x2ZU9wZXJhdGlvbiogcGMsIExvb2t1cFJlc3VsdCYgcmVzdWx0KQorewor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHN3aXRjaCAocGMtPm1fb3BlcmF0aW9uKSB7Cisg
ICAgICAgIGNhc2UgUmVzb2x2ZUZhaWw6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGNhc2UgUmVzb2x2ZUNoZWNrRm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9iYWxTY29wZTog
eworICAgICAgICAgICAgd2hpbGUgKEpTU2NvcGUqIG5leHRTY29wZSA9IHNjb3BlLT5uZXh0KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2NvcGUtPmlzQWN0aXZhdGlvbk9iamVjdCgpICYmIHNj
b3BlLT5zdHJ1Y3R1cmUoKSAhPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1
Y3R1cmUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIEFTU0VSVChzY29wZS0+aXNOYW1lU2NvcGVPYmplY3QoKSB8fCBzY29wZS0+aXNWYXJpYWJs
ZU9iamVjdCgpIHx8IHNjb3BlLT5pc0dsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgICAgICAgICBz
Y29wZSA9IG5leHRTY29wZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBjKys7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFJlc29sdmVTZXRCYXNlVG9V
bmRlZmluZWQ6CisgICAgICAgICAgICByZXN1bHQuc2V0QmFzZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgICAgIHBjKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBSZXNv
bHZlU2V0QmFzZVRvU2NvcGU6CisgICAgICAgICAgICByZXN1bHQuc2V0QmFzZShzY29wZSk7Cisg
ICAgICAgICAgICBwYysrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgUmVz
b2x2ZVJldHVyblNjb3BlQXNCYXNlOgorICAgICAgICAgICAgcmVzdWx0LnNldEJhc2Uoc2NvcGUp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgUmVzb2x2ZVNldEJhc2VU
b0dsb2JhbDoKKyAgICAgICAgICAgIHJlc3VsdC5zZXRCYXNlKHNjb3BlLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgICAgICAgICBwYysrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNh
c2UgUmVzb2x2ZVNraXBTY29wZXM6IHsKKyAgICAgICAgICAgIGludCBjb3VudCA9IHBjLT5tX3Nj
b3Blc1RvU2tpcDsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAg
IHNjb3BlID0gc2NvcGUtPm5leHQoKTsKKyAgICAgICAgICAgIEFTU0VSVChzY29wZSk7CisgICAg
ICAgICAgICBwYysrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBSZXNvbHZlU2tpcFRvcFNjb3BlTm9kZToKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUt
PnIocGMtPm1fYWN0aXZhdGlvblJlZ2lzdGVyKS5qc1ZhbHVlKCkpCisgICAgICAgICAgICAgICAg
c2NvcGUgPSBzY29wZS0+bmV4dCgpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlKTsKKyAgICAg
ICAgICAgIHBjKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBSZXNvbHZl
R2V0QW5kUmV0dXJuU2NvcGVkVmFyOgorICAgICAgICAgICAgQVNTRVJUKGpzQ2FzdDxKU1Zhcmlh
YmxlT2JqZWN0Kj4oc2NvcGUpLT5yZWdpc3RlckF0KHBjLT5tX29mZnNldCkuZ2V0KCkpOworICAg
ICAgICAgICAgcmVzdWx0LnNldFZhbHVlKGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oc2NvcGUp
LT5yZWdpc3RlckF0KHBjLT5tX29mZnNldCkuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGNhc2UgUmVzb2x2ZUdldEFuZFJldHVybkdsb2JhbFZhcjoKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXRWYWx1ZShwYy0+bV9yZWdpc3RlckFkZHJlc3MtPmdldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFJlc29sdmVHZXRBbmRSZXR1cm5HbG9i
YWxWYXJXYXRjaGFibGU6CisgICAgICAgICAgICByZXN1bHQuc2V0VmFsdWUocGMtPm1fcmVnaXN0
ZXJBZGRyZXNzLT5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2Fz
ZSBSZXNvbHZlUmV0dXJuR2xvYmFsT2JqZWN0QXNCYXNlOgorICAgICAgICAgICAgcmVzdWx0LnNl
dEJhc2UoY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGNhc2UgUmVzb2x2ZUdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5
OiB7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmds
b2JhbE9iamVjdCgpOworICAgICAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCkg
PT0gcGMtPm1fc3RydWN0dXJlLmdldCgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnNldFZh
bHVlKGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KHBjLT5tX29mZnNldCkpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgaWYgKCFnbG9iYWxPYmpl
Y3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBpZiAo
Y2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5zdHJ1
Y3R1cmUoKTsKKworICAgICAgICAgICAgLy8gRG9uJ3QgdHJ5IHRvIGNhY2hlIHByb3RvdHlwZSBs
b29rdXBzCisgICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0ICE9IHNsb3Quc2xvdEJhc2UoKSB8
fCAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnNldFZhbHVlKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcGMtPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICBwYy0+bV9vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgcmVz
dWx0LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CiB9CiAKLUpTVmFsdWUgSlNTY29wZTo6cmVzb2x2ZVNraXAoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIGludCBza2lw
KQordGVtcGxhdGUgPEpTU2NvcGU6Okxvb2t1cE1vZGUgbW9kZSwgSlNTY29wZTo6UmV0dXJuVmFs
dWVzIHJldHVyblZhbHVlcz4gSlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmVDb250YWluaW5nU2Nv
cGVJbnRlcm5hbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllciwgUHJvcGVydHlTbG90JiBzbG90LCBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbj4qIG9wZXJh
dGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9uLCBib29sICkKIHsK
ICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKICAgICBBU1NFUlQoc2Nv
cGUpOwotCisgICAgaW50IHNjb3BlQ291bnQgPSAwOworICAgIGJvb2wgc2VlbkdlbmVyaWNPYmpl
Y3RTY29wZSA9IGZhbHNlOworICAgIGJvb2wgcmVxdWlyZXNEeW5hbWljQ2hlY2tzID0gZmFsc2U7
CisgICAgYm9vbCBza2lwVG9wU2NvcGVOb2RlID0gZmFsc2U7CisgICAgaW50IGFjdGl2YXRpb25S
ZWdpc3RlciA9IDA7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwotCi0gICAgYm9vbCBjaGVja1RvcExldmVsID0gY29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSAmJiBjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAg
ICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BMZXZlbCk7Ci0gICAgaWYgKGNoZWNrVG9wTGV2ZWwg
JiYgc2tpcC0tKSB7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIoY29kZUJsb2Nr
LT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKQotICAgICAgICAgICAgc2NvcGUgPSBz
Y29wZS0+bmV4dCgpOwotICAgIH0KLSAgICB3aGlsZSAoc2tpcC0tKSB7Ci0gICAgICAgIHNjb3Bl
ID0gc2NvcGUtPm5leHQoKTsKLSAgICAgICAgQVNTRVJUKHNjb3BlKTsKLSAgICB9CisgICAgaWYg
KG1vZGUgPT0gVW5rbm93blJlc29sdmUpIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhdGlvbnMtPmlz
RW1wdHkoKSk7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlICYmIGNvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCkpIHsKKyAgICAgICAgICAgIGFjdGl2
YXRpb25SZWdpc3RlciA9IGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCk7CisgICAgICAg
ICAgICBKU1ZhbHVlIGFjdGl2YXRpb24gPSBjYWxsRnJhbWUtPnIoYWN0aXZhdGlvblJlZ2lzdGVy
KS5qc1ZhbHVlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHRoZSBhY3RpdmF0
aW9uIHJlZ2lzdGVyIGRvZXNuJ3QgbWF0Y2ggb3VyIGFjdHVhbCBzY29wZSwgYSBkeW5hbWljCisg
ICAgICAgICAgICAvLyBzY29wZSBoYXMgYmVlbiBpbnNlcnRlZCBzbyB3ZSBzaG91bGRuJ3Qgc2tp
cCB0aGUgdG9wIHNjb3BlIG5vZGUuCisgICAgICAgICAgICBpZiAoYWN0aXZhdGlvbiA9PSBzY29w
ZSkgeworICAgICAgICAgICAgICAgIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uLmFz
Q2VsbCgpKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXJlcXVpcmVzRHluYW1pY0NoZWNrcykgeworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoanNDYXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb24uYXNDZWxsKCkpLT5zeW1i
b2xUYWJsZSgpLT5nZXQoaWRlbnRpZmllci5pbXBsKCkpLmlzTnVsbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2NvcGUgPSBzY29wZS0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoc2NvcGUpOworICAgICAgICAgICAgICAgICAgICBza2lwVG9wU2NvcGVOb2RlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFhY3RpdmF0aW9uKQor
ICAgICAgICAgICAgICAgIHNraXBUb3BTY29wZU5vZGUgPSB0cnVlOworICAgICAgICB9CisgICAg
fSBlbHNlCisgICAgICAgIEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOworCisgICAgaWYgKGNv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBFdmFsQ29kZSAmJiBzY29wZS0+bmV4dCgpKQorICAgICAg
ICByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSB0cnVlOworCisgICAgaWYgKG1vZGUgPT0gVW5rbm93
blJlc29sdmUgJiYgcHV0VG9CYXNlT3BlcmF0aW9uKQorICAgICAgICBwdXRUb0Jhc2VPcGVyYXRp
b24tPm1fa2luZCA9IFB1dFRvQmFzZU9wZXJhdGlvbjo6R2VuZXJpYzsKIAogICAgIGRvIHsKICAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGUpOwot
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwotICAgICAgICBpZiAob2JqZWN0LT5n
ZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90KSkKLSAgICAgICAgICAg
IHJldHVybiBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnRpZmllcik7CisgICAgICAgIHNs
b3QgPSBQcm9wZXJ0eVNsb3Qob2JqZWN0KTsKKworICAgICAgICBib29sIGN1cnJlbnRTY29wZU5l
ZWRzRHluYW1pY0NoZWNrcyA9IGZhbHNlOworICAgICAgICBpZiAoIShzY29wZS0+aXNWYXJpYWJs
ZU9iamVjdCgpIHx8IHNjb3BlLT5pc05hbWVTY29wZU9iamVjdCgpKSB8fCAoc2NvcGUtPm5leHQo
KSAmJiBzY29wZS0+aXNEeW5hbWljU2NvcGUoY3VycmVudFNjb3BlTmVlZHNEeW5hbWljQ2hlY2tz
KSkpCisgICAgICAgICAgICBzZWVuR2VuZXJpY09iamVjdFNjb3BlID0gdHJ1ZTsKKworICAgICAg
ICByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSByZXF1aXJlc0R5bmFtaWNDaGVja3MgfHwgY3VycmVu
dFNjb3BlTmVlZHNEeW5hbWljQ2hlY2tzOworCisgICAgICAgIGlmIChvYmplY3QtPmdldFByb3Bl
cnR5U2xvdChjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3QpKSB7CisgICAgICAgICAgICBpZiAo
bW9kZSA9PSBVbmtub3duUmVzb2x2ZSkgeworICAgICAgICAgICAgICAgIGlmIChzZWVuR2VuZXJp
Y09iamVjdFNjb3BlKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAg
ICAgICAgaWYgKHB1dFRvQmFzZU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgcHV0VG9C
YXNlT3BlcmF0aW9uLT5tX2lzRHluYW1pYyA9IHJlcXVpcmVzRHluYW1pY0NoZWNrczsKKyAgICAg
ICAgICAgICAgICBpZiAoIXNjb3BlLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
R2xvYmFsIGxvb2t1cCBvZiBzb21lIGtpbmQKKyAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+
c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFlbnRyeS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
cXVpcmVzRHluYW1pY0NoZWNrcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6Y2hlY2tGb3JEeW5hbWljRW50cmllc0JlZm9y
ZUdsb2JhbFNjb3BlKCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHV0VG9CYXNl
T3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0
aW9uLT5tX2lzRHluYW1pYyA9IHJlcXVpcmVzRHluYW1pY0NoZWNrczsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fa2luZCA9IFB1dFRvQmFzZU9wZXJh
dGlvbjo6UmVhZG9ubHk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW50
cnkuY291bGRCZVdhdGNoZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXRUb0Jhc2VPcGVyYXRpb24tPm1fa2luZCA9IFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsVmFy
aWFibGVQdXRDaGVja2VkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jh
c2VPcGVyYXRpb24tPm1fcHJlZGljYXRlUG9pbnRlciA9IGVudHJ5LmFkZHJlc3NPZklzV2F0Y2hl
ZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fa2luZCA9IFB1dFRvQmFzZU9w
ZXJhdGlvbjo6R2xvYmFsVmFyaWFibGVQdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHV0VG9CYXNlT3BlcmF0aW9uLT5tX3JlZ2lzdGVyQWRkcmVzcyA9ICZnbG9iYWxPYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJldHVyblZhbHVlcykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBSZXR1cm5WYWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIXB1dFRvQmFzZU9wZXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OmdldEFuZFJldHVybkds
b2JhbFZhcigmZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLCBlbnRy
eS5jb3VsZEJlV2F0Y2hlZCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJldHVybkJhc2U6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHB1dFRvQmFzZU9wZXJhdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OnJldHVy
bkdsb2JhbE9iamVjdEFzQmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmV0dXJuQmFzZUFuZFZhbHVlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwdXRUb0Jhc2VPcGVyYXRpb24pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0
aW9uOjpzZXRCYXNlVG9HbG9iYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OmdldEFuZFJldHVybkdsb2JhbFZhcigm
Z2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLCBlbnRyeS5jb3VsZEJl
V2F0Y2hlZCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFJldHVyblRoaXNBbmRWYWx1ZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIXB1dFRvQmFzZU9wZXJhdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OnNldEJh
c2VUb1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25z
LT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6Z2V0QW5kUmV0dXJuR2xvYmFsVmFyKCZnbG9iYWxP
YmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSksIGVudHJ5LmNvdWxkQmVXYXRjaGVk
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5zbG90QmFzZSgp
ICE9IGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlc0R5bmFtaWNDaGVja3MpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVy
YXRpb246OmNoZWNrRm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9iYWxTY29wZSgpKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHB1dFRvQmFzZU9wZXJhdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9pc0R5bmFtaWMgPSByZXF1
aXJlc0R5bmFtaWNDaGVja3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNl
T3BlcmF0aW9uLT5tX2tpbmQgPSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFByb3BlcnR5UHV0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9zdHJ1
Y3R1cmUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5vd25lckV4ZWN1dGFibGUoKSwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0UHV0UHJvcGVydHlBY2Nlc3NPZmZzZXQocHV0VG9CYXNl
T3BlcmF0aW9uLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuVmFsdWVzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFJldHVyblZhbHVlOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghcHV0VG9CYXNlT3BlcmF0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6Z2V0QW5kUmV0
dXJuR2xvYmFsUHJvcGVydHkoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJldHVybkJhc2U6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHB1dFRvQmFzZU9wZXJhdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OnJldHVy
bkdsb2JhbE9iamVjdEFzQmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmV0dXJuQmFzZUFuZFZhbHVlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwdXRUb0Jhc2VPcGVyYXRpb24pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0
aW9uOjpzZXRCYXNlVG9HbG9iYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OmdldEFuZFJldHVybkdsb2JhbFByb3Bl
cnR5KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBSZXR1cm5UaGlzQW5kVmFsdWU6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFwdXRUb0Jhc2VPcGVyYXRpb24pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpzZXRCYXNlVG9V
bmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBw
ZW5kKFJlc29sdmVPcGVyYXRpb246OmdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5KCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZXNEeW5h
bWljQ2hlY2tzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbCBsZXhpY2FsIGxvb2t1
cAorICAgICAgICAgICAgICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiB2YXJpYWJsZU9iamVjdCA9
IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oc2NvcGUpOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQodmFyaWFibGVPYmplY3QpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFi
bGVPYmplY3QtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJs
ZUVudHJ5IGVudHJ5ID0gdmFyaWFibGVPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudGlm
aWVyLmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIFZhcmlhYmxlIHdhcyBhY3R1YWxs
eSBpbnNlcnRlZCBieSBldmFsCisgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pc051bGwo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0PEpTTmFt
ZVNjb3BlKj4odmFyaWFibGVPYmplY3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
ZmFpbDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChw
dXRUb0Jhc2VPcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9w
ZXJhdGlvbi0+bV9raW5kID0gZW50cnkuaXNSZWFkT25seSgpID8gUHV0VG9CYXNlT3BlcmF0aW9u
OjpSZWFkb25seSA6IFB1dFRvQmFzZU9wZXJhdGlvbjo6VmFyaWFibGVQdXQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fc3RydWN0dXJlLnNldChjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxl
KCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJl
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX29mZnNl
dCA9IGVudHJ5LmdldEluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VP
cGVyYXRpb24tPm1fc2NvcGVEZXB0aCA9IChza2lwVG9wU2NvcGVOb2RlID8gMSA6IDApICsgc2Nv
cGVDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlm
IChza2lwVG9wU2NvcGVOb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+
YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OnNraXBUb3BTY29wZU5vZGUoYWN0aXZhdGlvblJlZ2lz
dGVyKSk7CisKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVP
cGVyYXRpb246OnNraXBTY29wZXMoc2NvcGVDb3VudCkpOworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHJldHVyblZhbHVlcykgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFJldHVybkJh
c2VBbmRWYWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChS
ZXNvbHZlT3BlcmF0aW9uOjpzZXRCYXNlVG9TY29wZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpnZXRBbmRSZXR1cm5TY29w
ZWRWYXIoZW50cnkuZ2V0SW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXR1cm5CYXNlOgorICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OnJldHVyblNjb3Bl
QXNCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBSZXR1cm5UaGlzQW5kVmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6c2V0QmFzZVRvVW5kZWZpbmVk
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFsbHRocm91Z2gKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBSZXR1cm5WYWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpnZXRBbmRSZXR1cm5TY29wZWRWYXIoZW50
cnkuZ2V0SW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmYWlsOgorICAgICAgICAgICAgICAgIGlmICghb3Bl
cmF0aW9ucy0+c2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLT5hcHBlbmQo
UmVzb2x2ZU9wZXJhdGlvbjo6cmVzb2x2ZUZhaWwoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9CisgICAgICAgIHNjb3BlQ291bnQrKzsKICAg
ICB9IHdoaWxlICgoc2NvcGUgPSBzY29wZS0+bmV4dCgpKSk7Ci0KLSAgICByZXR1cm4gdGhyb3dF
cnJvcihjYWxsRnJhbWUsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBp
ZGVudGlmaWVyKSk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gVW5rbm93blJlc29sdmUpIHsKKyAg
ICAgICAgQVNTRVJUKG9wZXJhdGlvbnMtPmlzRW1wdHkoKSk7CisgICAgICAgIGlmIChzZWVuR2Vu
ZXJpY09iamVjdFNjb3BlKSB7CisgICAgICAgICAgICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2
ZU9wZXJhdGlvbjo6cmVzb2x2ZUZhaWwoKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocHV0VG9CYXNlT3BlcmF0aW9uKSB7CisgICAgICAgICAgICBwdXRU
b0Jhc2VPcGVyYXRpb24tPm1faXNEeW5hbWljID0gcmVxdWlyZXNEeW5hbWljQ2hlY2tzOworICAg
ICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBQdXRUb0Jhc2VPcGVyYXRpb246
Okdsb2JhbFByb3BlcnR5UHV0OworICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX3N0
cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX29mZnNl
dCA9IC0xOworICAgICAgICB9CisgICAgICAgIGlmIChyZXF1aXJlc0R5bmFtaWNDaGVja3MpCisg
ICAgICAgICAgICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6Y2hlY2tGb3JE
eW5hbWljRW50cmllc0JlZm9yZUdsb2JhbFNjb3BlKCkpOworICAgICAgICBzd2l0Y2ggKHJldHVy
blZhbHVlcykgeworICAgICAgICBjYXNlIFJldHVyblZhbHVlOgorICAgICAgICAgICAgQVNTRVJU
KCFwdXRUb0Jhc2VPcGVyYXRpb24pOworICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJl
c29sdmVPcGVyYXRpb246OmdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmV0dXJuQmFzZToKKyAgICAgICAgICAgIEFTU0VSVChw
dXRUb0Jhc2VPcGVyYXRpb24pOworICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29s
dmVPcGVyYXRpb246OnJldHVybkdsb2JhbE9iamVjdEFzQmFzZSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFJldHVybkJhc2VBbmRWYWx1ZToKKyAgICAgICAgICAgIEFTU0VS
VChwdXRUb0Jhc2VPcGVyYXRpb24pOworICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJl
c29sdmVPcGVyYXRpb246OnNldEJhc2VUb0dsb2JhbCgpKTsKKyAgICAgICAgICAgIG9wZXJhdGlv
bnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpnZXRBbmRSZXR1cm5HbG9iYWxQcm9wZXJ0eSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJldHVyblRoaXNBbmRWYWx1ZToK
KyAgICAgICAgICAgIEFTU0VSVCghcHV0VG9CYXNlT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpzZXRCYXNlVG9VbmRlZmluZWQoKSk7
CisgICAgICAgICAgICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6Z2V0QW5k
UmV0dXJuR2xvYmFsUHJvcGVydHkoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAotSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlR2xvYmFs
KAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLAotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIsCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKLSAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4qIGNhY2hlZFN0cnVjdHVyZSwKLSAgICBQcm9wZXJ0eU9mZnNldCog
Y2FjaGVkT2Zmc2V0Ci0pCit0ZW1wbGF0ZSA8SlNTY29wZTo6UmV0dXJuVmFsdWVzIHJldHVyblZh
bHVlcz4gSlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmVDb250YWluaW5nU2NvcGUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5U2xvdCYg
c2xvdCwgVmVjdG9yPFJlc29sdmVPcGVyYXRpb24+KiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVy
YXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbiwgYm9vbCBpc1N0cmljdCkKIHsKLSAgICBpZiAoZ2xv
YmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjYWNoZWRTdHJ1Y3R1cmUtPmdldCgpKQotICAgICAg
ICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQoKmNhY2hlZE9mZnNldCk7Ci0K
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QpOwotICAgIGlmICghZ2xvYmFsT2Jq
ZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90KSkKLSAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVy
cm9yKGNhbGxGcmFtZSwgaWRlbnRpZmllcikpOwotCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90
LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnRpZmllcik7Ci0gICAgaWYgKGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLQotICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gZ2xvYmFsT2Jq
ZWN0KSB7Ci0gICAgICAgIGNhY2hlZFN0cnVjdHVyZS0+c2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZ2xvYmFsT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICpjYWNoZWRPZmZzZXQgPSBzbG90LmNhY2hlZE9m
ZnNldCgpOwotICAgIH0KKyAgICBpZiAob3BlcmF0aW9ucy0+c2l6ZSgpKQorICAgICAgICByZXR1
cm4gcmVzb2x2ZUNvbnRhaW5pbmdTY29wZUludGVybmFsPEtub3duUmVzb2x2ZSwgcmV0dXJuVmFs
dWVzPihjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3QsIG9wZXJhdGlvbnMsIHB1dFRvQmFzZU9w
ZXJhdGlvbiwgaXNTdHJpY3QpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSByZXNvbHZlQ29udGFp
bmluZ1Njb3BlSW50ZXJuYWw8VW5rbm93blJlc29sdmUsIHJldHVyblZhbHVlcz4oY2FsbEZyYW1l
LCBpZGVudGlmaWVyLCBzbG90LCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb24sIGlzU3Ry
aWN0KTsKKyAgICBvcGVyYXRpb25zLT5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUpTVmFsdWUgSlNTY29wZTo6cmVzb2x2ZUdsb2JhbER5bmFtaWMoCi0gICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwKLSAgICBp
bnQgc2tpcCwKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4qIGNhY2hlZFN0cnVjdHVy
ZSwKLSAgICBQcm9wZXJ0eU9mZnNldCogY2FjaGVkT2Zmc2V0Ci0pCitKU1ZhbHVlIEpTU2NvcGU6
OnJlc29sdmUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQogewotICAgIEpTU2NvcGUqIHNjb3Bl
ID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgIEFTU0VSVChzY29wZSk7Ci0KLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICBib29sIGNoZWNr
VG9wTGV2ZWwgPSBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIGNvZGVC
bG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwotICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1Rv
cExldmVsKTsKLSAgICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgaWYg
KGNhbGxGcmFtZS0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5q
c1ZhbHVlKCkpCi0gICAgICAgICAgICBzY29wZSA9IHNjb3BlLT5uZXh0KCk7CisgICAgQVNTRVJU
KG9wZXJhdGlvbnMpOworICAgIExvb2t1cFJlc3VsdCBmYXN0UmVzdWx0OworICAgIGlmIChvcGVy
YXRpb25zLT5zaXplKCkgJiYgZXhlY3V0ZVJlc29sdmVPcGVyYXRpb25zKGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT5zY29wZSgpLCBpZGVudGlmaWVyLCBvcGVyYXRpb25zLT5kYXRhKCksIGZhc3RSZXN1
bHQpKSB7CisgICAgICAgIEFTU0VSVChmYXN0UmVzdWx0LnZhbHVlKCkpOworICAgICAgICBBU1NF
UlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gZmFzdFJlc3Vs
dC52YWx1ZSgpOwogICAgIH0KLSAgICB3aGlsZSAoc2tpcC0tKSB7Ci0gICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlKTsKLSAgICAgICAgaWYgKCFv
YmplY3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7Ci0gICAgICAgIGlmICghb2JqZWN0LT5n
ZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90KSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOworICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwogCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gc2xvdC5nZXRWYWx1
ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBpZiAoSlNTY29wZTo6
cmVzb2x2ZUNvbnRhaW5pbmdTY29wZTxSZXR1cm5WYWx1ZT4oY2FsbEZyYW1lLCBpZGVudGlmaWVy
LCBzbG90LCBvcGVyYXRpb25zLCAwLCBmYWxzZSkpIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhdGlv
bnMtPnNpemUoKSk7CisgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRl
bnRpZmllcik7CiAgICAgfQorICAgIEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOwogCi0gICAg
cmV0dXJuIHJlc29sdmVHbG9iYWwoY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBjYWxsRnJhbWUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgY2FjaGVkU3RydWN0dXJlLCBjYWNoZWRPZmZzZXQpOworICAg
IHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJv
cihjYWxsRnJhbWUsIGlkZW50aWZpZXIpKTsKIH0KIAotSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZl
QmFzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwg
Ym9vbCBpc1N0cmljdCkKK0pTVmFsdWUgSlNTY29wZTo6cmVzb2x2ZUJhc2UoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIGJvb2wgaXNTdHJpY3QsIFJl
c29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFz
ZU9wZXJhdGlvbnMpCiB7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7
Ci0gICAgQVNTRVJUKHNjb3BlKTsKLQotICAgIGRvIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGUpOworICAgIEFTU0VSVChvcGVyYXRpb25z
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHB1dFRvQmFzZU9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJh
dGlvbnMpOworICAgIExvb2t1cFJlc3VsdCBmYXN0UmVzdWx0OworICAgIGlmIChvcGVyYXRpb25z
LT5zaXplKCkgJiYgZXhlY3V0ZVJlc29sdmVPcGVyYXRpb25zKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5zY29wZSgpLCBpZGVudGlmaWVyLCBvcGVyYXRpb25zLT5kYXRhKCksIGZhc3RSZXN1bHQpKSB7
CisgICAgICAgIEFTU0VSVChmYXN0UmVzdWx0LmJhc2UoKSk7CisgICAgICAgIEFTU0VSVCghY2Fs
bEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBmYXN0UmVzdWx0LmJhc2Uo
KTsKKyAgICB9CiAKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKLSAgICAgICAg
aWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3Qp
KQotICAgICAgICAgICAgY29udGludWU7CisgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUo
b2JqZWN0KTsKLSAgICB9IHdoaWxlICgoc2NvcGUgPSBzY29wZS0+bmV4dCgpKSk7CisgICAgUHJv
cGVydHlTbG90IHNsb3Q7CisgICAgaWYgKEpTT2JqZWN0KiBiYXNlID0gSlNTY29wZTo6cmVzb2x2
ZUNvbnRhaW5pbmdTY29wZTxSZXR1cm5CYXNlPihjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3Qs
IG9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbnMsIGlzU3RyaWN0KSkgeworICAgICAgICBB
U1NFUlQob3BlcmF0aW9ucy0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGJhc2U7CisgICAgfQog
CiAgICAgaWYgKCFpc1N0cmljdCkKICAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwpAQCAtMjEzLDUwICs0NzEsMTU3IEBAIEpTVmFsdWUgSlNTY29wZTo6cmVz
b2x2ZUJhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIsCiAgICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVFcnJvckZvckludmFs
aWRHbG9iYWxBc3NpZ25tZW50KGNhbGxGcmFtZSwgaWRlbnRpZmllci5zdHJpbmcoKSkpOwogfQog
Ci1KU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXIqIGJhc2UpCitKU1ZhbHVlIEpT
U2NvcGU6OnJlc29sdmVXaXRoQmFzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXIqIGJhc2UsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVy
YXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCiB7Ci0gICAg
SlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAgQVNTRVJUKHNjb3BlKTsK
LQotICAgIGRvIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0
U2NvcGUoc2NvcGUpOworICAgIEFTU0VSVChvcGVyYXRpb25zKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHB1dFRvQmFzZU9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbnMpOworICAgIExvb2t1cFJl
c3VsdCBmYXN0UmVzdWx0OworICAgIGlmIChvcGVyYXRpb25zLT5zaXplKCkgJiYgZXhlY3V0ZVJl
c29sdmVPcGVyYXRpb25zKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5zY29wZSgpLCBpZGVudGlmaWVy
LCBvcGVyYXRpb25zLT5kYXRhKCksIGZhc3RSZXN1bHQpKSB7CisgICAgICAgIEFTU0VSVChmYXN0
UmVzdWx0LmJhc2UoKSk7CisgICAgICAgIEFTU0VSVChmYXN0UmVzdWx0LnZhbHVlKCkpOworICAg
ICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAqYmFzZSA9
IGZhc3RSZXN1bHQuYmFzZSgpOworICAgICAgICByZXR1cm4gZmFzdFJlc3VsdC52YWx1ZSgpOwor
ICAgIH0KIAotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwotICAgICAgICBpZiAo
IW9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnRpZmllciwgc2xvdCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKKyAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAorICAgIFByb3BlcnR5U2xvdCBzbG90OworICAg
IGlmIChKU09iamVjdCogcHJvcGVydHlCYXNlID0gSlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdT
Y29wZTxSZXR1cm5CYXNlQW5kVmFsdWU+KGNhbGxGcmFtZSwgaWRlbnRpZmllciwgc2xvdCwgb3Bl
cmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9ucywgZmFsc2UpKSB7CisgICAgICAgIEFTU0VSVChv
cGVyYXRpb25zLT5zaXplKCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1
ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOwogICAgICAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuZXhjZXB0aW9uKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAotICAgICAg
ICAqYmFzZSA9IEpTVmFsdWUob2JqZWN0KTsKKyAgICAgICAgKmJhc2UgPSBwcm9wZXJ0eUJhc2U7
CiAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9IHdoaWxlICgoc2NvcGUgPSBzY29wZS0+bmV4
dCgpKSk7CisgICAgfQorICAgIEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOwogCiAgICAgcmV0
dXJuIHRocm93RXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNh
bGxGcmFtZSwgaWRlbnRpZmllcikpOwogfQogCi1KU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmVXaXRo
VGhpcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwg
UmVnaXN0ZXIqIGJhc2UpCitKU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyhDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXIqIGJh
c2UsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQogewotICAgIEpTU2NvcGUqIHNjb3Bl
ID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgIEFTU0VSVChzY29wZSk7Ci0KLSAgICBkbyB7Ci0g
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlKTsK
KyAgICBBU1NFUlQob3BlcmF0aW9ucyk7CisgICAgTG9va3VwUmVzdWx0IGZhc3RSZXN1bHQ7Cisg
ICAgaWYgKG9wZXJhdGlvbnMtPnNpemUoKSAmJiBleGVjdXRlUmVzb2x2ZU9wZXJhdGlvbnMoY2Fs
bEZyYW1lLCBjYWxsRnJhbWUtPnNjb3BlKCksIGlkZW50aWZpZXIsIG9wZXJhdGlvbnMtPmRhdGEo
KSwgZmFzdFJlc3VsdCkpIHsKKyAgICAgICAgQVNTRVJUKGZhc3RSZXN1bHQuYmFzZSgpKTsKKyAg
ICAgICAgQVNTRVJUKGZhc3RSZXN1bHQudmFsdWUoKSk7CisgICAgICAgIEFTU0VSVCghY2FsbEZy
YW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgICpiYXNlID0gZmFzdFJlc3VsdC5iYXNlKCk7
CisgICAgICAgIHJldHVybiBmYXN0UmVzdWx0LnZhbHVlKCk7CisgICAgfQogCi0gICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90KG9iamVjdCk7Ci0gICAgICAgIGlmICghb2JqZWN0LT5nZXRQcm9wZXJ0
eVNsb3QoY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90KSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OworICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOwogCisgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgaWYgKEpTT2JqZWN0KiBwcm9w
ZXJ0eUJhc2UgPSBKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlPFJldHVyblRoaXNBbmRW
YWx1ZT4oY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90LCBvcGVyYXRpb25zLCAwLCBmYWxzZSkp
IHsKKyAgICAgICAgQVNTRVJUKG9wZXJhdGlvbnMtPnNpemUoKSk7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnRpZmllcik7CiAgICAgICAgIGlm
IChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwotCi0gICAgICAgICpiYXNlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS5pc0Vudmlyb25tZW50UmVjb3JkKCkgPyBqc1VuZGVmaW5lZCgpIDogSlNWYWx1ZShvYmpl
Y3QpOworICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICAqYmFzZSA9IHByb3BlcnR5QmFz
ZS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaXNFbnZpcm9ubWVudFJlY29yZCgpID8ganNVbmRl
ZmluZWQoKSA6IEpTVmFsdWUocHJvcGVydHlCYXNlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIH0gd2hpbGUgKChzY29wZSA9IHNjb3BlLT5uZXh0KCkpKTsKKyAgICB9CisgICAgQVNTRVJU
KG9wZXJhdGlvbnMtPnNpemUoKSk7CisKKyAgICByZXR1cm4gdGhyb3dFcnJvcihjYWxsRnJhbWUs
IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudGlmaWVyKSk7Cit9
CisKK3ZvaWQgSlNTY29wZTo6cmVzb2x2ZVB1dChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1
ZSBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgSlNWYWx1ZSB2YWx1ZSwgUHV0VG9C
YXNlT3BlcmF0aW9uKiBvcGVyYXRpb24pCit7CisgICAgQVNTRVJUX1VOVVNFRChvcGVyYXRpb24s
IG9wZXJhdGlvbik7CisgICAgQVNTRVJUKGJhc2UpOworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAg
c3dpdGNoIChvcGVyYXRpb24tPm1fa2luZCkgeworICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9u
OjpVbmluaXRpYWxpc2VkOgorICAgICAgICBDUkFTSCgpOworCisgICAgY2FzZSBQdXRUb0Jhc2VP
cGVyYXRpb246OlJlYWRvbmx5OgorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFB1dFRvQmFz
ZU9wZXJhdGlvbjo6R2xvYmFsVmFyaWFibGVQdXRDaGVja2VkOgorICAgICAgICBpZiAoKm9wZXJh
dGlvbi0+bV9wcmVkaWNhdGVQb2ludGVyKQorICAgICAgICAgICAgZ290byBnZW5lcmljSGFuZGxl
cjsKKyAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsVmFyaWFibGVQdXQ6CisgICAg
ICAgIGlmIChvcGVyYXRpb24tPm1faXNEeW5hbWljKSB7CisgICAgICAgICAgICBKU09iamVjdCog
YmFzZU9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGJhc2UpOworICAgICAgICAgICAgaWYgKGJh
c2VPYmplY3QgIT0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYmFzZU9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSkKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihiYXNlT2JqZWN0KS0+YXNzZXJ0
UmVnaXN0ZXJJc0luVGhpc09iamVjdChvcGVyYXRpb24tPm1fcmVnaXN0ZXJBZGRyZXNzKSk7Cisg
ICAgICAgICAgICAgICAgZ290byBnZW5lcmljSGFuZGxlcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBvcGVyYXRpb24tPm1fcmVnaXN0ZXJBZGRyZXNzLT5zZXQoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIGJhc2UuYXNDZWxsKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7CisgICAgICAgIGlm
IChvcGVyYXRpb24tPm1faXNEeW5hbWljKSB7CisgICAgICAgICAgICBKU09iamVjdCogYmFzZU9i
amVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGJhc2UpOworICAgICAgICAgICAgaWYgKGJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSgpICE9IG9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAg
ICAgICAgICAgZ290byBnZW5lcmljSGFuZGxlcjsKKyAgICAgICAgfQorICAgICAgICBKU1Zhcmlh
YmxlT2JqZWN0KiB2YXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oYmFz
ZSk7CisgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5yZWdpc3RlckF0KG9wZXJhdGlvbi0+bV9vZmZz
ZXQpLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgdmFyaWFibGVPYmplY3QsIHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpH
bG9iYWxQcm9wZXJ0eVB1dDogeworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpT
T2JqZWN0Kj4oYmFzZSk7CisgICAgICAgIGlmIChvcGVyYXRpb24tPm1fc3RydWN0dXJlLmdldCgp
ICE9IG9iamVjdC0+c3RydWN0dXJlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgb2Jq
ZWN0LT5wdXREaXJlY3RPZmZzZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG9wZXJhdGlvbi0+
bV9vZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdlbmVyaWNI
YW5kbGVyOgorICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHZW5lcmljOgorICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChvcGVyYXRpb24tPm1faXNTdHJpY3QpOworICAgICAgICBiYXNl
LnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgQVNTRVJUKG9wZXJhdGlvbi0+bV9raW5kID09IFB1dFRvQmFzZU9wZXJhdGlv
bjo6R2xvYmFsUHJvcGVydHlQdXQpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9wZXJhdGlv
bi0+bV9pc1N0cmljdCk7CisgICAgYmFzZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUs
IHNsb3QpOworICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBK
U09iamVjdCogYmFzZU9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGJhc2UpOworICAgIGlmICgh
YmFzZU9iamVjdC0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChzbG90LmJhc2UoKSAhPSBjYWxsRnJhbWUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzbG90LmJhc2UoKSAh
PSBiYXNlT2JqZWN0KQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFiYXNlT2JqZWN0LT5o
YXNJbmxpbmVTdG9yYWdlKCkpOworICAgIG9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFi
bGUoKSwgYmFzZU9iamVjdC0+c3RydWN0dXJlKCkpOworICAgIHNldFB1dFByb3BlcnR5QWNjZXNz
T2Zmc2V0KG9wZXJhdGlvbiwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgcmV0dXJuOworfQor
CitKU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmVHbG9iYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlc29sdmVPcGVyYXRpb24qIHJlc29sdmVPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKHJlc29s
dmVPcGVyYXRpb24pOworICAgIEFTU0VSVChyZXNvbHZlT3BlcmF0aW9uLT5tX29wZXJhdGlvbiA9
PSBSZXNvbHZlR2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHkpOworICAgIEFTU0VSVF9VTlVTRUQo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxP
YmplY3QpOworCisgICAgTG9va3VwUmVzdWx0IGZhc3RSZXN1bHQ7CisgICAgaWYgKGV4ZWN1dGVS
ZXNvbHZlT3BlcmF0aW9ucyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+c2NvcGUoKSwgaWRlbnRpZmll
ciwgcmVzb2x2ZU9wZXJhdGlvbiwgZmFzdFJlc3VsdCkpIHsKKyAgICAgICAgQVNTRVJUKGZhc3RS
ZXN1bHQudmFsdWUoKSk7CisgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgIHJldHVybiBmYXN0UmVzdWx0LnZhbHVlKCk7CisgICAgfQorCisgICAgaWYg
KGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAK
ICAgICByZXR1cm4gdGhyb3dFcnJvcihjYWxsRnJhbWUsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxl
RXJyb3IoY2FsbEZyYW1lLCBpZGVudGlmaWVyKSk7CiB9CiAKKwogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgKaW5kZXggMDExYWZmNTdlMjdj
NmI0NTQ4YWJlZGQ1NTQ5M2Y1MTdkNGQxZGM4YS4uYTlhOWRkOGQ4ZGVmNjlkNTljYjQ2NmNkZmQ5
NjNlNzhhODA4M2FmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTY29wZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaApA
QCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBKU1Njb3BlX2gKIAogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVzb2x2ZU9wZXJhdGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtNDEsMjUgKzQyLDEyIEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBKU09iamVjdCogb2JqZWN0QXRTY29wZShKU1Njb3BlKik7CiAKLSAgICBzdGF0aWMgSlNWYWx1
ZSByZXNvbHZlKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSByZXNvbHZlU2tpcChDYWxsRnJhbWUqLCBjb25zdCBJZGVudGlmaWVyJiwgaW50IHNraXAp
OwotICAgIHN0YXRpYyBKU1ZhbHVlIHJlc29sdmVHbG9iYWwoCi0gICAgICAgIENhbGxGcmFtZSos
Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LAotICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4qIGNhY2hlZFN0
cnVjdHVyZSwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQqIGNhY2hlZE9mZnNldAotICAgICk7Ci0g
ICAgc3RhdGljIEpTVmFsdWUgcmVzb2x2ZUdsb2JhbER5bmFtaWMoCi0gICAgICAgIENhbGxGcmFt
ZSosCi0gICAgICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgICAgICBpbnQgc2tpcCwKLSAgICAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+KiBjYWNoZWRTdHJ1Y3R1cmUsCi0gICAgICAg
IFByb3BlcnR5T2Zmc2V0KiBjYWNoZWRPZmZzZXQKLSAgICApOwotICAgIHN0YXRpYyBKU1ZhbHVl
IHJlc29sdmVCYXNlKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImLCBib29sIGlzU3RyaWN0
KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZlV2l0aEJhc2UoQ2FsbEZyYW1lKiwgY29uc3Qg
SWRlbnRpZmllciYsIFJlZ2lzdGVyKiBiYXNlKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZl
V2l0aFRoaXMoQ2FsbEZyYW1lKiwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVyKiBiYXNlKTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZlKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXIm
LCBSZXNvbHZlT3BlcmF0aW9ucyopOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlc29sdmVCYXNlKENh
bGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImLCBib29sIGlzU3RyaWN0LCBSZXNvbHZlT3BlcmF0
aW9ucyosIFB1dFRvQmFzZU9wZXJhdGlvbiopOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlc29sdmVX
aXRoQmFzZShDYWxsRnJhbWUqLCBjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXIqIGJhc2UsIFJl
c29sdmVPcGVyYXRpb25zKiwgUHV0VG9CYXNlT3BlcmF0aW9uKik7CisgICAgc3RhdGljIEpTVmFs
dWUgcmVzb2x2ZVdpdGhUaGlzKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3Rl
ciogYmFzZSwgUmVzb2x2ZU9wZXJhdGlvbnMqKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZl
R2xvYmFsKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImLCBKU0dsb2JhbE9iamVjdCosIFJl
c29sdmVPcGVyYXRpb24qKTsKKyAgICBzdGF0aWMgdm9pZCByZXNvbHZlUHV0KENhbGxGcmFtZSos
IEpTVmFsdWUgYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUsIFB1dFRvQmFzZU9wZXJh
dGlvbiopOwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCkBAIC04MCw2ICs2OCwxNiBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAg
V3JpdGVCYXJyaWVyPEpTU2NvcGU+IG1fbmV4dDsKKyAgICBlbnVtIFJldHVyblZhbHVlcyB7Cisg
ICAgICAgIFJldHVyblZhbHVlID0gMSwKKyAgICAgICAgUmV0dXJuQmFzZSA9IDIsCisgICAgICAg
IFJldHVyblRoaXMgPSA0LAorICAgICAgICBSZXR1cm5CYXNlQW5kVmFsdWUgPSBSZXR1cm5WYWx1
ZSB8IFJldHVybkJhc2UsCisgICAgICAgIFJldHVyblRoaXNBbmRWYWx1ZSA9IFJldHVyblZhbHVl
IHwgUmV0dXJuVGhpcywKKyAgICB9OworICAgIGVudW0gTG9va3VwTW9kZSB7IFVua25vd25SZXNv
bHZlLCBLbm93blJlc29sdmUgfTsKKyAgICB0ZW1wbGF0ZSA8TG9va3VwTW9kZSwgUmV0dXJuVmFs
dWVzPiBzdGF0aWMgSlNPYmplY3QqIHJlc29sdmVDb250YWluaW5nU2NvcGVJbnRlcm5hbChDYWxs
RnJhbWUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgUmVzb2x2ZU9wZXJhdGlv
bnMqLCBQdXRUb0Jhc2VPcGVyYXRpb24qLCBib29sIGlzU3RyaWN0KTsKKyAgICB0ZW1wbGF0ZSA8
UmV0dXJuVmFsdWVzPiBzdGF0aWMgSlNPYmplY3QqIHJlc29sdmVDb250YWluaW5nU2NvcGUoQ2Fs
bEZyYW1lKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYsIFJlc29sdmVPcGVyYXRp
b25zKiwgUHV0VG9CYXNlT3BlcmF0aW9uKiwgYm9vbCBpc1N0cmljdCk7CiB9OwogCiBpbmxpbmUg
SlNTY29wZTo6SlNTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU1Njb3BlKiBuZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcAppbmRleCBjODE1ZGNkMTEyYWJlMGVlMzViYThkNTRk
NTQ5N2Y0ZWM0MDI5YjJkLi45YjAzYTJjNjQ0ZGQ5OGMxMTZjYWU0YTkyY2Q3ODMzNWRkODUwNjUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2Jq
ZWN0LmNwcApAQCAtMzEsNCArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY29uc3QgQ2xh
c3NJbmZvIEpTVmFyaWFibGVPYmplY3Q6OnNfaW5mbyA9IHsgIlZhcmlhYmxlT2JqZWN0IiwgJkJh
c2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1ZhcmlhYmxlT2JqZWN0KSB9
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFyaWFibGVPYmplY3QuaAppbmRleCAyNTk2MWRjMDk0NGU4ZTNlODcyYjg0YjFhM2M4
YzcxZjhlYjQ5YzhmLi4zZmY3YWE4NDE0NjU2NjEzNmUyZmQwYjlhYmMyOGE4M2ZlYzlkODBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5o
CkBAIC01Myw2ICs1Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJu
ICZtX3JlZ2lzdGVyczsgfQogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mUmVnaXN0ZXJz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTVmFyaWFibGVPYmplY3QsIG1fcmVnaXN0ZXJz
KTsgfQogCisgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAppbmRleCBmNDVlOWYxZDkyYWU5OTU3OTMwMjU3NWEzZTQ1NjA0NmMxMmY0N2M2Li41
ZjEyOTk3NjY5Y2IxMjBmN2FjOWZkNDRlMjliYTE0MDA0MzUwNzcxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtMTQwLDYgKzE0MCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlj
dGlvbmFyeUtpbmQgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CiAgICAgICAgIGJvb2wgaXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2RpY3Rpb25hcnlLaW5kID09IFVu
Y2FjaGVkRGljdGlvbmFyeUtpbmQ7IH0KIAorICAgICAgICBib29sIHByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGUoKSB7IHJldHVybiBtX2RpY3Rpb25hcnlLaW5kICE9IFVuY2FjaGVkRGljdGlv
bmFyeUtpbmQgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCk7IH0KKwog
ICAgICAgICAvLyBUeXBlIGFjY2Vzc29ycy4KICAgICAgICAgY29uc3QgVHlwZUluZm8mIHR5cGVJ
bmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8p
OyByZXR1cm4gbV90eXBlSW5mbzsgfQogICAgICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>