<?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>118662</bug_id>
          
          <creation_ts>2013-07-15 02:05:40 -0700</creation_ts>
          <short_desc>ASSERTION FAILED: divot &gt;= divotLineStart in JSC::ASTBuilder::setExceptionLocation</short_desc>
          <delta_ts>2013-07-30 10:01:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>116980</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Renata Hodovan">rhodovan.u-szeged</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>chris_curtis</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>roger_fong</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>908340</commentid>
    <comment_count>0</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2013-07-15 02:05:40 -0700</bug_when>
    <thetext>The following test crashes on the assertion above: 

function toFuzz() {
    if (PriorityQueue.prototype.doSort() instanceof (this ^= function() {
    })) return 2; 
}

toFuzz();


Tested on: Linux 13.04, PC, x86_64.

Backtrace:
==========

Program received signal SIGSEGV, Segmentation fault.
0x0000000000435185 in WTFCrash () at /home/reni/Data/REPOS/webkitnix/Source/WTF/wtf/Assertions.cpp:339
339	    *(int *)(uintptr_t)0xbbadbeef = 0;
(gdb) bt
#0  0x0000000000435185 in WTFCrash () at /home/reni/Data/REPOS/webkitnix/Source/WTF/wtf/Assertions.cpp:339
#1  0x000000000073ec02 in JSC::ASTBuilder::setExceptionLocation (node=0xeed7b0, start=28, divot=72, end=100, divotLine=3, divotLineStart=94)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/ASTBuilder.h:656
#2  0x00000000007353a4 in JSC::ASTBuilder::makeBinaryNode (this=0x7fffffffba00, location=..., token=30605, lhs=&lt;incomplete type&gt;, rhs=&lt;incomplete type&gt;)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/ASTBuilder.h:902
#3  0x000000000073e6a4 in JSC::ASTBuilder::appendBinaryOperation (this=0x7fffffffba00, location=..., operandStackDepth=@0x7fffffffb400: 1, lhs=..., rhs=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/ASTBuilder.h:575
#4  0x000000000075a6bf in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseBinaryExpression&lt;JSC::ASTBuilder&gt; (this=0x7fffffffc000, context=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:1286
#5  0x000000000075934b in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseConditionalExpression&lt;JSC::ASTBuilder&gt; (this=0x7fffffffc000, context=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:1218
#6  0x0000000000757101 in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseAssignmentExpression&lt;JSC::ASTBuilder&gt; (this=0x7fffffffc000, context=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:1157
#7  0x00000000007547f4 in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseExpression&lt;JSC::ASTBuilder&gt; (this=0x7fffffffc000, context=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:1128
#8  0x000000000074bb42 in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseIfStatement&lt;JSC::ASTBuilder&gt; (this=0x7fffffffc000, context=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:1048
#9  0x0000000000749907 in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseStatement&lt;JSC::ASTBuilder&gt; (this=0x7fffffffc000, context=..., 
    directive=@0x7fffffffb818: 0x0, directiveLiteralLength=0x7fffffffb800) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:755
#10 0x0000000000753756 in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseSourceElements&lt;(JSC::SourceElementsMode)1, JSC::ASTBuilder&gt; (this=0x7fffffffc000, 
    context=...) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:172
#11 0x000000000074b4fd in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseBlockStatement&lt;JSC::ASTBuilder&gt; (this=0x7fffffffc000, context=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:724
#12 0x00000000007497f2 in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseStatement&lt;JSC::ASTBuilder&gt; (this=0x7fffffffc000, context=..., 
    directive=@0x7fffffffb948: 0x0, directiveLiteralLength=0x7fffffffb930) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:741
#13 0x0000000000747a53 in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseSourceElements&lt;(JSC::SourceElementsMode)0, JSC::ASTBuilder&gt; (this=0x7fffffffc000, 
    context=...) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:172
#14 0x0000000000740a91 in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parseInner (this=0x7fffffffc000)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.cpp:118
#15 0x0000000000624de8 in JSC::Parser&lt;JSC::Lexer&lt;unsigned char&gt; &gt;::parse&lt;JSC::FunctionBodyNode&gt; (this=0x7fffffffc000, error=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.h:1023
#16 0x000000000062426b in JSC::parse&lt;JSC::FunctionBodyNode&gt; (vm=0xecfb60, source=..., parameters=0xedd1f0, name=..., strictness=JSC::JSParseNormal, 
    parserMode=JSC::JSParseFunctionCode, error=...) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/parser/Parser.h:1091
#17 0x0000000000621fc9 in JSC::generateFunctionCodeBlock (vm=..., scope=0x7ffff7f5f870, executable=0x7fffb437ff90, source=..., kind=JSC::CodeForCall, 
    debuggerMode=JSC::DebuggerOff, profilerMode=JSC::ProfilerOff, error=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:52
#18 0x0000000000622ade in JSC::UnlinkedFunctionExecutable::codeBlockFor (this=0x7fffb437ff90, vm=..., scope=0x7ffff7f5f870, source=..., 
    specializationKind=JSC::CodeForCall, debuggerMode=JSC::DebuggerOff, profilerMode=JSC::ProfilerOff, error=...)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:161
#19 0x00000000004eda7e in JSC::FunctionExecutable::produceCodeBlockFor (this=0x7fffb43bfd70, scope=0x7ffff7f5f870, specializationKind=JSC::CodeForCall, 
    exception=@0x7fffffffcb98: 0x0) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/runtime/Executable.cpp:503
#20 0x00000000004eddcd in JSC::FunctionExecutable::compileForCallInternal (this=0x7fffb43bfd70, exec=0x7fffb44020a0, scope=0x7ffff7f5f870, 
    jitType=JSC::JITCode::BaselineJIT, bytecodeIndex=4294967295) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/runtime/Executable.cpp:533
#21 0x0000000000498b08 in JSC::FunctionExecutable::compileForCall (this=0x7fffb43bfd70, exec=0x7fffb44020a0, scope=0x7ffff7f5f870)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/runtime/Executable.h:612
#22 0x00000000004b4ad2 in JSC::FunctionExecutable::compileFor (this=0x7fffb43bfd70, exec=0x7fffb44020a0, scope=0x7ffff7f5f870, kind=JSC::CodeForCall)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/runtime/Executable.h:670
#23 0x00000000007abff4 in JSC::LLInt::setUpCall (execCallee=0x7fffb44020a0, pc=0xeed4b8, kind=JSC::CodeForCall, calleeAsValue=&lt;incomplete type&gt;, 
    callLinkInfo=0xef04d0) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1392
#24 0x00000000007ac391 in JSC::LLInt::genericCall (exec=0x7fffb4402058, pc=0xeed4b8, kind=JSC::CodeForCall)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1434
#25 0x00000000007a9667 in JSC::LLInt::llint_slow_path_call (exec=0x7fffb4402058, pc=0xeed4b8)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1440
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
#26 0x00000000005d4185 in llint_op_call ()
#27 0x00007fffb4402058 in ?? ()
#28 0x0000000000edf610 in ?? ()
#29 0x00007fffffffce00 in ?? ()
#30 0x000000000049aa77 in JSC::JSStack::installTrapsAfterFrame (this=0x0, frame=0x0)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/interpreter/JSStackInlines.h:212
#31 0x0000000000497fec in JSC::JITCode::execute (this=0x7fffb43bfe90, stack=0xedf610, callFrame=0x7fffb4402058, vm=0xecfb60)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/jit/JITCode.h:135
#32 0x000000000049405c in JSC::Interpreter::execute (this=0xedf600, program=0x7fffb43bfe70, callFrame=0x7ffff7f5f8d8, thisObj=0x7ffff7e6feb0)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/interpreter/Interpreter.cpp:948
#33 0x00000000004e9785 in JSC::evaluate (exec=0x7ffff7f5f8d8, source=..., thisValue=&lt;incomplete type&gt;, returnedException=0x7fffffffd970)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/runtime/Completion.cpp:83
#34 0x000000000041f710 in runWithScripts (globalObject=0x7ffff7f5f870, scripts=..., dump=false)
    at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/jsc.cpp:600
#35 0x00000000004205b6 in jscmain (argc=2, argv=0x7fffffffdc38) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/jsc.cpp:816
#36 0x000000000041f50d in main (argc=2, argv=0x7fffffffdc38) at /home/reni/Data/REPOS/webkitnix/Source/JavaScriptCore/jsc.cpp:558</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908342</commentid>
    <comment_count>1</comment_count>
      <attachid>206647</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2013-07-15 02:06:47 -0700</bug_when>
    <thetext>Created attachment 206647
Test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909054</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-16 16:11:22 -0700</bug_when>
    <thetext>This assertion failure was introduced in the fix for &lt;https://bugs.webkit.org/show_bug.cgi?id=118481&gt;.

The solution for https://bugs.webkit.org/show_bug.cgi?id=118481 (r152494) aimed to ensure that line and column numbers are captured for the divot position in the ExpressionRangeInfo.  There were many assertions added to ensure that we have sane lineStart values for computing column numbers.

However, some of these assertions are failing now because the presumed captured divot position isn&apos;t always used as the divot when emitting the ExpressionRangeInfo.  There&apos;s is also a startOffset and an endOffset that can be used to compute an adjusted divot position relative to the passed in divot value.  Unfortunately, this does not yield us the correct line and lineStart info for the adjustedDivot.  This issue is the source of the assertion failures.

The solution is to introduce a new JSTokenPosition that captures a line number, source offset, and source line start offset.  Together, these 3 pieces of info defines a coherent position in the source string.  When emitting an ExpressionRangeInfo, we emitted 3 values: 1. a divot position, 2. a startOffset relative to the divot position, and 3. an endOffset relative to the divot position.  Previously, the fix in r152494 also added the line and lineStartOffset of the passed in divot position.   When the NodesCodegen tries to use the start or end position as the divot instead of the passed in the divot position, then the passed in line and lineStart values are now invalid.   

Now, with the current fix, we&apos;re going to pass the divot, start, and end positions all as JSTokenPositions i.e. all 3 will have their line and lineStartOffset detail captured.  This way, no matter which position (divot, start, or end) the NodesCodegen chooses as the divot position to emit, we&apos;ll have the appropriate line and lineStart values to go with it.

Preliminary layout test results of the current fix shows no new test failures.  Perf benchmark results also show no regression (differences are in the noise).  Here are the detailed results (ws7 is a baseline build of r152583, ws5 is r152583 + the current fix):

=== BEGIN =====================================
Generating benchmark report at /Volumes/Source/ws5/OpenSource/SunSpiderV8SpiderOctaneKrakenJSBenchJSRegressDSP_Eon_20130716_0130_report.txt
And raw data at /Volumes/Source/ws5/OpenSource/SunSpiderV8SpiderOctaneKrakenJSBenchJSRegressDSP_Eon_20130716_0130.json

Benchmark report for SunSpider, V8Spider, Octane, Kraken, JSBench, JSRegress, and DSP on Eon (MacBookAir5,1).

VMs tested:
&quot;Conf#1&quot; at /Volumes/Source/ws7/OpenSource/WebKitBuild/Release/DumpRenderTree (r152583)
&quot;Conf#2&quot; at /Volumes/Source/ws5/OpenSource/WebKitBuild/Release/DumpRenderTree (r152583)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get
microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                       Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                         9.3223+-0.3498     ?      9.3627+-0.3299        ?
   3d-morph                                        7.8883+-0.0655     ?      8.3416+-0.8772        ? might be 1.0575x slower
   3d-raytrace                                    10.4790+-0.2261     ?     11.0784+-0.9571        ? might be 1.0572x slower
   access-binary-trees                             2.3254+-0.2986     ?      2.4112+-0.3274        ? might be 1.0369x slower
   access-fannkuch                                 8.0938+-1.2990            7.0423+-0.0774          might be 1.1493x faster
   access-nbody                                    4.7696+-0.7781            4.1717+-0.0465          might be 1.1433x faster
   access-nsieve                                   4.3107+-0.1454     ?      4.3573+-0.0638        ? might be 1.0108x slower
   bitops-3bit-bits-in-byte                        1.9830+-0.0288     ?      2.0419+-0.1008        ? might be 1.0297x slower
   bitops-bits-in-byte                             2.7566+-0.0351            2.7322+-0.0514        
   bitops-bitwise-and                              2.6184+-0.0593            2.5968+-0.0300        
   bitops-nsieve-bits                              4.9445+-0.6688            4.3322+-0.0762          might be 1.1413x faster
   controlflow-recursive                           2.6797+-0.2018     ?      3.0085+-0.6940        ? might be 1.1227x slower
   crypto-aes                                      7.6999+-0.2748     ?      8.8789+-1.8346        ? might be 1.1531x slower
   crypto-md5                                      4.1596+-0.0759            4.1591+-0.1091        
   crypto-sha1                                     3.4380+-0.2775            3.3485+-0.0557          might be 1.0268x faster
   date-format-tofte                              12.3159+-0.7845     ?     12.7705+-0.8415        ? might be 1.0369x slower
   date-format-xparb                               9.7883+-0.6157     ?      9.7965+-0.5808        ?
   math-cordic                                     3.8725+-0.0234     ?      3.8969+-0.0246        ?
   math-partial-sums                               9.7911+-1.8169            9.1072+-0.5437          might be 1.0751x faster
   math-spectral-norm                              2.9363+-0.2395            2.7892+-0.0329          might be 1.0527x faster
   regexp-dna                                     10.7449+-0.5993           10.7233+-0.5056        
   string-base64                                   5.1336+-0.4824     ?      5.2396+-0.5379        ? might be 1.0207x slower
   string-fasta                                   10.4737+-0.0847     ?     11.0207+-0.9473        ? might be 1.0522x slower
   string-tagcloud                                12.6691+-0.1835     ?     13.0441+-0.2545        ? might be 1.0296x slower
   string-unpack-code                             27.7667+-0.3169     ?     27.8846+-0.3285        ?
   string-validate-input                           9.2620+-1.5414            8.4467+-0.2292          might be 1.0965x faster

   &lt;arithmetic&gt; *                                  7.3932+-0.1852     ?      7.4070+-0.2115        ? might be 1.0019x slower
   &lt;geometric&gt;                                     5.9427+-0.1369            5.9343+-0.1561          might be 1.0014x faster
   &lt;harmonic&gt;                                      4.8480+-0.0969            4.8436+-0.1208          might be 1.0009x faster

                                                       Conf#1                    Conf#2                                      
V8Spider:
   crypto                                         75.3191+-0.7948     ?     76.0389+-0.8876        ?
   deltablue                                     113.2428+-1.7175     ?    114.0694+-2.2094        ?
   earley-boyer                                   66.0507+-0.4138     ?     67.4076+-2.9583        ? might be 1.0205x slower
   raytrace                                       57.3419+-2.2467           56.0001+-0.9102          might be 1.0240x faster
   regexp                                         91.9139+-1.5549           89.5532+-1.0246          might be 1.0264x faster
   richards                                      100.1643+-1.8618           98.9682+-0.7084          might be 1.0121x faster
   splay                                          55.9167+-3.0460     ?     57.9345+-3.7159        ? might be 1.0361x slower

   &lt;arithmetic&gt;                                   79.9928+-0.9648     ?     79.9960+-0.9711        ? might be 1.0000x slower
   &lt;geometric&gt; *                                  77.3439+-1.1045     ?     77.4490+-1.1613        ? might be 1.0014x slower
   &lt;harmonic&gt;                                     74.8133+-1.2810     ?     75.0205+-1.3679        ? might be 1.0028x slower

                                                       Conf#1                    Conf#2                                      
Octane and V8v7:
   encrypt                                        0.40724+-0.00449    ?     0.40839+-0.00726       ?
   decrypt                                        7.40209+-0.06643          7.38687+-0.12881       
   deltablue                             x2       0.52602+-0.00990          0.51906+-0.00514         might be 1.0134x faster
   earley                                         0.73706+-0.01503          0.73237+-0.01211       
   boyer                                          9.36106+-0.10371    ?     9.47685+-0.11086       ? might be 1.0124x slower
   raytrace                              x2       4.26678+-0.06591          4.25450+-0.06255       
   regexp                                x2      30.03634+-0.27958         29.73955+-0.38836       
   richards                              x2       0.25599+-0.00255    ?     0.25764+-0.00367       ?
   splay                                 x2       0.62450+-0.01826    ?     0.64846+-0.02139       ? might be 1.0384x slower
   navier-stokes                         x2      10.02076+-0.10268         10.00299+-0.06790       
   closure                                        0.33169+-0.00720    ?     0.33815+-0.00978       ? might be 1.0195x slower
   jquery                                         4.21293+-0.53721    ?     4.26116+-0.55448       ? might be 1.0114x slower
   gbemu                                 x2     123.66946+-1.05245    ?   123.90472+-1.02352       ?
   mandreel                              x2     164.13769+-1.29417    ?   164.35895+-1.36208       ?
   pdfjs                                 x2      90.53668+-0.78162    ?    91.21170+-3.01742       ?
   box2d                                 x2      31.41203+-0.31192         31.32483+-0.34317       

V8v7:
   &lt;arithmetic&gt;                                   6.83551+-0.03068          6.80306+-0.05007         might be 1.0048x faster
   &lt;geometric&gt; *                                  2.16990+-0.01151    ?     2.17510+-0.00864       ? might be 1.0024x slower
   &lt;harmonic&gt;                                     0.81561+-0.00580    ?     0.82034+-0.00636       ? might be 1.0058x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  35.90094+-0.15290    ?    35.96341+-0.31824       ? might be 1.0017x slower
   &lt;geometric&gt; *                                  6.44702+-0.04996    ?     6.46727+-0.04800       ? might be 1.0031x slower
   &lt;harmonic&gt;                                     1.13070+-0.00867    ?     1.13921+-0.01082       ? might be 1.0075x slower

                                                       Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                       337.764+-9.097            335.027+-4.946         
   audio-beat-detection                           214.936+-3.447      ?     216.139+-3.956         ?
   audio-dft                                      368.201+-11.933           363.961+-11.362          might be 1.0117x faster
   audio-fft                                      124.559+-2.176      ?     128.364+-3.981         ? might be 1.0305x slower
   audio-oscillator                               224.054+-6.780      ?     224.403+-2.553         ?
   imaging-darkroom                               272.669+-8.842            272.243+-4.116         
   imaging-desaturate                             134.929+-10.162     ?     135.242+-7.073         ?
   imaging-gaussian-blur                          435.109+-11.139           429.545+-5.707           might be 1.0130x faster
   json-parse-financial                            65.548+-0.836             64.649+-0.292           might be 1.0139x faster
   json-stringify-tinderbox                        90.412+-1.146      ?      91.090+-2.671         ?
   stanford-crypto-aes                            103.536+-4.300            100.444+-2.362           might be 1.0308x faster
   stanford-crypto-ccm                            101.851+-2.428      ?     109.620+-11.114        ? might be 1.0763x slower
   stanford-crypto-pbkdf2                         227.351+-5.124      ?     232.381+-7.821         ? might be 1.0221x slower
   stanford-crypto-sha256-iterative               112.346+-3.080      ?     115.008+-5.232         ? might be 1.0237x slower

   &lt;arithmetic&gt; *                                 200.948+-1.875      ?     201.294+-1.965         ? might be 1.0017x slower
   &lt;geometric&gt;                                    171.342+-1.339      ?     172.347+-1.829         ? might be 1.0059x slower
   &lt;harmonic&gt;                                     146.649+-1.118      ?     147.637+-1.612         ? might be 1.0067x slower

                                                       Conf#1                    Conf#2                                      
JSBench:
   amazon                                          7.0833+-0.1834     ?      7.1667+-0.2473        ? might be 1.0118x slower
   facebook                                       33.9167+-1.0302     ?     37.0000+-4.2579        ? might be 1.0909x slower
   google                                         71.1667+-2.4806           70.6667+-2.5027        
   twitter                                         9.0833+-0.5038     ?      9.1667+-0.4560        ?
   yahoo                                           3.1667+-0.3668            3.0833+-0.1834          might be 1.0270x faster

   &lt;arithmetic&gt; *                                 24.8833+-0.6928     ?     25.4167+-0.8694        ? might be 1.0214x slower
   &lt;geometric&gt;                                    13.7106+-0.5019     ?     13.9141+-0.4369        ? might be 1.0148x slower
   &lt;harmonic&gt;                                      8.1266+-0.5605            8.1232+-0.3503          might be 1.0004x faster

                                                       Conf#1                    Conf#2                                      
JSRegress:
   adapt-to-double-divide                         24.4981+-0.3042           24.3621+-0.0820        
   aliased-arguments-getbyval                      0.9802+-0.0158     ?      0.9812+-0.0154        ?
   allocate-big-object                             3.6635+-1.3319            3.5941+-1.2134          might be 1.0193x faster
   arity-mismatch-inlining                         0.8205+-0.0186     ?      0.8574+-0.0579        ? might be 1.0450x slower
   array-access-polymorphic-structure              7.5493+-2.0394            7.3364+-1.6780          might be 1.0290x faster
   array-nonarray-polymorhpic-access              50.8719+-1.7204           49.8353+-0.4917          might be 1.0208x faster
   array-with-double-add                           5.3352+-0.5350            5.1005+-0.0788          might be 1.0460x faster
   array-with-double-increment                     3.9475+-0.0510     ?      4.2140+-0.3713        ? might be 1.0675x slower
   array-with-double-mul-add                       6.0992+-0.4574            6.0166+-0.3651          might be 1.0137x faster
   array-with-double-sum                           5.5015+-0.3060            5.3799+-0.1932          might be 1.0226x faster
   array-with-int32-add-sub                        9.5186+-2.0535            8.1338+-0.0553          might be 1.1703x faster
   array-with-int32-or-double-sum                  5.3892+-0.0347     ?      5.3901+-0.0285        ?
   big-int-mul                                     4.6950+-0.0352     ?      4.8064+-0.1827        ? might be 1.0237x slower
   boolean-test                                    4.0313+-0.1196            4.0025+-0.1121        
   branch-fold                                     4.8506+-0.0424     ?      4.8877+-0.1009        ?
   cast-int-to-double                             13.6058+-0.6921           13.3530+-0.2281          might be 1.0189x faster
   cell-argument                                  14.2385+-0.0767     ?     14.4229+-0.2273        ? might be 1.0129x slower
   cfg-simplify                                    3.5932+-0.1929            3.4482+-0.0562          might be 1.0420x faster
   cmpeq-obj-to-obj-other                         10.7661+-0.0708           10.5953+-0.2454          might be 1.0161x faster
   constant-test                                   6.0606+-0.0282     ?      6.0701+-0.0352        ?
   direct-arguments-getbyval                       0.9072+-0.0187     ?      0.9329+-0.0328        ? might be 1.0283x slower
   double-pollution-getbyval                      11.4829+-0.0643     ?     11.5830+-0.1525        ?
   double-pollution-putbyoffset                    5.0162+-0.5214            5.0051+-0.5427        
   empty-string-plus-int                          12.1300+-0.9039     ?     12.3086+-1.0509        ? might be 1.0147x slower
   external-arguments-getbyval                     2.5260+-0.1473     ?      2.7104+-0.4792        ? might be 1.0730x slower
   external-arguments-putbyval                     3.8178+-0.1935     ?      3.9242+-0.2326        ? might be 1.0279x slower
   Float32Array-matrix-mult                       15.6663+-1.5915     ?     18.6121+-3.3202        ? might be 1.1880x slower
   fold-double-to-int                             18.1065+-0.1877           18.0424+-0.1236        
   function-dot-apply                              2.9837+-0.0239     ?      3.0100+-0.0298        ?
   function-test                                   4.2928+-0.2268            4.2319+-0.0461          might be 1.0144x faster
   get-by-id-chain-from-try-block                  5.8949+-0.0477     ?      6.2228+-0.5979        ? might be 1.0556x slower
   HashMap-put-get-iterate-keys                   55.5120+-1.5699     ?     55.9433+-1.5649        ?
   HashMap-put-get-iterate                        62.8880+-0.4815     ?     65.8149+-4.6556        ? might be 1.0465x slower
   HashMap-string-put-get-iterate                 64.7048+-2.3368           64.2691+-1.5881        
   imul-double-only                               15.9353+-1.1570           15.7084+-0.6294          might be 1.0144x faster
   imul-int-only                                  14.7803+-0.0878           14.7587+-0.0515        
   imul-mixed                                     19.4359+-0.2574     ?     20.1313+-1.0006        ? might be 1.0358x slower
   indexed-properties-in-objects                   4.1231+-0.2960            3.9514+-0.0195          might be 1.0435x faster
   inline-arguments-access                         1.2902+-0.0321            1.2703+-0.0235          might be 1.0157x faster
   inline-arguments-local-escape                  22.0919+-1.0350           21.7939+-0.0939          might be 1.0137x faster
   inline-get-scoped-var                           5.9597+-0.0342     ?      6.0010+-0.0360        ?
   inlined-put-by-id-transition                   12.0790+-0.7788           11.7384+-0.1028          might be 1.0290x faster
   int-or-other-abs-then-get-by-val                8.1689+-0.3647            8.0608+-0.0552          might be 1.0134x faster
   int-or-other-abs-zero-then-get-by-val          29.9719+-1.1963           29.0644+-0.1136          might be 1.0312x faster
   int-or-other-add-then-get-by-val               10.1874+-0.1153     ?     10.5899+-0.9634        ? might be 1.0395x slower
   int-or-other-add                                9.4850+-0.8575            9.4107+-0.5230        
   int-or-other-div-then-get-by-val                6.9176+-0.0707     ?      7.1647+-0.4997        ? might be 1.0357x slower
   int-or-other-max-then-get-by-val                8.4815+-0.2117     ?      8.4913+-0.2887        ?
   int-or-other-min-then-get-by-val                9.1959+-1.4464            8.5348+-0.6516          might be 1.0775x faster
   int-or-other-mod-then-get-by-val                6.8114+-0.4811            6.4590+-0.0353          might be 1.0546x faster
   int-or-other-mul-then-get-by-val                7.0799+-0.1255     ?      7.1302+-0.2599        ?
   int-or-other-neg-then-get-by-val                7.5015+-0.6654            7.2540+-0.0776          might be 1.0341x faster
   int-or-other-neg-zero-then-get-by-val          29.5982+-1.4961           28.4331+-0.4035          might be 1.0410x faster
   int-or-other-sub-then-get-by-val               11.5071+-1.8923           10.5830+-0.9673          might be 1.0873x faster
   int-or-other-sub                                6.8960+-0.4853            6.6636+-0.0437          might be 1.0349x faster
   int-overflow-local                             10.0614+-0.0387     ?     10.0870+-0.0467        ?
   Int16Array-bubble-sort                         64.0267+-1.7348     ?     64.0355+-1.6873        ?
   Int16Array-load-int-mul                         1.9159+-0.0303     ?      1.9714+-0.0422        ? might be 1.0289x slower
   Int8Array-load                                  5.3784+-0.4325            5.1928+-0.0490          might be 1.0357x faster
   integer-divide                                 13.7137+-0.0474     ?     13.9176+-0.4366        ? might be 1.0149x slower
   integer-modulo                                  2.0260+-0.0226     ?      2.0731+-0.0587        ? might be 1.0233x slower
   make-indexed-storage                            4.0773+-0.8530            3.9300+-0.5219          might be 1.0375x faster
   method-on-number                               22.0968+-1.7866           21.3596+-0.1724          might be 1.0345x faster
   negative-zero-divide                            0.5120+-0.0481            0.4863+-0.0240          might be 1.0528x faster
   negative-zero-modulo                            0.4487+-0.0139     ?      0.4637+-0.0112        ? might be 1.0334x slower
   negative-zero-negate                            0.4389+-0.0144     ?      0.4688+-0.0480        ? might be 1.0680x slower
   nested-function-parsing-random                355.5492+-15.9494         354.5327+-17.1234       
   nested-function-parsing                        46.3173+-4.9236           44.3146+-3.9065          might be 1.0452x faster
   new-array-buffer-dead                           3.8880+-0.1301     ?      3.9833+-0.1497        ? might be 1.0245x slower
   new-array-buffer-push                          11.5474+-2.3144     ?     13.3346+-3.2970        ? might be 1.1548x slower
   new-array-dead                                 29.6316+-0.5554     ?     29.6685+-0.0552        ?
   new-array-push                                 10.1692+-1.7894     ?     10.4871+-1.7946        ? might be 1.0313x slower
   number-test                                     3.9517+-0.1138            3.9458+-0.1358        
   object-closure-call                             7.2565+-0.1904     ?      7.2631+-0.1900        ?
   object-test                                     4.2993+-0.1309     ?      4.3260+-0.1457        ?
   poly-stricteq                                  93.0709+-5.3986           91.4283+-2.3041          might be 1.0180x faster
   polymorphic-structure                          18.5463+-1.0348           18.5009+-1.1176        
   polyvariant-monomorphic-get-by-id              10.0098+-0.0810     ?     10.0269+-0.0793        ?
   rare-osr-exit-on-local                         19.1975+-0.0708     ?     19.8140+-1.2345        ? might be 1.0321x slower
   register-pressure-from-osr                     30.4913+-2.7568           30.3046+-1.4490        
   simple-activation-demo                         37.0251+-3.5050           34.0520+-0.3040          might be 1.0873x faster
   slow-array-profile-convergence                  4.2671+-0.1819     ?      4.2978+-0.2148        ?
   slow-convergence                                3.2819+-0.0640     ?      3.3907+-0.1368        ? might be 1.0332x slower
   sparse-conditional                              1.3012+-0.1137            1.2396+-0.0321          might be 1.0497x faster
   splice-to-remove                               37.6768+-1.3087           37.5877+-1.3138        
   string-concat-object                            2.7921+-0.1007            2.7823+-0.0382        
   string-concat-pair-object                       2.8962+-0.3174            2.7608+-0.0660          might be 1.0490x faster
   string-concat-pair-simple                      13.9999+-0.3431           13.9579+-0.3585        
   string-concat-simple                           15.4469+-1.5193           15.0863+-1.6582          might be 1.0239x faster
   string-cons-repeat                             11.9592+-0.6915     ?     12.0810+-0.8834        ? might be 1.0102x slower
   string-cons-tower                              33.1878+-20.2314          32.1794+-19.6571         might be 1.0313x faster
   string-equality                                44.6222+-0.1467     ?     47.2120+-3.2083        ? might be 1.0580x slower
   string-hash                                     2.7266+-0.1967     ?      2.7935+-0.1490        ? might be 1.0245x slower
   string-repeat-arith                            43.0047+-5.4157           41.0725+-1.3655          might be 1.0470x faster
   string-sub                                     84.7998+-6.9775           84.6552+-4.0052        
   string-test                                     3.6161+-0.0614     ?      3.7535+-0.1796        ? might be 1.0380x slower
   structure-hoist-over-transitions                3.4519+-0.5379     ?      3.5229+-0.5868        ? might be 1.0206x slower
   tear-off-arguments-simple                       1.7267+-0.0272            1.7046+-0.0285          might be 1.0129x faster
   tear-off-arguments                              3.1773+-0.2768            3.0225+-0.0249          might be 1.0512x faster
   temporal-structure                             19.1003+-0.7587           18.8324+-0.2254          might be 1.0142x faster
   to-int32-boolean                               24.9396+-1.7310           23.8502+-0.8773          might be 1.0457x faster
   undefined-test                                  3.9230+-0.1039            3.9185+-0.1083        

   &lt;arithmetic&gt;                                   18.3038+-0.4438           18.2182+-0.3072          might be 1.0047x faster
   &lt;geometric&gt; *                                   8.3319+-0.1258            8.3222+-0.1035          might be 1.0012x faster
   &lt;harmonic&gt;                                      4.0112+-0.0335     ?      4.0370+-0.0337        ? might be 1.0064x slower

                                                       Conf#1                    Conf#2                                      
DSP:
   filtrr-posterize-tint                          46.0693+-0.9292     ?     47.6643+-1.9318        ? might be 1.0346x slower
   filtrr-tint-contrast-sat-bright                65.6808+-1.9887     ?     66.9988+-3.1196        ? might be 1.0201x slower
   filtrr-tint-sat-adj-contr-mult                 77.7575+-3.2348           74.7756+-2.0677          might be 1.0399x faster
   filtrr-blur-overlay-sat-contr                 193.0435+-3.7883          192.0557+-1.8926        
   filtrr-sat-blur-mult-sharpen-contr            224.4384+-5.0942     ?    232.8045+-12.2815       ? might be 1.0373x slower
   filtrr-sepia-bias                              35.0078+-3.8666           33.2419+-1.3235          might be 1.0531x faster
   route9-vp8                            x5     1005.5667+-6.9765     ?   1018.4940+-13.9018       ? might be 1.0129x slower
   starfield                             x5     1174.4776+-5.5371         1168.9744+-5.1948        
   bellard-jslinux                       x5     3039.2500+-28.2983        3024.0000+-15.6925       
   zynaps-quake3                         x5     1136.2288+-11.8573    ?   1139.0970+-11.1175       ?
   zynaps-mandelbrot                     x5     1028.6639+-6.8603     ?   1031.6522+-7.2681        ?
   ammojs-asm-js                         x5      250.7458+-18.2217         245.5918+-12.5175         might be 1.0210x faster
   ammojs-regular-js                     x5      255.2495+-13.0212         253.1553+-13.0909       

   &lt;arithmetic&gt;                                  977.8758+-4.2110          976.8870+-4.2980          might be 1.0010x faster
   &lt;geometric&gt; *                                 592.3372+-9.4488          591.0040+-7.4361          might be 1.0023x faster
   &lt;harmonic&gt;                                    276.4239+-9.7169          274.4566+-6.8077          might be 1.0072x faster

                                                       Conf#1                    Conf#2                                      
All benchmarks:
   &lt;arithmetic&gt;                                  210.7836+-0.8557          210.6037+-0.9630          might be 1.0009x faster
   &lt;geometric&gt;                                    22.5198+-0.2050     ?     22.5206+-0.2023        ? might be 1.0000x slower
   &lt;harmonic&gt;                                      4.0362+-0.0222     ?      4.0606+-0.0202        ? might be 1.0060x slower

                                                       Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                36.7644+-0.2487     ?     36.8982+-0.2608        ? might be 1.0036x slower

$ 
=== END =====================================

Once again, the above results are preliminary.  I still need to clean up and refactor the fix a bit before it&apos;s ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910697</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-22 09:32:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/14423494&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910699</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-22 09:33:59 -0700</bug_when>
    <thetext>*** Bug 118664 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910779</commentid>
    <comment_count>5</comment_count>
      <attachid>207266</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-22 13:02:31 -0700</bug_when>
    <thetext>Created attachment 207266
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910830</commentid>
    <comment_count>6</comment_count>
      <attachid>207283</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-22 14:37:33 -0700</bug_when>
    <thetext>Created attachment 207283
Perf results of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910851</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-22 15:44:37 -0700</bug_when>
    <thetext>The patch has passed all javascriptcore and layout tests without any new regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910852</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-22 15:45:16 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; The patch has passed all javascriptcore and layout tests without any new regressions.

I meant &quot;without any new failures&quot; i.e. there are no regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910855</commentid>
    <comment_count>9</comment_count>
      <attachid>207289</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-22 16:02:46 -0700</bug_when>
    <thetext>Created attachment 207289
patch 2: renamed JSTokenPosition to JSTextPosition, deleted some empty lines, and added JSTextPosition::operator+(unsigned) (needed for Windows).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910856</commentid>
    <comment_count>10</comment_count>
      <attachid>207290</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-22 16:18:43 -0700</bug_when>
    <thetext>Created attachment 207290
patch 3: removed an unused function in the new JSTextPosition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911039</commentid>
    <comment_count>11</comment_count>
      <attachid>207327</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-23 08:02:03 -0700</bug_when>
    <thetext>Created attachment 207327
patch 4: added some static casts to make the Windows build happy.

Brent tells me that the Windows build is still unhappy and not able to decide whether to cast the uint16_t m_subexpressionStartOffset into an int or unsigned in ThrowableSubExpressionData and ThrowablePrefixedSubExpressionData.  This patch adds explicit casts where needed to disambiguate that for the VS compiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911323</commentid>
    <comment_count>12</comment_count>
      <attachid>207398</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-24 09:05:56 -0700</bug_when>
    <thetext>Created attachment 207398
patch 5: svn up&apos;ed to r153074 to resolve conflicts with some recent parser changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912509</commentid>
    <comment_count>13</comment_count>
      <attachid>207398</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-29 09:02:14 -0700</bug_when>
    <thetext>Comment on attachment 207398
patch 5: svn up&apos;ed to r153074 to resolve conflicts with some recent parser changes

Tests are showing some regressions after the big merge.  Will upload a new patch after these are resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912892</commentid>
    <comment_count>14</comment_count>
      <attachid>207743</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-30 09:39:50 -0700</bug_when>
    <thetext>Created attachment 207743
patch 6: updated (and tested) after the big merge.

Patch 6 has been tested on the javascriptcore and layout tests and shows no new failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912906</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-30 10:01:43 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r153477: &lt;http://trac.webkit.org/changeset/153477&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>206647</attachid>
            <date>2013-07-15 02:06:47 -0700</date>
            <delta_ts>2013-07-15 02:06:47 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>divot.js</filename>
            <type>application/javascript</type>
            <size>126</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">ZnVuY3Rpb24gdG9GdXp6KCkgewogICAgaWYgKFByaW9yaXR5UXVldWUucHJvdG90eXBlLmRvU29y
dCgpIGluc3RhbmNlb2YgKHRoaXMgXj0gZnVuY3Rpb24oKSB7CiAgICB9KSkgcmV0dXJuIDI7IAp9
Cgp0b0Z1enooKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207266</attachid>
            <date>2013-07-22 13:02:31 -0700</date>
            <delta_ts>2013-07-22 16:02:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>bug-118662.patch</filename>
            <type>text/plain</type>
            <size>198522</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxMy0wNy0yMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Rml4IHByb2JsZW1zIHdpdGggZGl2b3QgYW5kIGxpbmVTdGFydCBtaXNtYXRjaGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjYyLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIxNTI0OTQgYWRkZWQg
dGhlIHJlY29yZGluZyBvZiBsaW5lU3RhcnQgdmFsdWVzIGZvciBkaXZvdCBwb3NpdGlvbnMuCisg
ICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgY29tcHV0YXRpb24gb2YgY29sdW1uIG51bWJl
cnMuIFNpbWlsYXJseSwgaXQgYWxzbworICAgICAgICBhZGRlZCB0aGUgcmVjb3JkaW5nIG9mIGxp
bmUgbnVtYmVycyBmb3IgdGhlIGRpdm90IHBvc2l0aW9ucy4gT25lIHByb2JsZW0KKyAgICAgICAg
d2l0aCB0aGUgYXBwcm9hY2ggdGFrZW4gd2FzIHRoYXQgdGhlIGxpbmUgYW5kIGxpbmVTdGFydCB2
YWx1ZXMgd2VyZQorICAgICAgICByZWNvcmRlZCBpbmRlcGVuZGVudGx5LCBhbmQgaGVuY2Ugd2Vy
ZSBub3QgYWx3YXlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICAgc2FtcGxlZCBhdCB0aGUgc2Ft
ZSBwbGFjZSB0aGF0IHRoZSBkaXZvdCBwb3NpdGlvbiBpcyByZWNvcmRlZC4gVGhpcworICAgICAg
ICByZXN1bHRlZCBpbiBwb3RlbnRpYWwgbWlzbWF0Y2hlcyB0aGF0IGNhdXNlIHNvbWUgYXNzZXJ0
aW9ucyB0byBmYWlsLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgYSBK
U1Rva2VuUG9zaXRpb24gYWJzdHJhY3Rpb24gdGhhdCByZWNvcmRzCisgICAgICAgIHRoZSBkaXZv
dCBwb3NpdGlvbiwgbGluZSwgYW5kIGxpbmVTdGFydCBhcyBhIHNpbmdsZSBxdWFudGl0eS4gV2hl
cmV2ZXIKKyAgICAgICAgd2UgcmVjb3JkIHRoZSBkaXZvdCBwb3NpdGlvbiBhcyBhbiB1bnNpZ25l
ZCBpbnQgcHJldmlvdXNseSwgd2Ugbm93IHJlY29yZAorICAgICAgICBpdHMgSlNUb2tlblBvc2l0
aW9uIHdoaWNoIGNhcHR1cmVzIGFsbCAzIHZhbHVlcyBpbiBvbmUgZ28uIFRoaXMgZW5zdXJlcwor
ICAgICAgICB0aGF0IHRoZSBjYXB0dXJlZCBsaW5lIGFuZCBsaW5lU3RhcnQgd2lsbCBhbHdheXMg
bWF0Y2ggdGhlIGNhcHR1cmVkIGRpdm90CisgICAgICAgIHBvc2l0aW9uLgorCisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVj
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVidWdIb29rKToKKyAg
ICAgICAgLSBVc2UgSlNUb2tlblBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBs
aW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHByZXNzaW9u
SW5mbyk6CisgICAgICAgIC0gVXNlIEpTVG9rZW5Qb3NpdGlvbiBpbnN0ZWFkIG9mIHBhc3Npbmcg
bGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4cHJlc3Npb25EYXRhOjpl
bWl0VGhyb3dSZWZlcmVuY2VFcnJvcik6CisgICAgICAgIChKU0M6OlJlc29sdmVOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6Ok5ld0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFdmFs
RnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25D
YWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsQnJh
Y2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjplbWl0UmVzb2x2ZSk6
CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjplbWl0QnJhY2tldCk6CisgICAgICAgIChKU0M6
OlBvc3RmaXhOb2RlOjplbWl0RG90KToKKyAgICAgICAgKEpTQzo6RGVsZXRlUmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZSk6CisgICAgICAgIChKU0M6OlByZWZp
eE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UHJlZml4Tm9kZTo6ZW1pdERvdCk6
CisgICAgICAgIChKU0M6OlVuYXJ5T3BOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpCaW5hcnlPcE5vZGU6OmVtaXRTdHJjYXQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVCaW5h
cnlPcE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjplbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQpOgor
ICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpBc3NpZ25Eb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduQnJhY2tldE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpXaXRoTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6VGhyb3dO
b2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAtIFVzZSBKU1Rva2VuUG9zaXRpb24gaW5zdGVh
ZCBvZiBwYXNzaW5nIGxpbmUgYW5kIGxpbmVTdGFydCBleHBsaWNpdGx5LgorICAgICAgICAqIHBh
cnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIC0gUmVwbGFjZWQgQVNUQnVpbGRlcjo6UG9zaXRp
b25JbmZvIHdpdGggSlNUb2tlblBvc2l0aW9uLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpC
aW5hcnlPcEluZm86OkJpbmFyeU9wSW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OkFz
c2lnbm1lbnRJbmZvOjpBc3NpZ25tZW50SW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZVJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCcmFja2V0
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG90QWNjZXNzKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVnRXhwKToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlTmV3RXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZUFzc2lnblJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFeHByU3Rh
dGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjpjcmVhdGVDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1
aWxkZXI6OmNyZWF0ZUxhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
Y3JlYXRlV2l0aFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVRo
cm93U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6YXBwZW5kQmluYXJ5RXhw
cmVzc2lvbkluZm8pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphcHBlbmRVbmFyeVRva2Vu
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6dW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6YXNzaWdubWVudFN0YWNrQXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWdubWVudCk6CisgICAgICAgIChKU0M6OkFT
VEJ1aWxkZXI6OnNldEV4Y2VwdGlvbkxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6bWFrZURlbGV0ZU5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rp
b25DYWxsTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VCaW5hcnlOb2RlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlND
OjpBU1RCdWlsZGVyOjptYWtlUHJlZml4Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
Om1ha2VQb3N0Zml4Tm9kZSk6CisgICAgICAgIC0gVXNlIEpTVG9rZW5Qb3NpdGlvbiBpbnN0ZWFk
IG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisgICAgICAgICogcGFy
c2VyL0xleGVyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpsZXgpOgorICAgICAgICAtIEFkZGVkIHN1
cHBvcnQgZm9yIENhcHR1cmluZyB0aGUgYXBwcm9wcmlhdGUgSlNUb2tlblBvc2l0aW9ucyBpbnN0
ZWFkCisgICAgICAgICAgb2YganVzdCB0aGUgY2hhcmFjdGVyIG9mZnNldC4KKyAgICAgICAgKiBw
YXJzZXIvTGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6TGV4ZXI6OmN1cnJlbnRQb3NpdGlvbik6Cisg
ICAgICAgIChKU0M6Ojo6bGV4RXhwZWN0SWRlbnRpZmllcik6CisgICAgICAgIC0gQWRkZWQgc3Vw
cG9ydCBmb3IgQ2FwdHVyaW5nIHRoZSBhcHByb3ByaWF0ZSBKU1Rva2VuUG9zaXRpb25zIGluc3Rl
YWQKKyAgICAgICAgICBvZiBqdXN0IHRoZSBjaGFyYWN0ZXIgb2Zmc2V0LgorICAgICAgICAqIHBh
cnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6Ok5vZGU6Ok5vZGUpOgorICAg
ICAgICAoSlNDOjpSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpFdmFs
RnVuY3Rpb25DYWxsTm9kZTo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkNhbGxWYWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5vZGU6OkZ1bmN0aW9uQ2FsbERv
dE5vZGUpOgorICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6Q2FsbEZ1bmN0
aW9uQ2FsbERvdE5vZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6
OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjpQ
b3N0Zml4Tm9kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNv
bHZlTm9kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2RlOjpEZWxldGVCcmFja2V0
Tm9kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5vZGUpOgorICAg
ICAgICAoSlNDOjpQcmVmaXhOb2RlOjpQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeVJlc29sdmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpS
ZWFkTW9kaWZ5QnJhY2tldE5vZGU6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZSk6CisgICAgICAgIChK
U0M6OkFzc2lnbkJyYWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6
OkFzc2lnbkRvdE5vZGU6OkFzc2lnbkRvdE5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5
RG90Tm9kZTo6UmVhZE1vZGlmeURvdE5vZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25FcnJvck5v
ZGU6OkFzc2lnbkVycm9yTm9kZSk6CisgICAgICAgIChKU0M6OldpdGhOb2RlOjpXaXRoTm9kZSk6
CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6Rm9ySW5Ob2RlKToKKyAgICAgICAgLSBVc2UgSlNU
b2tlblBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGlj
aXRseS4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpTdGF0ZW1l
bnROb2RlOjpzZXRMb2MpOgorICAgICAgICAtIFVzZSBKU1Rva2VuUG9zaXRpb24gaW5zdGVhZCBv
ZiBwYXNzaW5nIGxpbmUgYW5kIGxpbmVTdGFydCBleHBsaWNpdGx5LgorICAgICAgICAqIHBhcnNl
ci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpOb2RlOjpsaW5lTm8pOgorICAgICAgICAoSlNDOjpO
b2RlOjpzdGFydE9mZnNldCk6CisgICAgICAgIChKU0M6Ok5vZGU6OmxpbmVTdGFydE9mZnNldCk6
CisgICAgICAgIChKU0M6Ok5vZGU6OnBvc2l0aW9uKToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGE6OlRocm93YWJsZUV4cHJlc3Npb25EYXRhKToKKyAgICAgICAgKEpTQzo6
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OnNldEV4Y2VwdGlvblNvdXJjZUNvZGUpOgorICAgICAg
ICAoSlNDOjpUaHJvd2FibGVFeHByZXNzaW9uRGF0YTo6ZGl2b3QpOgorICAgICAgICAoSlNDOjpU
aHJvd2FibGVFeHByZXNzaW9uRGF0YTo6ZGl2b3RTdGFydCk6CisgICAgICAgIChKU0M6OlRocm93
YWJsZUV4cHJlc3Npb25EYXRhOjpkaXZvdEVuZCk6CisgICAgICAgIChKU0M6OlRocm93YWJsZVN1
YkV4cHJlc3Npb25EYXRhOjpUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChK
U0M6OlRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhOjpzZXRTdWJleHByZXNzaW9uSW5mbyk6Cisg
ICAgICAgIChKU0M6OlRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhOjpzdWJleHByZXNzaW9uRGl2
b3QpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVz
c2lvblN0YXJ0KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGE6OnN1
YmV4cHJlc3Npb25FbmQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJl
c3Npb25EYXRhOjpUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25EYXRhKToKKyAgICAgICAg
KEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YTo6c2V0U3ViZXhwcmVzc2lv
bkluZm8pOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25EYXRh
OjpzdWJleHByZXNzaW9uRGl2b3QpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVQcmVmaXhlZFN1
YkV4cHJlc3Npb25EYXRhOjpzdWJleHByZXNzaW9uU3RhcnQpOgorICAgICAgICAoSlNDOjpUaHJv
d2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25EYXRhOjpzdWJleHByZXNzaW9uRW5kKToKKyAgICAg
ICAgLSBVc2UgSlNUb2tlblBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5l
U3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6OjpQYXJzZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAt
IFVzZSBKU1Rva2VuUG9zaXRpb24gaW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUgYW5kIGxpbmVTdGFy
dCBleHBsaWNpdGx5LgorICAgICAgICAoSlNDOjo6OmRpZEZpbmlzaFBhcnNpbmcpOgorICAgICAg
ICAtIFJlbW92ZSBzZXR0aW5nIG9mIG1fbGFzdExpbmUgdmFsdWUuIFdlIGFsd2F5cyBwYXNzIGlu
IHRoZSB2YWx1ZSBmcm9tCisgICAgICAgICAgbV9sYXN0TGluZSBhbnl3YXkuIFNvLCB0aGlzIGFz
c2lnbm1lbnQgaXMgZWZmZWN0aXZlbHkgYSBub3AuCisgICAgICAgIChKU0M6Ojo6cGFyc2VWYXJE
ZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6Ojo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlRm9yU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJz
ZUJyZWFrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUNvbnRpbnVlU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVJldHVyblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6
Ojo6cGFyc2VUaHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VXaXRoU3RhdGVt
ZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVRyeVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6
Ojo6cGFyc2VCbG9ja1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlvbkRl
Y2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6TGFiZWxJbmZvOjpMYWJlbEluZm8pOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlRXhwcmVzc2lvbk9yTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlND
Ojo6OnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Ojo6cGFyc2VCaW5hcnlFeHByZXNzaW9u
KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6OjpwYXJz
ZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZU1lbWJlckV4cHJlc3Np
b24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlVW5hcnlFeHByZXNzaW9uKToKKyAgICAgICAgLSBV
c2UgSlNUb2tlblBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQg
ZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlBh
cnNlcjo6bmV4dCk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6bmV4dEV4cGVjdElkZW50aWZpZXIp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OmdldFRva2VuKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
Ojp0b2tlblN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnRva2VuRW5kUG9z
aXRpb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI6Omxhc3RUb2tlbkVuZFBvc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZSk6CisgICAgICAgIC0gVXNlIEpTVG9rZW5Qb3NpdGlvbiBpbnN0
ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisgICAgICAgICog
cGFyc2VyL1BhcnNlclRva2Vucy5oOgorICAgICAgICAoSlNDOjpKU1Rva2VuUG9zaXRpb246OkpT
VG9rZW5Qb3NpdGlvbik6CisgICAgICAgIChKU0M6OkpTVG9rZW5Qb3NpdGlvbjo6b3BlcmF0b3Ir
KToKKyAgICAgICAgKEpTQzo6SlNUb2tlblBvc2l0aW9uOjpvcGVyYXRvci0pOgorICAgICAgICAo
SlNDOjpKU1Rva2VuUG9zaXRpb246Om9wZXJhdG9yIGludCk6CisgICAgICAgIC0gQWRkZWQgSlNU
b2tlblBvc2l0aW9uLgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAg
IChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6bWFrZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjptYWtlUHJlZml4Tm9kZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1h
a2VQb3N0Zml4Tm9kZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VEZWxldGVO
b2RlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAg
ICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50
YXhDaGVja2VyOjpjcmVhdGVSZWdFeHApOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpj
cmVhdGVOZXdFeHByKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQXNzaWdu
UmVzb2x2ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZvckluTG9vcCk6
CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVJldHVyblN0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUJyZWFrU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVXaXRoU3RhdGVtZW50KToKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVUaHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRh
eENoZWNrZXI6OmFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6U3lu
dGF4Q2hlY2tlcjo6b3BlcmF0b3JTdGFja1BvcCk6CisgICAgICAgIC0gVXNlIEpTVG9rZW5Qb3Np
dGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisK
IDIwMTMtMDctMTEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBB
dHRlbXB0IHRvIGZpeCB0aGUgd2luZG93cyBidWlsZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAxNTI1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwMSw5ICsxNzAxLDkgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdQogICAgIHJldHVybiByMDsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9u
LCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQg
bGluZVN0YXJ0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1
bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCBjb25zdCBKU1Rva2VuUG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9r
ZW5Qb3NpdGlvbiYgZGl2b3RFbmQpCiB7Ci0gICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGwsIGRz
dCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgcmV0dXJuIGVtaXRDYWxsKG9w
X2NhbGwsIGRzdCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qs
IGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3Jl
YXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKQpAQCAtMTczNCw5ICsxNzM0LDkgQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbgogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChtX2FjdGl2YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBm
dW5jLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWdu
ZWQgbGluZVN0YXJ0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsRXZh
bChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVudHMmIGNhbGxB
cmd1bWVudHMsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCkKIHsKLSAg
ICByZXR1cm4gZW1pdENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1bmMsIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUs
IGxpbmVTdGFydCk7CisgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGxfZXZhbCwgZHN0LCBmdW5j
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7CiB9CiAKIEV4cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmV4cGVj
dGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCkBA
IC0xODE0LDcgKzE4MTQsNyBAQCBFeHBlY3RlZEZ1bmN0aW9uIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0CiAgICAgcmV0dXJuIGV4cGVjdGVkRnVuY3Rpb247CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENh
bGxBcmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5l
U3RhcnQpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5j
dGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCBjb25z
dCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3Rh
cnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpCiB7CiAgICAgQVNTRVJUKG9wY29k
ZUlEID09IG9wX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKTsKICAgICBBU1NFUlQo
ZnVuYy0+cmVmQ291bnQoKSk7CkBAIC0xODM3LDcgKzE4MzcsNyBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChj
YWxsQXJndW1lbnRzLnByb2ZpbGVIb29rUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CiAgICAgfQogCi0g
ICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5l
LCBsaW5lU3RhcnQpOworICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3RTdGFydCwg
ZGl2b3RFbmQpOwogCiAgICAgUmVmUHRyPExhYmVsPiBkb25lID0gbmV3TGFiZWwoKTsKICAgICBl
eHBlY3RlZEZ1bmN0aW9uID0gZW1pdEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0KGRzdCwgZnVuYywg
ZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZG9uZS5nZXQoKSk7CkBAIC0xODcxLDcg
KzE4NzEsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAgICAg
cmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRo
aXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVS
ZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUs
IHVuc2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklE
KiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJRCogZmlyc3RG
cmVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb2ZpbGVIb29rUmVnaXN0ZXIsIGNvbnN0IEpTVG9r
ZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCkKIHsKICAgICBpZiAobV9zaG91bGRFbWl0UHJv
ZmlsZUhvb2tzKSB7CiAgICAgICAgIGVtaXRNb3ZlKHByb2ZpbGVIb29rUmVnaXN0ZXIsIGZ1bmMp
OwpAQCAtMTg3OSw3ICsxODc5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRDYWxsVgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZUhvb2tSZWdpc3Rl
ci0+aW5kZXgoKSk7CiAgICAgfQogICAgIAotICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgbGluZVN0YXJ0KTsKKyAgICBlbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIAogICAgIC8vIEVtaXQgY2Fs
bC4KICAgICBlbWl0T3Bjb2RlKG9wX2NhbGxfdmFyYXJncyk7CkBAIC0xOTMxLDcgKzE5MzEsNyBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgcmV0dXJuIHNy
YzsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVk
RnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1
bnNpZ25lZCBsaW5lU3RhcnQpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENv
bnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rp
b24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywgY29uc3Qg
SlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKQogewogICAgIEFTU0VSVChmdW5jLT5y
ZWZDb3VudCgpKTsKIApAQCAtMTk1NSw3ICsxOTU1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRDb25zdAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsgKytpKQogICAgICAgICBjYWxsRnJhbWUuYXBwZW5kKG5ld1RlbXBv
cmFyeSgpKTsKIAotICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCwgbGluZSwgbGluZVN0YXJ0KTsKKyAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qs
IGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICAKICAgICBSZWZQdHI8TGFiZWw+IGRvbmUgPSBu
ZXdMYWJlbCgpOwogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBlbWl0RXhwZWN0ZWRGdW5jdGlvblNu
aXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkb25lLmdl
dCgpKTsKQEAgLTIwMzQsNyArMjAzNCw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRE
ZWJ1Z0hvb2soRGUKICAgICBpZiAoIW1fc2hvdWxkRW1pdERlYnVnSG9va3MpCiAgICAgICAgIHJl
dHVybjsKICNlbmRpZgotICAgIGVtaXRFeHByZXNzaW9uSW5mbyhjaGFyT2Zmc2V0LCAwLCAwLCBm
aXJzdExpbmUsIGxpbmVTdGFydCk7CisgICAgSlNUb2tlblBvc2l0aW9uIGRpdm90KGZpcnN0TGlu
ZSwgY2hhck9mZnNldCwgbGluZVN0YXJ0KTsKKyAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qs
IGRpdm90LCBkaXZvdCk7CiAgICAgdW5zaWduZWQgY2hhclBvc2l0aW9uID0gY2hhck9mZnNldCAt
IG1fc2NvcGVOb2RlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwogICAgIGVtaXRPcGNvZGUob3Bf
ZGVidWcpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkZWJ1Z0hvb2tJRCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiAxNTI1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3NSwyNyAr
Mzc1LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbi0+ZW1pdEJ5dGVjb2RlSW5D
b25kaXRpb25Db250ZXh0KCp0aGlzLCB0cnVlVGFyZ2V0LCBmYWxzZVRhcmdldCwgZmFsbFRocm91
Z2hNb2RlKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZW1pdEV4cHJlc3Npb25JbmZvKGlu
dCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCBp
bnQgbGluZVN0YXJ0KQotICAgICAgICB7CisgICAgICAgIHZvaWQgZW1pdEV4cHJlc3Npb25JbmZv
KGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2
b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCkKKyAgICAgICAgeyAgICAg
ICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdFN0YXJ0Lm9m
ZnNldCk7CisgICAgICAgICAgICBBU1NFUlQoZGl2b3RFbmQub2Zmc2V0ID49IGRpdm90Lm9mZnNl
dCk7CisKICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQgPSBtX3Njb3BlTm9kZS0+c291cmNl
KCkuc3RhcnRPZmZzZXQoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IG1fc2Nv
cGVOb2RlLT5zb3VyY2UoKS5maXJzdExpbmUoKTsKIAotICAgICAgICAgICAgQVNTRVJUKGRpdm90
ID49IGxpbmVTdGFydCk7Ci0gICAgICAgICAgICBBU1NFUlQoZGl2b3QgPj0gc291cmNlT2Zmc2V0
KTsKLSAgICAgICAgICAgIGRpdm90IC09IHNvdXJjZU9mZnNldDsKKyAgICAgICAgICAgIGludCBk
aXZvdE9mZnNldCA9IGRpdm90Lm9mZnNldCAtIHNvdXJjZU9mZnNldDsKKyAgICAgICAgICAgIGlu
dCBzdGFydE9mZnNldCA9IGRpdm90Lm9mZnNldCAtIGRpdm90U3RhcnQub2Zmc2V0OworICAgICAg
ICAgICAgaW50IGVuZE9mZnNldCA9IGRpdm90RW5kLm9mZnNldCAtIGRpdm90Lm9mZnNldDsKKwor
ICAgICAgICAgICAgdW5zaWduZWQgbGluZSA9IGRpdm90LmxpbmU7CisgICAgICAgICAgICBBU1NF
UlQobGluZSA+PSBmaXJzdExpbmUpOworICAgICAgICAgICAgbGluZSAtPSBmaXJzdExpbmU7CiAK
KyAgICAgICAgICAgIGludCBsaW5lU3RhcnQgPSBkaXZvdC5saW5lU3RhcnRPZmZzZXQ7CiAgICAg
ICAgICAgICBpZiAobGluZVN0YXJ0ID4gc291cmNlT2Zmc2V0KQogICAgICAgICAgICAgICAgIGxp
bmVTdGFydCAtPSBzb3VyY2VPZmZzZXQ7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgbGluZVN0YXJ0ID0gMDsKLQotICAgICAgICAgICAgQVNTRVJUKGxpbmUgPj0gZmlyc3RMaW5l
KTsKLSAgICAgICAgICAgIGxpbmUgLT0gZmlyc3RMaW5lOworICAgICAgICAgICAgQVNTRVJUKGRp
dm90T2Zmc2V0ID49IGxpbmVTdGFydCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjb2x1bW4gPSBk
aXZvdE9mZnNldCAtIGxpbmVTdGFydDsKIAogICAgICAgICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rp
b25PZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgICAgICAgICBBU1NFUlQoZGl2
b3QgPj0gbGluZVN0YXJ0KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvbHVtbiA9IGRpdm90IC0g
bGluZVN0YXJ0OwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZEV4cHJlc3Npb25JbmZvKGlu
c3RydWN0aW9uT2Zmc2V0LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29s
dW1uKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRFeHByZXNzaW9uSW5mbyhpbnN0cnVj
dGlvbk9mZnNldCwgZGl2b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNv
bHVtbik7CiAgICAgICAgIH0KIAogICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbGVmdEhhbmRT
aWRlTmVlZHNDb3B5KGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodElzUHVyZSkK
QEAgLTQ3MSwxNSArNDc2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQ
dXRHZXR0ZXJTZXR0ZXIoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHksIFJlZ2lzdGVySUQqIGdldHRlciwgUmVnaXN0ZXJJRCogc2V0dGVyKTsKICAgICAgICAgCiAg
ICAgICAgIEV4cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbkZvcklkZW50aWZpZXIoY29u
c3QgSWRlbnRpZmllciYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChSZWdpc3RlcklE
KiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMm
LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KTsKLSAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdENhbGxFdmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFy
Z3VtZW50cyYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpOwotICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBm
dW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVn
aXN0ZXJJRCogZmlyc3RGcmVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb2ZpbGVIb29rUmVnaXN0
ZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpOworICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVk
RnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYg
ZGl2b3RFbmQpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiwgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIGRpdm90RW5kKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJh
cmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1Jl
Z2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1Rva2VuUG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9r
ZW5Qb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZFZhcmFy
Z3MoUmVnaXN0ZXJJRCogYXJnQ291bnREc3QsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVn
aXN0ZXJJRCogYXJncyk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJldHVybihSZWdpc3Rl
cklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW5kKFJlZ2lzdGVySUQqIHNyYykg
eyByZXR1cm4gZW1pdFVuYXJ5Tm9Ec3RPcChvcF9lbmQsIHNyYyk7IH0KIAotICAgICAgICBSZWdp
c3RlcklEKiBlbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywg
RXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25l
ZCBsaW5lU3RhcnQpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0KFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50
cyYsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRTdHJjYXQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMsIGlu
dCBjb3VudCk7CiAgICAgICAgIHZvaWQgZW1pdFRvUHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjKTsKIApAQCAtNTgzLDcgKzU4OCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyAoaS5lLiAiT2JqZWN0KCkiIGlzIGlkZW50aWNhbCB0byAibmV3IE9iamVjdCgp
IikuCiAgICAgICAgIEV4cGVjdGVkRnVuY3Rpb24gZW1pdEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2Fs
bEFyZ3VtZW50cyYsIExhYmVsKiBkb25lKTsKICAgICAgICAgCi0gICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRDYWxsKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4
cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQg
bGluZVN0YXJ0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3Vt
ZW50cyYsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlv
biYgZGl2b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICAg
ICAgUmVnaXN0ZXJJRCogbmV3UmVnaXN0ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTUy
NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRXhwcmVzc2lvbk5vZGU6
OmVtaXRCeXRlY29kZUluQ29uZGkKIAogUmVnaXN0ZXJJRCogVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGE6OmVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RM
aW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1p
dFRocm93UmVmZXJlbmNlRXJyb3IobWVzc2FnZSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKIH0KQEAgLTE1Myw4ICsxNTMsOCBAQCBSZWdpc3RlcklEKiBSZXNvbHZlTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGlu
YXRpb25JZk5lZWRlZChkc3QsIGxvY2FsKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgZGl2
b3QgPSBtX3N0YXJ0T2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKTsKLSAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90LCBtX2lkZW50Lmxlbmd0aCgpLCAwLCBtX2Rpdm90TGluZSwg
bV9kaXZvdExpbmVTdGFydCk7CisgICAgSlNUb2tlblBvc2l0aW9uIGRpdm90ID0gbV9zdGFydCAr
IG1faWRlbnQubGVuZ3RoKCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCwgbV9zdGFydCwgZGl2b3QpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFJlc29sdmUoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CiB9
CiAKQEAgLTMyNiwxMyArMzI2LDEzIEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6
OmVtaXRCeXQKICAgICAgICAgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMoc3Rh
dGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpCiAgICAgICAgICYm
ICFnZW5lcmF0b3Iuc3ltYm9sVGFibGUoKS5zbG93QXJndW1lbnRzKCkpIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50
QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZ2VuZXJhdG9yLnVuY2hlY2tl
ZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCksIHByb3BlcnR5KTsKICAgICB9CiAKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jh
c2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJh
dG9yKSk7CiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9z
dWJzY3JpcHQpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsK
IH0KIApAQCAtMzQ2LDEzICszNDYsMTMgQEAgUmVnaXN0ZXJJRCogRG90QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZAogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZU5vZGUgPSBzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KG1fYmFzZSk7CiAgICAgICAgIGlmICghZ2VuZXJhdG9yLndpbGxSZXNv
bHZlVG9Bcmd1bWVudHMocmVzb2x2ZU5vZGUtPmlkZW50aWZpZXIoKSkpCiAgICAgICAgICAgICBn
b3RvIG5vbkFyZ3VtZW50c1BhdGg7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExp
bmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpKTsKICAg
ICB9CiAKIG5vbkFyZ3VtZW50c1BhdGg6CiAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2Jhc2UpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwg
ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9pZGVudCk7
CiB9CiAKQEAgLTM3NSw3ICszNzUsNyBAQCBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5CiAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBOb0V4cGVjdGVkRnVuY3Rpb247
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
KTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbk9ySWdub3JlZChkc3QpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRD
b25zdHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0KSwgZnVuYy5n
ZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogaW5saW5lIENhbGxBcmd1bWVudHM6OkNhbGxBcmd1bWVu
dHMoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRz
Tm9kZSkKQEAgLTQxMCw5ICs0MTAsMTAgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5v
ZGU6OmVtaXRCeQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
IC0gZGl2b3RTdGFydE9mZnNldCgpICsgNCwgNCwgMCwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIEpTVG9rZW5Qb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIDQ7
CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFydCgp
LCBuZXdEaXZvdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aFRoaXMoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgZnVuYy5nZXQoKSwgZ2VuZXJhdG9yLnJlc29sdmUoZ2VuZXJh
dG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ldmFs
KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZv
dCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBk
aXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsVmFsdWVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQyMiw3ICs0MjMsNyBAQCBSZWdpc3Rl
cklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBDYWxsQXJndW1lbnRzIGNh
bGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChj
YWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRz
dCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZv
dExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBm
dW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC00MzgsNyArNDM5LDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmVtaQogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIC8vIFRoaXMgcGFzc2VzIE5v
RXhwZWN0ZWRGdW5jdGlvbiBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGlmIHRoZSBmdW5jdGlvbiBp
cyBpbiBhCiAgICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlLCB0aGVuIGl0J3Mgbm90IG9uZSBvZiBv
dXIgYnVpbHQtaW4gY29uc3RydWN0b3JzLgotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRD
YWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBk
aXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0K
IAogICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkpIHsKQEAgLTQ0NiwxNiArNDQ3LDE2
IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAgICAgICAgQ2Fs
bEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRHZXRTdGF0aWNWYXIoZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVu
dCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5j
LmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0
YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFy
dCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBleHBlY3Rl
ZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3Is
IG1fYXJncyk7Ci0gICAgaW50IGlkZW50aWZpZXJTdGFydCA9IGRpdm90KCkgLSBkaXZvdFN0YXJ0
T2Zmc2V0KCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGlkZW50aWZpZXJT
dGFydCArIG1faWRlbnQubGVuZ3RoKCksIG1faWRlbnQubGVuZ3RoKCksIDAsIGRpdm90TGluZSgp
LCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBKU1Rva2VuUG9zaXRpb24gbmV3RGl2b3QgPSBkaXZv
dFN0YXJ0KCkgKyBtX2lkZW50Lmxlbmd0aCgpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwogICAgIGdlbmVyYXRvci5l
bWl0UmVzb2x2ZVdpdGhUaGlzKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGZ1bmMuZ2V0
KCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwg
ZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBleHBlY3Rl
ZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxs
QnJhY2tldE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDY0LDEx
ICs0NjUsMTEgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaQogewog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7
CiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3Jp
cHQpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90
KCksIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgpLCBzdWJleHByZXNzaW9uRW5kT2Zmc2V0KCks
IHN1YmV4cHJlc3Npb25MaW5lKCksIHN1YmV4cHJlc3Npb25MaW5lU3RhcnQoKSk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVz
c2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxB
cmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVu
Y3Rpb24uZ2V0KCkpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRD
YWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0
KCkpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC00NzgsOSArNDc5LDkgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25D
YWxsRG90Tm9kZTo6ZW1pdEJ5dAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1
bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2Jhc2UpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgp
LCBzdWJleHByZXNzaW9uRW5kT2Zmc2V0KCksIHN1YmV4cHJlc3Npb25MaW5lKCksIHN1YmV4cHJl
c3Npb25MaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJl
eHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQo
KSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRD
YWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0
KCkpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgp
LCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpLCBmdW5j
dGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogfQogCiBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25D
YWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKQEAgLTQ4OCw3ICs0ODksNyBAQCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rp
b25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgUmVmUHRyPExhYmVsPiByZWFsQ2FsbCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwogICAgIFJlZlB0cjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9i
YXNlKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZv
dCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgp
LCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkpOworICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJl
c3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
aW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pckln
bm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZOb3RG
dW5jdGlvbkNhbGwoZnVuY3Rpb24uZ2V0KCksIHJlYWxDYWxsLmdldCgpKTsKQEAgLTUwMCw3ICs1
MDEsNyBAQCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3Zl
KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAg
ICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9s
ZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0
aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVu
Y3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RF
bmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxG
dW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7CiAKICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG9sZExp
c3Q7CkBAIC01MDgsNyArNTA5LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OmVtaQogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdl
bmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0
KCkpOwogICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwg
bV9hcmdzKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9m
ZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7
CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3Jl
ZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1
bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTUxNiw3
ICs1MTcsNyBAQCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pCiAgICAg
ewogICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3Mp
OwogICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwgYmFzZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0
aW9uT3JJZ25vcmVkLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0
KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsK
ICAgICByZXR1cm4gZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKTsKQEAgLTUzOCw3ICs1
MzksNyBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgUmVm
UHRyPExhYmVsPiByZWFsQ2FsbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgIFJlZlB0cjxM
YWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZz
ZXQoKSwgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJl
eHByZXNzaW9uTGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
c3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9u
RW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0
R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIG1faWRl
bnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkID0g
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQoKSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7CkBAIC01NTMsMjAgKzU1NCwyMCBAQCBSZWdpc3RlcklEKiBBcHBs
eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEFy
Z3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9s
ZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChm
aW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhw
ZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgp
LCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBt
X2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dDsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
b2xkTGlzdC0+bV9leHByKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxs
KGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0
KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pckln
bm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRMaXN0Owog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRp
b24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxs
QXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9y
ZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlQobV9hcmdzLT5tX2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+
bV9uZXh0KTsKQEAgLTU4Nyw3ICs1ODgsNyBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtCiAgICAgICAgICAgICB3aGlsZSAoKGFyZ3MgPSBhcmdzLT5tX25leHQpKQog
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShhcmdzLT5tX2V4cHIpOwogCi0gICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGxWYXJhcmdzKGZpbmFsRGVzdGluYXRpb25Pcklnbm9y
ZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBhcmdzUmVn
aXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvZmlsZUhvb2tSZWdpc3Rl
ci5nZXQoKSwgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBk
aXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dENhbGxWYXJhcmdzKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlv
bi5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBhcmdzUmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgcHJvZmlsZUhvb2tSZWdpc3Rlci5nZXQoKSwgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgfQogICAgICAgICBnZW5lcmF0b3IuZW1p
dEp1bXAoZW5kLmdldCgpKTsKICAgICB9CkBAIC01OTUsNyArNTk2LDcgQEAgUmVnaXN0ZXJJRCog
QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgIHsKICAgICAgICAgQ2FsbEFyZ3VtZW50
cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwotICAgICAg
ICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgZnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RM
aW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9u
T3JJZ25vcmVkLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAgICAgcmV0dXJuIGZpbmFsRGVzdGlu
YXRpb25Pcklnbm9yZWQuZ2V0KCk7CkBAIC02NDMsNyArNjQ0LDcgQEAgUmVnaXN0ZXJJRCogUG9z
dGZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dAogICAgICAgICByZXR1cm4gb2xkVmFsdWUuZ2V0KCk7
CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVT
dGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZUlu
Zm87CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVX
aXRoQmFzZUZvclB1dChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCByZXNv
bHZlUmVzdWx0LCBpZGVudCwgcmVzb2x2ZUluZm8pOwpAQCAtNjY1LDEwICs2NjYsMTAgQEAgUmVn
aXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KEJ5dAogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKGJhc2VOb2RlLCBi
cmFja2V0QWNjZXNzb3ItPnN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzKCksIHN1YnNjcmlwdC0+aXNQ
dXJlKGdlbmVyYXRvcikpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShzdWJzY3JpcHQpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhicmFja2V0QWNjZXNzb3ItPmRpdm90KCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RTdGFy
dE9mZnNldCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90RW5kT2Zmc2V0KCksIGJyYWNrZXRBY2Nl
c3Nvci0+ZGl2b3RMaW5lKCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhicmFja2V0QWNjZXNzb3ItPmRpdm90KCks
IGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RTdGFydCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90RW5k
KCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlW
YWwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7
CiAgICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBlbWl0UG9zdEluY09yRGVjKGdlbmVyYXRvciwg
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zm
c2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9w
ZXJ0eS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVlKTsKIH0KQEAgLTY4NSwxMCArNjg2LDEwIEBA
IFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2QKIAogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2VOb2RlKTsKIAotICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZG90QWNjZXNzb3ItPmRpdm90KCksIGRvdEFjY2Vz
c29yLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGRvdEFjY2Vzc29yLT5kaXZvdEVuZE9mZnNldCgpLCBk
b3RBY2Nlc3Nvci0+ZGl2b3RMaW5lKCksIGRvdEFjY2Vzc29yLT5kaXZvdExpbmVTdGFydCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBk
b3RBY2Nlc3Nvci0+ZGl2b3RTdGFydCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgaWRlbnQpOwogICAgIFJlZ2lzdGVySUQqIG9s
ZFZhbHVlID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOwotICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNl
dCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdl
bmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCkpOwogICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVl
KTsKIH0KQEAgLTcxNyw3ICs3MTgsNyBAQCBSZWdpc3RlcklEKiBEZWxldGVSZXNvbHZlTm9kZTo6
ZW1pdEJ5dGVjCiAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNSZWdpc3RlcigpKQogICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IGZhbHNlKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJl
c3VsdCwgbV9pZGVudCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UpLCBiYXNlLCBtX2lkZW50KTsKIH0KQEAg
LTcyOSw3ICs3MzAsNyBAQCBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVj
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7
CiAgICAgUmVnaXN0ZXJJRCogcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwog
Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zm
c2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlWYWwoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIHIxKTsKIH0KIApAQCAtNzM5LDcg
Kzc0MCw3IEBAIFJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSgKIHsKICAg
ICBSZWdpc3RlcklEKiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogCi0gICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRp
dm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCByMCwgbV9pZGVudCk7CiB9CiAKQEAgLTgyNSw3ICs4MjYsNyBAQCBS
ZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXRlCiAgICAgICAgIHJldHVybiBn
ZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwog
ICAgIH0KIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3Rh
cnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2Vu
ZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwogICAgIE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVz
b2x2ZVZlcmlmaWVyOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wRHN0
LmdldCgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCwgcmVzb2x2ZVZlcmlmaWVyKTsKQEAgLTg0NSwx
MCArODQ2LDEwIEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXRCcmFja2V0KEJ5dGUKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUoc3Vic2Ny
aXB0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYnJhY2tl
dEFjY2Vzc29yLT5kaXZvdCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90U3RhcnRPZmZzZXQoKSwg
YnJhY2tldEFjY2Vzc29yLT5kaXZvdEVuZE9mZnNldCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90
TGluZSgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oYnJhY2tldEFjY2Vzc29yLT5kaXZvdCgpLCBicmFja2V0QWNj
ZXNzb3ItPmRpdm90U3RhcnQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdEVuZCgpKTsKICAgICBS
ZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwocHJvcERzdC5nZXQoKSwg
YmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3Is
IHZhbHVlLCBtX29wZXJhdG9yKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCks
IGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5
VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZSk7CiAgICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CiB9CkBA
IC04NjMsMTAgKzg2NCwxMCBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0RG90KEJ5dGVj
b2RlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYmFz
ZU5vZGUpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkb3RB
Y2Nlc3Nvci0+ZGl2b3QoKSwgZG90QWNjZXNzb3ItPmRpdm90U3RhcnRPZmZzZXQoKSwgZG90QWNj
ZXNzb3ItPmRpdm90RW5kT2Zmc2V0KCksIGRvdEFjY2Vzc29yLT5kaXZvdExpbmUoKSwgZG90QWNj
ZXNzb3ItPmRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZG90QWNjZXNzb3ItPmRpdm90KCksIGRvdEFjY2Vzc29yLT5kaXZvdFN0YXJ0KCksIGRvdEFj
Y2Vzc29yLT5kaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5l
bWl0R2V0QnlJZChwcm9wRHN0LmdldCgpLCBiYXNlLmdldCgpLCBpZGVudCk7CiAgICAgZW1pdElu
Y09yRGVjKGdlbmVyYXRvciwgdmFsdWUsIG1fb3BlcmF0b3IpOwotICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNl
dCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdl
bmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBpZGVudCwgdmFsdWUpOwogICAgIHJldHVy
biBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkp
OwogfQpAQCAtODkyLDcgKzg5Myw3IEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXRCeXRl
Y29kZShCeXQKIFJlZ2lzdGVySUQqIFVuYXJ5T3BOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZ2lzdGVySUQq
IHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwotICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oc3RhcnRPZmZzZXQoKSwgMCwgMCwgbGluZU5vKCksIGxpbmVTdGFydE9mZnNl
dCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHBvc2l0aW9uKCksIHBvc2l0
aW9uKCksIHBvc2l0aW9uKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3Bj
b2RlSUQoKSwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKIH0KIApAQCAt
MTAyNCw4ICsxMDI1LDcgQEAgUmVnaXN0ZXJJRCogQmluYXJ5T3BOb2RlOjplbWl0U3RyY2F0KEJ5
dAogICAgIC8vIENlcnRhaW4gcmVhZC1tb2RpZnkgbm9kZXMgcmVxdWlyZSBleHByZXNzaW9uIGlu
Zm8gdG8gYmUgZW1pdHRlZCAqYWZ0ZXIqIG1fcmlnaHQgaGFzIGJlZW4gZ2VuZXJhdGVkLgogICAg
IC8vIElmIHRoaXMgaXMgcmVxdWlyZWQgdGhlIG5vZGUgaXMgcGFzc2VkIGFzICdlbWl0RXhwcmVz
c2lvbkluZm9Gb3JNZSc7IGRvIHNvIG5vdy4KICAgICBpZiAoZW1pdEV4cHJlc3Npb25JbmZvRm9y
TWUpCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZW1pdEV4cHJlc3Npb25J
bmZvRm9yTWUtPmRpdm90KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdFN0YXJ0T2Zm
c2V0KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdEVuZE9mZnNldCgpLCBlbWl0RXhw
cmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RMaW5lKCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5k
aXZvdExpbmVTdGFydCgpKTsKLQorICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JN
ZS0+ZGl2b3RTdGFydCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RFbmQoKSk7CiAg
ICAgLy8gSWYgdGhlcmUgaXMgYW4gYXNzaWdubWVudCBjb252ZXJ0IHRoZSBsaHMgbm93LiAgVGhp
cyB3aWxsIGFsc28gY29weSBsaHMgdG8KICAgICAvLyB0aGUgdGVtcG9yYXJ5IHJlZ2lzdGVyIHdl
IGFsbG9jYXRlZCBmb3IgaXQuCiAgICAgaWYgKGxocykKQEAgLTExNjQsNyArMTE2NCw3IEBAIFJl
Z2lzdGVySUQqIFRocm93YWJsZUJpbmFyeU9wTm9kZTo6ZW1pdEIKIHsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2V4cHIx
LCBtX3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fZXhwcjItPmlzUHVyZShnZW5lcmF0b3IpKTsKICAg
ICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIpOwotICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBk
aXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpbmFyeU9wKG9wY29kZUlEKCksIGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIs
IE9wZXJhbmRUeXBlcyhtX2V4cHIxLT5yZXN1bHREZXNjcmlwdG9yKCksIG1fZXhwcjItPnJlc3Vs
dERlc2NyaXB0b3IoKSkpOwogfQogCkBAIC0xMTc2LDEzICsxMTc2LDEzIEBAIFJlZ2lzdGVySUQq
IEluc3RhbmNlT2ZOb2RlOjplbWl0Qnl0ZWNvZGUKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZHN0
UmVnID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKTsKICAgICBS
ZWZQdHI8TGFiZWw+IHRhcmdldCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0gICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90
RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRDaGVja0hhc0luc3RhbmNlKGRzdFJlZy5nZXQoKSwgc3JjMS5n
ZXQoKSwgc3JjMi5nZXQoKSwgdGFyZ2V0LmdldCgpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgp
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVy
YXRvci5lbWl0R2V0QnlJZChwcm90b3R5cGUuZ2V0KCksIHNyYzIuZ2V0KCksIGdlbmVyYXRvci52
bSgpLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCks
IGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0
ZXJJRCogcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRJbnN0YW5jZU9mKGRzdFJlZy5nZXQoKSwgc3Jj
MS5nZXQoKSwgcHJvdG90eXBlLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHRhcmdl
dC5nZXQoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEyOTMsOCArMTI5Myw3IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQqIGVtaXRSZWEKICAgICAvLyBDZXJ0YWluIHJlYWQt
bW9kaWZ5IG5vZGVzIHJlcXVpcmUgZXhwcmVzc2lvbiBpbmZvIHRvIGJlIGVtaXR0ZWQgKmFmdGVy
KiBtX3JpZ2h0IGhhcyBiZWVuIGdlbmVyYXRlZC4KICAgICAvLyBJZiB0aGlzIGlzIHJlcXVpcmVk
IHRoZSBub2RlIGlzIHBhc3NlZCBhcyAnZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUnOyBkbyBzbyBu
b3cuCiAgICAgaWYgKGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lKQotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdCgpLCBlbWl0
RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RTdGFydE9mZnNldCgpLCBlbWl0RXhwcmVzc2lvbklu
Zm9Gb3JNZS0+ZGl2b3RFbmRPZmZzZXQoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90
TGluZSgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RMaW5lU3RhcnQoKSk7Ci0KKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhlbWl0RXhwcmVzc2lvbkluZm9Gb3JN
ZS0+ZGl2b3QoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90U3RhcnQoKSwgZW1pdEV4
cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEJpbmFyeU9wKG9wY29kZUlELCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKIH0KIApAQCAtMTMy
OCw3ICsxMzI3LDggQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0Qgog
ICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSAt
IGRpdm90U3RhcnRPZmZzZXQoKSArIG1faWRlbnQubGVuZ3RoKCksIG1faWRlbnQubGVuZ3RoKCks
IDAsIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBKU1Rva2VuUG9zaXRpb24g
bmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50Lmxlbmd0aCgpOworICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwog
ICAgIE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQoZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCBzcmMxLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50LCBy
ZXNvbHZlVmVyaWZpZXIpOwogICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5
QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3Jj
MS5nZXQoKSksIHNyYzEuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhS
ZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0
aGlzKTsKQEAgLTEzNjMsNyArMTM2Myw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2Rl
OjplbWl0Qnl0ZWMKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAg
ICAgICAgIGRzdCA9IDA7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUoZHN0LCBtX3JpZ2h0KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRp
dm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQ
dXRUb0Jhc2UoYmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUsIHJlc29sdmVWZXJpZmllcik7CiB9
CiAKQEAgLTEzNzQsNyArMTM3NCw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkRvdE5vZGU6OmVtaXRC
eXRlY29kZSgKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+
aXNQdXJlKGdlbmVyYXRvcikpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVy
YXRvci5kZXN0aW5hdGlvbkZvckFzc2lnblJlc3VsdChkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJl
c3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZSh2YWx1ZS5nZXQoKSwgbV9yaWdodCk7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRp
dm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIGZvcndhcmRSZXN1bHQpOwog
ICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZvcndh
cmRSZXN1bHQpOwpAQCAtMTM4NiwxMSArMTM4NiwxMSBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5
RG90Tm9kZTo6ZW1pdEJ5dGVjCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5l
cmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3JpZ2h0SGFzQXNzaWdubWVu
dHMsIG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydE9mZnNl
dCgpLCBzdWJleHByZXNzaW9uRW5kT2Zmc2V0KCksIHN1YmV4cHJlc3Npb25MaW5lKCksIHN1YmV4
cHJlc3Npb25MaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhz
dWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25F
bmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7
CiAgICAgUmVnaXN0ZXJJRCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50
KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSks
IHZhbHVlLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlw
ZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAKLSAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwg
ZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRl
bnQsIHVwZGF0ZWRWYWx1ZSk7CiB9CiAKQEAgLTE0MTAsNyArMTQxMCw3IEBAIFJlZ2lzdGVySUQq
IEFzc2lnbkJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFs
dWUgPSBnZW5lcmF0b3IuZGVzdGluYXRpb25Gb3JBc3NpZ25SZXN1bHQoZHN0KTsKICAgICBSZWdp
c3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUodmFsdWUuZ2V0KCksIG1fcmlnaHQp
OwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0
T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgp
KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0g
Z2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3Vs
dCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQo
KSwgZm9yd2FyZFJlc3VsdCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlv
bklmTmVlZGVkKGRzdCwgZm9yd2FyZFJlc3VsdCk7CkBAIC0xNDIzLDExICsxNDIzLDExIEBAIFJl
Z2lzdGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1f
c3Vic2NyaXB0SGFzQXNzaWdubWVudHMgfHwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNj
cmlwdC0+aXNQdXJlKGdlbmVyYXRvcikgJiYgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxl
ZnRIYW5kU2lkZShtX3N1YnNjcmlwdCwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5p
c1B1cmUoZ2VuZXJhdG9yKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1
YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVz
c2lvbkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0
YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRp
dm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAg
UmVnaXN0ZXJJRCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVy
YXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVl
LmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5r
bm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAKLSAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RF
bmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB1
cGRhdGVkVmFsdWUpOwogCiAgICAgcmV0dXJuIHVwZGF0ZWRWYWx1ZTsKQEAgLTE3MzksNyArMTcz
OSw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICAgICAg
ICAgIE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAgICAgICAgICAgUmVn
aXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCwgcmVzb2x2ZVZlcmlmaWVyKTsK
IAotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVT
dGFydCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
UHV0VG9CYXNlKGJhc2UsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIHJlc29sdmVWZXJpZmllcik7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleHBlY3RlZFN1YnNjcmlwdCA9IGdlbmVyYXRv
ci5lbWl0TW92ZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZSk7CkBAIC0x
NzUzLDcgKzE3NTMsNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwogICAg
ICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJh
c2UoKSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2Rl
LT5kaXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGFzc2lnbk5vZGUtPmRp
dm90RW5kT2Zmc2V0KCksIGFzc2lnbk5vZGUtPmRpdm90TGluZSgpLCBhc3NpZ25Ob2RlLT5kaXZv
dExpbmVTdGFydCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3Np
Z25Ob2RlLT5kaXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRp
dm90RW5kKCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHBy
b3BlcnR5TmFtZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fbGV4cHItPmlzQnJh
Y2tldEFjY2Vzc29yTm9kZSgpKTsKQEAgLTE3NjMsNyArMTc2Myw3IEBAIHZvaWQgRm9ySW5Ob2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJh
c2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+YmFzZSgpKTsKICAgICAgICAgUmVn
aXN0ZXJJRCogc3Vic2NyaXB0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPnN1YnNj
cmlwdCgpKTsKICAgICAgICAgCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
YXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydE9mZnNldCgpLCBhc3Np
Z25Ob2RlLT5kaXZvdEVuZE9mZnNldCgpLCBhc3NpZ25Ob2RlLT5kaXZvdExpbmUoKSwgYXNzaWdu
Tm9kZS0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgpLCBhc3Np
Z25Ob2RlLT5kaXZvdEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNl
LmdldCgpLCBzdWJzY3JpcHQsIHByb3BlcnR5TmFtZSk7CiAgICAgfSAgIAogCkBAIC0xODU5LDcg
KzE4NTksNyBAQCB2b2lkIFdpdGhOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lCiAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgp
LCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fZXhwcmVzc2lvbkxlbmd0
aCwgMCwgbV9kaXZvdExpbmUsIG1fZGl2b3RMaW5lU3RhcnQpOworICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9kaXZvdCAtIG1fZXhwcmVzc2lvbkxlbmd0aCwgbV9k
aXZvdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXNoV2l0aFNjb3BlKHNjb3BlLmdldCgpKTsKICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRQb3BTY29wZSgpOwpAQCAtMjA2Myw3ICsyMDYzLDcgQEAgdm9pZCBUaHJvd05vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbgogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1
bHQoKSkKICAgICAgICAgZHN0ID0gMDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhwciA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExp
bmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0
VGhyb3coZXhwci5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvQVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvQVNUQnVpbGRlci5oCShyZXZpc2lvbiAxNTI1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjAgKzMzLDEyIEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQVNUQnVpbGRlciB7Ci0gICAgc3RydWN0IFBvc2l0
aW9uSW5mbyB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zOwotICAgICAgICB1bnNpZ25lZCBs
aW5lOwotICAgICAgICB1bnNpZ25lZCBsaW5lU3RhcnRQb3M7Ci0gICAgfTsKLQogICAgIHN0cnVj
dCBCaW5hcnlPcEluZm8gewogICAgICAgICBCaW5hcnlPcEluZm8oKSB7fQotICAgICAgICBCaW5h
cnlPcEluZm8oaW50IG90aGVyU3RhcnQsIGludCBvdGhlckRpdm90LCBpbnQgb3RoZXJFbmQsIHVu
c2lnbmVkIG90aGVyRGl2b3RMaW5lLCB1bnNpZ25lZCBvdGhlckRpdm90TGluZVN0YXJ0LCBib29s
IHJoc0hhc0Fzc2lnbm1lbnQpCisgICAgICAgIEJpbmFyeU9wSW5mbyhjb25zdCBKU1Rva2VuUG9z
aXRpb24mIG90aGVyU3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgb3RoZXJEaXZvdCwgY29u
c3QgSlNUb2tlblBvc2l0aW9uJiBvdGhlckVuZCwgYm9vbCByaHNIYXNBc3NpZ25tZW50KQogICAg
ICAgICAgICAgOiBzdGFydChvdGhlclN0YXJ0KQogICAgICAgICAgICAgLCBkaXZvdChvdGhlckRp
dm90KQogICAgICAgICAgICAgLCBlbmQob3RoZXJFbmQpCi0gICAgICAgICAgICAsIGRpdm90TGlu
ZShvdGhlckRpdm90TGluZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQob3RoZXJEaXZv
dExpbmVTdGFydCkKICAgICAgICAgICAgICwgaGFzQXNzaWdubWVudChyaHNIYXNBc3NpZ25tZW50
KQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTU0LDM5ICs0NiwzMSBAQCBjbGFzcyBBU1RCdWls
ZGVyIHsKICAgICAgICAgICAgIDogc3RhcnQobGhzLnN0YXJ0KQogICAgICAgICAgICAgLCBkaXZv
dChyaHMuc3RhcnQpCiAgICAgICAgICAgICAsIGVuZChyaHMuZW5kKQotICAgICAgICAgICAgLCBk
aXZvdExpbmUocmhzLmRpdm90TGluZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQocmhz
LmRpdm90TGluZVN0YXJ0KQogICAgICAgICAgICAgLCBoYXNBc3NpZ25tZW50KGxocy5oYXNBc3Np
Z25tZW50IHx8IHJocy5oYXNBc3NpZ25tZW50KQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAg
ICAgaW50IHN0YXJ0OwotICAgICAgICBpbnQgZGl2b3Q7Ci0gICAgICAgIGludCBlbmQ7Ci0gICAg
ICAgIHVuc2lnbmVkIGRpdm90TGluZTsKLSAgICAgICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQ7
CisgICAgICAgIEpTVG9rZW5Qb3NpdGlvbiBzdGFydDsKKyAgICAgICAgSlNUb2tlblBvc2l0aW9u
IGRpdm90OworICAgICAgICBKU1Rva2VuUG9zaXRpb24gZW5kOwogICAgICAgICBib29sIGhhc0Fz
c2lnbm1lbnQ7CiAgICAgfTsKICAgICAKICAgICAKICAgICBzdHJ1Y3QgQXNzaWdubWVudEluZm8g
ewogICAgICAgICBBc3NpZ25tZW50SW5mbygpIHt9Ci0gICAgICAgIEFzc2lnbm1lbnRJbmZvKEV4
cHJlc3Npb25Ob2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQsIGludCBpbml0QXNzaWdubWVu
dHMsIE9wZXJhdG9yIG9wKQorICAgICAgICBBc3NpZ25tZW50SW5mbyhFeHByZXNzaW9uTm9kZSog
bm9kZSwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9u
JiBkaXZvdCwgaW50IGluaXRBc3NpZ25tZW50cywgT3BlcmF0b3Igb3ApCiAgICAgICAgICAgICA6
IG1fbm9kZShub2RlKQogICAgICAgICAgICAgLCBtX3N0YXJ0KHN0YXJ0KQogICAgICAgICAgICAg
LCBtX2Rpdm90KGRpdm90KQotICAgICAgICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExpbmUpCi0g
ICAgICAgICAgICAsIG1fZGl2b3RMaW5lU3RhcnQoZGl2b3RMaW5lU3RhcnQpCiAgICAgICAgICAg
ICAsIG1faW5pdEFzc2lnbm1lbnRzKGluaXRBc3NpZ25tZW50cykKICAgICAgICAgICAgICwgbV9v
cChvcCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3QgPj0gbV9kaXZvdExp
bmVTdGFydCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdGFydCA+PSBtX2Rpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90Lm9mZnNldCA+PSBtX2Rpdm90LmxpbmVTdGFy
dE9mZnNldCk7CisgICAgICAgICAgICBBU1NFUlQobV9zdGFydC5vZmZzZXQgPj0gbV9zdGFydC5s
aW5lU3RhcnRPZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX25v
ZGU7Ci0gICAgICAgIHVuc2lnbmVkIG1fc3RhcnQ7Ci0gICAgICAgIHVuc2lnbmVkIG1fZGl2b3Q7
Ci0gICAgICAgIHVuc2lnbmVkIG1fZGl2b3RMaW5lOwotICAgICAgICB1bnNpZ25lZCBtX2Rpdm90
TGluZVN0YXJ0OworICAgICAgICBKU1Rva2VuUG9zaXRpb24gbV9zdGFydDsKKyAgICAgICAgSlNU
b2tlblBvc2l0aW9uIG1fZGl2b3Q7CiAgICAgICAgIGludCBtX2luaXRBc3NpZ25tZW50czsKICAg
ICAgICAgT3BlcmF0b3IgbV9vcDsKICAgICB9OwpAQCAtMTMxLDcgKzExNSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgaW50ICBEb250QnVpbGRTdHJpbmdzID0gMDsKIAogICAgIEV4cHJl
c3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQgdG9r
ZW4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4sIHN0ZDo6cGFpcjxF
eHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4pOwotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtl
RnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSog
ZnVuYywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCB1bnNpZ25lZCBkaXZvdCwgaW50
IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAg
RXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50
cyogY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fdm0pIEpTQzo6U291cmNl
RWxlbWVudHMoKTsgfQogCkBAIC0xNDQsMTEgKzEyOCwxMSBAQCBwdWJsaWM6CiAKICAgICBDb21t
YU5vZGUqIGNyZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKSB7IHJldHVybiBuZXcgKG1f
dm0pIENvbW1hTm9kZShsb2NhdGlvbiwgbGhzLCByaHMpOyB9CiAKLSAgICBFeHByZXNzaW9uTm9k
ZSogbWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUq
IGxlZnQsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgbGVmdEhhc0Fzc2ln
bm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBp
bnQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKLSAg
ICBFeHByZXNzaW9uTm9kZSogbWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQs
IHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOwotICAgIEV4cHJl
c3Npb25Ob2RlKiBtYWtlUG9zdGZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvbk5vZGUqLCBPcGVyYXRvciwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgIEV4cHJlc3Npb25O
b2RlKiBtYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9k
ZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNz
aWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUb2tlblBvc2l0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBlbmQpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCBjb25zdCBKU1Rva2VuUG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2Vu
UG9zaXRpb24mIGVuZCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VQb3N0Zml4Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1Rva2VuUG9zaXRpb24mIGVuZCk7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VUeXBlT2ZOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7Ci0gICAgRXhwcmVzc2lv
bk5vZGUqIG1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwg
dW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOyAKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZURlbGV0
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1Rva2VuUG9zaXRpb24mIGVuZCk7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VOZWdhdGVOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7CiAgICAgRXhwcmVzc2lv
bk5vZGUqIG1ha2VCaXR3aXNlTm90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uTm9kZSopOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlTXVsdE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKQEAgLTE4MSwxMSArMTY1LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgdXNlc1RoaXMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgVGhpc05vZGUo
bG9jYXRpb24pOwogICAgIH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlUmVzb2x2ZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQp
CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlv
biYgc3RhcnQpCiAgICAgewogICAgICAgICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1l
bnRzID09ICppZGVudCkKICAgICAgICAgICAgIHVzZXNBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0
dXJuIG5ldyAobV92bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sICppZGVudCwgc3RhcnQsIGRpdm90
TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBSZXNvbHZl
Tm9kZShsb2NhdGlvbiwgKmlkZW50LCBzdGFydCk7CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pIHsg
cmV0dXJuIG5ldyAobV92bSkgT2JqZWN0TGl0ZXJhbE5vZGUobG9jYXRpb24pOyB9CiAgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgUHJvcGVydHlMaXN0Tm9kZSogcHJvcGVydGllcykgeyByZXR1cm4gbmV3IChtX3Zt
KSBPYmplY3RMaXRlcmFsTm9kZShsb2NhdGlvbiwgcHJvcGVydGllcyk7IH0KQEAgLTIyOCw0MSAr
MjEyLDQyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgTnVsbE5vZGUobG9j
YXRpb24pOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVCcmFja2V0QWNjZXNz
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBF
eHByZXNzaW9uTm9kZSogcHJvcGVydHksIGJvb2wgcHJvcGVydHlIYXNBc3NpZ25tZW50cywgaW50
IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQg
ZGl2b3RMaW5lU3RhcnQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUJyYWNrZXRBY2Nlc3Mo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4
cHJlc3Npb25Ob2RlKiBwcm9wZXJ0eSwgYm9vbCBwcm9wZXJ0eUhhc0Fzc2lnbm1lbnRzLCBjb25z
dCBKU1Rva2VuUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1Rva2VuUG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nv
ck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEJyYWNrZXRBY2Nlc3Nvck5vZGUobG9jYXRpb24sIGJh
c2UsIHByb3BlcnR5LCBwcm9wZXJ0eUhhc0Fzc2lnbm1lbnRzKTsKLSAgICAgICAgc2V0RXhjZXB0
aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQsIGRpdm90TGluZSwgZGl2b3RMaW5l
U3RhcnQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3Qs
IGVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVEb3RBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5LCBpbnQgc3RhcnQsIGlu
dCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG90QWNjZXNzKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVy
KiBwcm9wZXJ0eSwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlblBv
c2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAg
ICBEb3RBY2Nlc3Nvck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIERvdEFjY2Vzc29yTm9kZShsb2Nh
dGlvbiwgYmFzZSwgKnByb3BlcnR5KTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgc3RhcnQsIGRpdm90LCBlbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAg
ICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAg
IHJldHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZWdFeHAo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgcGF0dGVy
biwgY29uc3QgSWRlbnRpZmllciYgZmxhZ3MsIGludCBzdGFydCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlUmVn
RXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIHBh
dHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdzLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHN0
YXJ0KQogICAgIHsKICAgICAgICAgaWYgKFlhcnI6OmNoZWNrU3ludGF4KHBhdHRlcm4uc3RyaW5n
KCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIFJlZ0V4cE5vZGUqIG5vZGUgPSBu
ZXcgKG1fdm0pIFJlZ0V4cE5vZGUobG9jYXRpb24sIHBhdHRlcm4sIGZsYWdzKTsKICAgICAgICAg
aW50IHNpemUgPSBwYXR0ZXJuLmxlbmd0aCgpICsgMjsgLy8gKyAyIGZvciB0aGUgdHdvIC8ncwot
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgc3RhcnQgKyBzaXplLCBz
dGFydCArIHNpemUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBKU1Rva2Vu
UG9zaXRpb24gZW5kID0gc3RhcnQgKyBzaXplOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlv
bihub2RlLCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAK
LSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRz
LCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNp
Z25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3RXhwcihj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJn
dW1lbnRzTm9kZSogYXJndW1lbnRzLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGVuZCkKICAg
ICB7CiAgICAgICAgIE5ld0V4cHJOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBOZXdFeHByTm9kZShs
b2NhdGlvbiwgZXhwciwgYXJndW1lbnRzKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24o
bm9kZSwgc3RhcnQsIGRpdm90LCBlbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAg
ICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAg
ICAgIHJldHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdF
eHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RM
aW5lU3RhcnQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGNvbnN0IEpTVG9rZW5Q
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAg
ICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIE5ld0V4cHJOb2RlKGxvY2F0aW9uLCBl
eHByKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGVuZCwgZW5k
LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRp
b24obm9kZSwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQog
CkBAIC0yNzEsMTIgKzI1NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBuZXcgKG1fdm0p
IENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBsaHMsIHJocyk7CiAgICAgfQog
Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2Rl
KiByaHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUs
IHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBc3Np
Z25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmhzLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24m
IGVuZCkKICAgICB7CiAgICAgICAgIGlmIChyaHMtPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihyaHMpLT5ib2R5KCktPnNldEluZmVycmVk
TmFtZShpZGVudCk7CiAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBub2RlID0gbmV3IChtX3Zt
KSBBc3NpZ25SZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIHJocyk7Ci0gICAgICAgIHNldEV4
Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZvdExpbmUsIGRpdm90
TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRp
dm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKQEAgLTM1NSwxMCArMzQw
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0KIAotICAgIFN0YXRl
bWVudE5vZGUqIGNyZWF0ZUV4cHJTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVuZCkKKyAgICBTdGF0
ZW1lbnROb2RlKiBjcmVhdGVFeHByU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHN0YXJ0
LCBpbnQgZW5kKQogICAgIHsKICAgICAgICAgRXhwclN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5l
dyAobV92bSkgRXhwclN0YXRlbWVudE5vZGUobG9jYXRpb24sIGV4cHIpOwotICAgICAgICByZXN1
bHQtPnNldExvYyhzdGFydCwgZW5kLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLCBz
dGFydC5vZmZzZXQsIHN0YXJ0LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCkBAIC0zNzYsMTkgKzM2MSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBF
eHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1l
bnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgaW50IGlu
aXRTdGFydCwgaW50IGluaXRFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25l
ZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIFN0YXRlbWVudE5vZGUq
IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyLCBFeHByZXNzaW9u
Tm9kZSogaXRlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBv
c2l0aW9uJiBlbmQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgaW5pdFN0YXJ0LCBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIGluaXRFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsK
LSAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZShtX3ZtLCBs
b2NhdGlvbiwgKmlkZW50LCBpbml0aWFsaXplciwgaXRlciwgc3RhdGVtZW50cywgaW5pdFN0YXJ0
LCBpbml0U3RhcnQgLSBzdGFydCwgaW5pdEVuZCAtIGluaXRTdGFydCwgZGl2b3RMaW5lLCBkaXZv
dExpbmVTdGFydCk7CisgICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBGb3JJ
bk5vZGUobV92bSwgbG9jYXRpb24sICppZGVudCwgaW5pdGlhbGl6ZXIsIGl0ZXIsIHN0YXRlbWVu
dHMsIGluaXRTdGFydCwgc3RhcnQsIGluaXRFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3Rh
cnRPZmZzZXQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBk
aXZvdCArIDEsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHNldEV4
Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGRpdm90ICsgMSwgZW5kKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JJbkxv
b3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxocywg
RXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBlU3Rh
cnQsIGludCBlRGl2b3QsIGludCBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGRp
dm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3Jl
YXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRz
LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGVTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBl
RGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5kKQog
ICAgIHsKICAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZShs
b2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
c3RhcnQsIGVuZCwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNl
dCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRGl2b3Qs
IGVFbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzZXRFeGNlcHRpb25M
b2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZURpdm90LCBlRW5kKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKQEAgLTQwNSw0MyArMzkwLDQzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5TdGF0
ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHJlc3Npb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGlu
ZSwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBTdGF0
ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb24sIGNvbnN0IEpTVG9rZW5Qb3NpdGlv
biYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgUmV0
dXJuTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBSZXR1cm5Ob2RlKGxvY2F0aW9uLCBleHByZXNz
aW9uKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQs
IGVFbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOwotICAgICAgICByZXN1bHQtPnNldExv
YyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0
LCBlbmQsIGVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LmxpbmUsIGVuZC5saW5l
LCBzdGFydC5vZmZzZXQsIHN0YXJ0LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQnJlYWtTdGF0ZW1lbnQo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVTdGFydCwgaW50IGVFbmQsIGlu
dCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25lZCBlbmRMaW5lU3RhcnQpCisgICAgU3Rh
dGVtZW50Tm9kZSogY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBlbmQpCiAgICAgewogICAgICAgICBCcmVha05vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkg
QnJlYWtOb2RlKG1fdm0sIGxvY2F0aW9uKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24o
cmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZz
ZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCwgaW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGlu
dCBlbmRMaW5lLCB1bnNpZ25lZCBlbmRMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3Jl
YXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VG9rZW5Qb3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBu
ZXcgKG1fdm0pIEJyZWFrTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKLSAgICAgICAgc2V0RXhjZXB0
aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQsIGVuZExpbmUsIGVuZExpbmVT
dGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRp
b24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIHNldEV4
Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0
LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0
YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1l
bnROb2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUs
IHVuc2lnbmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51
ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBKU1Rva2Vu
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAg
ICAgIENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBDb250aW51ZU5vZGUobV92bSwg
bG9jYXRpb24pOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIGVTdGFydCwg
ZUVuZCwgZUVuZCwgZW5kTGluZSwgZW5kTGluZVN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFy
dCwgZW5kLCBlbmQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5lLCBlbmQubGlu
ZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUNvbnRpbnVlU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIHVu
c2lnbmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBlbmQpCiAgICAgewogICAgICAgICBDb250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV92
bSkgQ29udGludWVOb2RlKGxvY2F0aW9uLCAqaWRlbnQpOwotICAgICAgICBzZXRFeGNlcHRpb25M
b2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZUVuZCwgZUVuZCwgZW5kTGluZSwgZW5kTGluZVN0YXJ0
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5z
dGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0
aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOworICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRP
ZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDc2LDI2ICs0NjEs
MjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRl
bWVudE5vZGUqIGNyZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlTGFiZWxTdGF0ZW1l
bnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRl
bnQsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBMYWJlbE5vZGUq
IHJlc3VsdCA9IG5ldyAobV92bSkgTGFiZWxOb2RlKGxvY2F0aW9uLCAqaWRlbnQsIHN0YXRlbWVu
dCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5k
LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRp
b24ocmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUq
IHN0YXRlbWVudCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgc3RhcnRM
aW5lLCB1bnNpZ25lZCBlbmRMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90
TGluZVN0YXJ0KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVu
dE5vZGUqIHN0YXRlbWVudCwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYg
ZW5kLCB1bnNpZ25lZCBzdGFydExpbmUsIHVuc2lnbmVkIGVuZExpbmUpCiAgICAgewogICAgICAg
ICB1c2VzV2l0aCgpOwotICAgICAgICBXaXRoTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBXaXRo
Tm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGRpdm90TGluZSwgZGl2b3RMaW5l
U3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICAgICAgV2l0aE5vZGUqIHJlc3VsdCA9IG5ldyAobV92
bSkgV2l0aE5vZGUobG9jYXRpb24sIGV4cHIsIHN0YXRlbWVudCwgZW5kLCBlbmQgLSBzdGFydCk7
CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3Rh
cnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfSAgICAKICAgICAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVUaHJvd1N0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2Rl
KiBjcmVhdGVUaHJvd1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
SlNUb2tlblBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBUaHJvd05vZGUqIHJlc3VsdCA9
IG5ldyAobV92bSkgVGhyb3dOb2RlKGxvY2F0aW9uLCBleHByKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24u
bGluZVN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBz
dGFydCwgZW5kLCBlbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXN1
bHQtPnNldExvYyhzdGFydC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5l
U3RhcnRPZmZzZXQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0
LCBlbmQsIGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtNTQ2
LDEwICs1MzEsMTAgQEAgcHVibGljOgogCiAgICAgaW50IGV2YWxDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZXZhbENvdW50OyB9CiAKLSAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZv
KGludCYgb3BlcmFuZFN0YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiBjdXJyZW50LCBpbnQgZXhw
clN0YXJ0LCBpbnQgbGhzLCBpbnQgcmhzLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRp
dm90TGluZVN0YXJ0LCBib29sIGhhc0Fzc2lnbm1lbnRzKQorICAgIHZvaWQgYXBwZW5kQmluYXJ5
RXhwcmVzc2lvbkluZm8oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIGN1
cnJlbnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZXhwclN0YXJ0LCBjb25zdCBKU1Rva2VuUG9z
aXRpb24mIGxocywgY29uc3QgSlNUb2tlblBvc2l0aW9uJiByaHMsIGJvb2wgaGFzQXNzaWdubWVu
dHMpCiAgICAgewogICAgICAgICBvcGVyYW5kU3RhY2tEZXB0aCsrOwotICAgICAgICBtX2JpbmFy
eU9wZXJhbmRTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VycmVudCwgQmluYXJ5T3BJbmZv
KGV4cHJTdGFydCwgbGhzLCByaHMsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQsIGhhc0Fzc2ln
bm1lbnRzKSkpOworICAgICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoY3VycmVudCwgQmluYXJ5T3BJbmZvKGV4cHJTdGFydCwgbGhzLCByaHMsIGhhc0Fzc2ln
bm1lbnRzKSkpOwogICAgIH0KIAogICAgIC8vIExvZ2ljIHRvIGhhbmRsZSBkYXRhc3RydWN0dXJl
cyB1c2VkIGR1cmluZyBwYXJzaW5nIG9mIGJpbmFyeSBleHByZXNzaW9ucwpAQCAtNTg2LDExICs1
NzEsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAg
ICB2b2lkIGFwcGVuZFVuYXJ5VG9rZW4oaW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0eXBlLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFy
dCkKKyAgICB2b2lkIGFwcGVuZFVuYXJ5VG9rZW4oaW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0
eXBlLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgdG9rZW5T
dGFja0RlcHRoKys7Ci0gICAgICAgIFBvc2l0aW9uSW5mbyBwb3NpdGlvbiA9IHsgc3RhcnQsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQgfTsKLSAgICAgICAgbV91bmFyeVRva2VuU3RhY2suYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKHR5cGUsIHBvc2l0aW9uKSk7CisgICAgICAgIG1fdW5hcnlUb2tl
blN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih0eXBlLCBzdGFydCkpOwogICAgIH0KIAogICAg
IGludCB1bmFyeVRva2VuU3RhY2tMYXN0VHlwZShpbnQmKQpAQCAtNTk4LDM0ICs1ODIsMjkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgpLmZpcnN0Owog
ICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCB1bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQoaW50JikK
KyAgICBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydChpbnQm
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdW5hcnlUb2tlblN0YWNrLmxhc3QoKS5zZWNvbmQu
c3RhcnRQb3M7CisgICAgICAgIHJldHVybiBtX3VuYXJ5VG9rZW5TdGFjay5sYXN0KCkuc2Vjb25k
OwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCB1bmFyeVRva2VuU3RhY2tMYXN0TGluZVN0YXJ0
UG9zaXRpb24oaW50JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3VuYXJ5VG9rZW5TdGFjay5s
YXN0KCkuc2Vjb25kLmxpbmVTdGFydFBvczsKLSAgICB9Ci0KICAgICB2b2lkIHVuYXJ5VG9rZW5T
dGFja1JlbW92ZUxhc3QoaW50JiB0b2tlblN0YWNrRGVwdGgpCiAgICAgewogICAgICAgICB0b2tl
blN0YWNrRGVwdGgtLTsKICAgICAgICAgbV91bmFyeVRva2VuU3RhY2sucmVtb3ZlTGFzdCgpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGFzc2lnbm1lbnRTdGFja0FwcGVuZChpbnQmIGFzc2lnbm1l
bnRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0LCBp
bnQgYXNzaWdubWVudENvdW50LCBPcGVyYXRvciBvcCkKKyAgICB2b2lkIGFzc2lnbm1lbnRTdGFj
a0FwcGVuZChpbnQmIGFzc2lnbm1lbnRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogbm9kZSwg
Y29uc3QgSlNUb2tlblBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZv
dCwgaW50IGFzc2lnbm1lbnRDb3VudCwgT3BlcmF0b3Igb3ApCiAgICAgewogICAgICAgICBhc3Np
Z25tZW50U3RhY2tEZXB0aCsrOwotICAgICAgICBBU1NFUlQoc3RhcnQgPj0gZGl2b3RMaW5lU3Rh
cnQpOwotICAgICAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5lU3RhcnQpOwotICAgICAgICBt
X2Fzc2lnbm1lbnRJbmZvU3RhY2suYXBwZW5kKEFzc2lnbm1lbnRJbmZvKG5vZGUsIHN0YXJ0LCBk
aXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCwgYXNzaWdubWVudENvdW50LCBvcCkpOwor
ICAgICAgICBBU1NFUlQoc3RhcnQub2Zmc2V0ID49IHN0YXJ0LmxpbmVTdGFydE9mZnNldCk7Cisg
ICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKKyAg
ICAgICAgbV9hc3NpZ25tZW50SW5mb1N0YWNrLmFwcGVuZChBc3NpZ25tZW50SW5mbyhub2RlLCBz
dGFydCwgZGl2b3QsIGFzc2lnbm1lbnRDb3VudCwgb3ApKTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlQXNzaWdubWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBpbnQmIGFzc2lnbm1lbnRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogcmhzLCBpbnQgaW5p
dGlhbEFzc2lnbm1lbnRDb3VudCwgaW50IGN1cnJlbnRBc3NpZ25tZW50Q291bnQsIGludCBsYXN0
VG9rZW5FbmQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnbm1lbnQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50JiBhc3NpZ25tZW50U3RhY2tEZXB0aCwgRXhwcmVz
c2lvbk5vZGUqIHJocywgaW50IGluaXRpYWxBc3NpZ25tZW50Q291bnQsIGludCBjdXJyZW50QXNz
aWdubWVudENvdW50LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGxhc3RUb2tlbkVuZCkKICAgICB7
CiAgICAgICAgIEFzc2lnbm1lbnRJbmZvJiBpbmZvID0gbV9hc3NpZ25tZW50SW5mb1N0YWNrLmxh
c3QoKTsKLSAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHJlc3VsdCA9IG1ha2VBc3NpZ25Ob2RlKGxv
Y2F0aW9uLCBpbmZvLm1fbm9kZSwgaW5mby5tX29wLCByaHMsIGluZm8ubV9pbml0QXNzaWdubWVu
dHMgIT0gaW5pdGlhbEFzc2lnbm1lbnRDb3VudCwgaW5mby5tX2luaXRBc3NpZ25tZW50cyAhPSBj
dXJyZW50QXNzaWdubWVudENvdW50LCBpbmZvLm1fc3RhcnQsIGluZm8ubV9kaXZvdCArIDEsIGxh
c3RUb2tlbkVuZCwgaW5mby5tX2Rpdm90TGluZSwgaW5mby5tX2Rpdm90TGluZVN0YXJ0KTsKKyAg
ICAgICAgRXhwcmVzc2lvbk5vZGUqIHJlc3VsdCA9IG1ha2VBc3NpZ25Ob2RlKGxvY2F0aW9uLCBp
bmZvLm1fbm9kZSwgaW5mby5tX29wLCByaHMsIGluZm8ubV9pbml0QXNzaWdubWVudHMgIT0gaW5p
dGlhbEFzc2lnbm1lbnRDb3VudCwgaW5mby5tX2luaXRBc3NpZ25tZW50cyAhPSBjdXJyZW50QXNz
aWdubWVudENvdW50LCBpbmZvLm1fc3RhcnQsIGluZm8ubV9kaXZvdCArIDEsIGxhc3RUb2tlbkVu
ZCk7CiAgICAgICAgIG1fYXNzaWdubWVudEluZm9TdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAg
IGFzc2lnbm1lbnRTdGFja0RlcHRoLS07CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC02NTEs
MTAgKzYzMCwxMCBAQCBwcml2YXRlOgogICAgICAgICBpbnQgbV9udW1Db25zdGFudHM7CiAgICAg
fTsKIAotICAgIHN0YXRpYyB2b2lkIHNldEV4Y2VwdGlvbkxvY2F0aW9uKFRocm93YWJsZUV4cHJl
c3Npb25EYXRhKiBub2RlLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBz
dGF0aWMgdm9pZCBzZXRFeGNlcHRpb25Mb2NhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSog
bm9kZSwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rva2VuUG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgbm9kZS0+c2V0
RXhjZXB0aW9uU291cmNlQ29kZShkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49
IGRpdm90LmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJj
ZUNvZGUoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICB9CiAKICAgICB2b2lkIGlu
Y0NvbnN0YW50cygpIHsgbV9zY29wZS5tX251bUNvbnN0YW50cysrOyB9CkBAIC02NzgsNyArNjU3
LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8QmluYXJ5T3BlcmFuZCwgMTAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX2JpbmFyeU9wZXJhbmRTdGFjazsKICAgICBWZWN0b3I8QXNzaWdubWVudElu
Zm8sIDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hc3NpZ25tZW50SW5mb1N0YWNrOwogICAg
IFZlY3RvcjxwYWlyPGludCwgaW50PiwgMTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2JpbmFy
eU9wZXJhdG9yU3RhY2s7Ci0gICAgVmVjdG9yPHBhaXI8aW50LCBQb3NpdGlvbkluZm8+LCAxMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdW5hcnlUb2tlblN0YWNrOworICAgIFZlY3RvcjxwYWly
PGludCwgSlNUb2tlblBvc2l0aW9uPiwgMTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3VuYXJ5
VG9rZW5TdGFjazsKICAgICBpbnQgbV9ldmFsQ291bnQ7CiB9OwogCkBAIC02OTEsMjEgKzY3MCwy
MSBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vCiAgICAgcmV0dXJu
IG5ldyAobV92bSkgVHlwZU9mVmFsdWVOb2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIAotRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBkaXZvdCwg
aW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKK0V4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBv
c2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKCFleHByLT5pc0xvY2F0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIERlbGV0ZVZhbHVlTm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgaWYg
KGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9
IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRp
dm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFy
dCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9u
LCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBzdGFydCwgZW5kKTsKICAgICB9CiAgICAg
aWYgKGV4cHItPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nl
c3Nvck5vZGUqIGJyYWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4oZXhw
cik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZUJyYWNrZXROb2RlKGxvY2F0aW9u
LCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBkaXZvdCwgZGl2b3QgLSBz
dGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVCcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFz
ZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogICAgIH0KICAg
ICBBU1NFUlQoZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2Rl
KiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihleHByKTsKLSAgICByZXR1cm4g
bmV3IChtX3ZtKSBEZWxldGVEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVu
dGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBk
aXZvdExpbmVTdGFydCk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgRGVsZXRlRG90Tm9kZShsb2Nh
dGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBkaXZvdCwgc3RhcnQsIGVuZCk7
CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTmVnYXRlTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbikKQEAgLTgyMiwzNiAr
ODAxLDM2IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0WE9yTm8KICAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBCaXRYT3JOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0
SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1
bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGludCBzdGFydCwgdW5zaWduZWQgZGl2
b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQp
CitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50
c05vZGUqIGFyZ3MsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
b2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCkKIHsK
LSAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5lU3RhcnQpOworICAgIEFTU0VSVChkaXZvdC5v
ZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRp
b24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGxv
Y2F0aW9uLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBGdW5j
dGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBS
ZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7CiAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSByZXNvbHZlLT5pZGVudGlmaWVy
KCk7CiAgICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwp
IHsKICAgICAgICAgICAgIHVzZXNFdmFsKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChtX3Zt
KSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgYXJncywgZGl2b3QsIGRpdm90IC0gc3Rh
cnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKG1fdm0pIEV2YWxGdW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBhcmdzLCBk
aXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBu
ZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudGlmaWVyLCBh
cmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RM
aW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxSZXNvbHZl
Tm9kZShsb2NhdGlvbiwgaWRlbnRpZmllciwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKTsKICAgICB9CiAgICAgaWYgKGZ1bmMtPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAg
ICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0
QWNjZXNzb3JOb2RlKj4oZnVuYyk7Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKiBu
b2RlID0gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tl
dC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3Rh
cnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgbm9k
ZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+ZGl2b3RF
bmRPZmZzZXQoKSwgYnJhY2tldC0+ZGl2b3RMaW5lKCksIGJyYWNrZXQtPmRpdm90TGluZVN0YXJ0
KCkpOworICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkg
RnVuY3Rpb25DYWxsQnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tl
dC0+c3Vic2NyaXB0KCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CisgICAg
ICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQt
PmRpdm90RW5kKCkub2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIEFT
U0VSVChmdW5jLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKICAgICBEb3RBY2Nlc3Nvck5vZGUqIGRv
dCA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSo+KGZ1bmMpOwogICAgIEZ1bmN0aW9uQ2Fs
bERvdE5vZGUqIG5vZGU7CiAgICAgaWYgKGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0tPnByb3Bl
cnR5TmFtZXMtPmNhbGwpCi0gICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIENhbGxGdW5jdGlvbkNh
bGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3Ms
IGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVT
dGFydCk7CisgICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIENhbGxGdW5jdGlvbkNhbGxEb3ROb2Rl
KGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgZWxzZSBpZiAoZG90LT5pZGVudGlmaWVyKCkgPT0g
bV92bS0+cHJvcGVydHlOYW1lcy0+YXBwbHkpCi0gICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIEFw
cGx5RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRp
ZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGlu
ZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBBcHBseUZ1bmN0
aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwg
YXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICBlbHNlCi0gICAgICAgIG5v
ZGUgPSBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgp
LCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRp
dm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKLSAgICBub2RlLT5zZXRTdWJleHByZXNz
aW9uSW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3RFbmRPZmZzZXQoKSwgZG90LT5kaXZvdExp
bmUoKSwgZG90LT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgbm9kZSA9IG5ldyAobV92bSkg
RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmll
cigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOworICAgIG5vZGUtPnNldFN1
YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAg
ICAgcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTg5OSwxMyArODc4LDEzIEBAIEV4cHJlc3Npb25Ob2Rl
KiBBU1RCdWlsZGVyOjptYWtlQmluYXJ5Tm8KIAogICAgIGNhc2UgSU5TVEFOQ0VPRjogewogICAg
ICAgICBJbnN0YW5jZU9mTm9kZSogbm9kZSA9IG5ldyAobV92bSkgSW5zdGFuY2VPZk5vZGUobG9j
YXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwot
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMu
c2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLmVuZCwgcmhzLnNlY29uZC5kaXZvdExpbmUsIHJocy5z
ZWNvbmQuZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2Rl
LCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLmVuZCk7CiAg
ICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIGNhc2UgSU5UT0tFTjogewogICAgICAg
ICBJbk5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEluTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCBy
aHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7Ci0gICAgICAgIHNldEV4Y2VwdGlv
bkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5z
ZWNvbmQuZW5kLCByaHMuc2Vjb25kLmRpdm90TGluZSwgcmhzLnNlY29uZC5kaXZvdExpbmVTdGFy
dCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3RhcnQs
IHJocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgfQogCkBAIC05MzcsMTAgKzkxNiwxMCBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUJpbmFyeU5vCiAgICAgcmV0dXJuIDA7CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciBvcCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJv
b2wgbG9jSGFzQXNzaWdubWVudHMsIGJvb2wgZXhwckhhc0Fzc2lnbm1lbnRzLCBpbnQgc3RhcnQs
IGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRv
ciBvcCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJvb2wgbG9jSGFzQXNzaWdubWVudHMsIGJvb2wg
ZXhwckhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBK
U1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGVuZCkKIHsKICAg
ICBpZiAoIWxvYy0+aXNMb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBc3Np
Z25FcnJvck5vZGUobG9jYXRpb24sIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwg
ZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFz
c2lnbkVycm9yTm9kZShsb2NhdGlvbiwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogCiAgICAgaWYgKGxv
Yy0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3Rh
dGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihsb2MpOwpAQCAtOTQ4LDE3ICs5MjcsMTcgQEAgRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25ObwogICAgICAgICAgICAgaWYgKGV4cHIt
PmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY0V4cHJO
b2RlKj4oZXhwciktPmJvZHkoKS0+c2V0SW5mZXJyZWROYW1lKHJlc29sdmUtPmlkZW50aWZpZXIo
KSk7CiAgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV92bSkgQXNz
aWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgZXhwcik7Ci0g
ICAgICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCwg
ZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgICAgICBzZXRFeGNlcHRpb25Mb2Nh
dGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5UmVzb2x2ZU5v
ZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgb3AsIGV4cHIsIGV4cHJIYXNBc3Np
Z25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgUmVhZE1vZGlmeVJlc29s
dmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIG9wLCBleHByLCBleHBySGFz
QXNzaWdubWVudHMsIGRpdm90LCBzdGFydCwgZW5kKTsKICAgICB9CiAgICAgaWYgKGxvYy0+aXNC
cmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogYnJh
Y2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihsb2MpOwogICAgICAgICBp
ZiAob3AgPT0gT3BFcXVhbCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkJy
YWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgp
LCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhhc0Fzc2lnbm1lbnRzLCBicmFja2V0LT5k
aXZvdCgpLCBicmFja2V0LT5kaXZvdCgpIC0gc3RhcnQsIGVuZCAtIGJyYWNrZXQtPmRpdm90KCks
IGJyYWNrZXQtPmRpdm90TGluZSgpLCBicmFja2V0LT5kaXZvdExpbmVTdGFydCgpKTsKLSAgICAg
ICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5QnJh
Y2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCks
IG9wLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwg
ZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOwot
ICAgICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgpLCBicmFj
a2V0LT5kaXZvdEVuZE9mZnNldCgpLCBicmFja2V0LT5kaXZvdExpbmUoKSwgYnJhY2tldC0+ZGl2
b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25CcmFj
a2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwg
ZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgYnJhY2tldC0+ZGl2
b3QoKSwgc3RhcnQsIGVuZCk7CisgICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9
IG5ldyAobV92bSkgUmVhZE1vZGlmeUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNl
KCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4
cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIHN0YXJ0LCBlbmQpOworICAgICAgICBub2RlLT5zZXRT
dWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdEVuZCgpLm9m
ZnNldCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBBU1NFUlQobG9jLT5pc0Rv
dEFjY2Vzc29yTm9kZSgpKTsKQEAgLTk2NiwyMiArOTQ1LDIyIEBAIEV4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlQXNzaWduTm8KICAgICBpZiAob3AgPT0gT3BFcXVhbCkgewogICAgICAg
ICBpZiAoZXhwci0+aXNGdW5jRXhwck5vZGUoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1
bmNFeHByTm9kZSo+KGV4cHIpLT5ib2R5KCktPnNldEluZmVycmVkTmFtZShkb3QtPmlkZW50aWZp
ZXIoKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkRvdE5vZGUobG9jYXRpb24s
IGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRz
LCBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3QoKSAtIHN0YXJ0LCBlbmQgLSBkb3QtPmRpdm90KCks
IGRvdC0+ZGl2b3RMaW5lKCksIGRvdC0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fdm0pIEFzc2lnbkRvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlk
ZW50aWZpZXIoKSwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkb3QtPmRpdm90KCksIHN0YXJ0
LCBlbmQpOwogICAgIH0KIAotICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX3Zt
KSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmll
cigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwg
ZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOwotICAgIG5vZGUtPnNldFN1
YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90LT5kaXZvdEVuZE9mZnNldCgpLCBkb3Qt
PmRpdm90TGluZSgpLCBkb3QtPmRpdm90TGluZVN0YXJ0KCkpOworICAgIFJlYWRNb2RpZnlEb3RO
b2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90LT5i
YXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBk
aXZvdCwgc3RhcnQsIGVuZCk7CisgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oZG90LT5k
aXZvdCgpLCBkb3QtPmRpdm90RW5kKCkub2Zmc2V0KTsKICAgICByZXR1cm4gbm9kZTsKIH0KIAot
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgaW50
IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQg
ZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVByZWZpeE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIs
IE9wZXJhdG9yIG9wLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2Vu
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGVuZCkKIHsKLSAgICByZXR1
cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcCwgZGl2b3QsIGRpdm90
IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcCwgZGl2b3QsIHN0
YXJ0LCBlbmQpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVBvc3RmaXhO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRp
dm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSogQVNUQnVp
bGRlcjo6bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4
cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBz
dGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9u
JiBlbmQpCiB7Ci0gICAgcmV0dXJuIG5ldyAobV92bSkgUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4
cHIsIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2
b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBuZXcgKG1fdm0pIFBvc3RmaXhOb2RlKGxvY2F0aW9u
LCBleHByLCBvcCwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDYsOCAr
MTMwNiwxMCBAQCBib29sIExleGVyPFQ+OjpuZXh0VG9rZW5Jc0NvbG9uKCkKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci1KU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4KEpTVG9rZW5EYXRhKiB0
b2tlbkRhdGEsIEpTVG9rZW5Mb2NhdGlvbiogdG9rZW5Mb2NhdGlvbiwgdW5zaWduZWQgbGV4ZXJG
bGFncywgYm9vbCBzdHJpY3RNb2RlKQorSlNUb2tlblR5cGUgTGV4ZXI8VD46OmxleChKU1Rva2Vu
KiB0b2tlblJlY29yZCwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9vbCBzdHJpY3RNb2RlKQogewor
ICAgIEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEgPSAmdG9rZW5SZWNvcmQtPm1fZGF0YTsKKyAgICBK
U1Rva2VuTG9jYXRpb24qIHRva2VuTG9jYXRpb24gPSAmdG9rZW5SZWNvcmQtPm1fbG9jYXRpb247
CiAgICAgQVNTRVJUKCFtX2Vycm9yKTsKICAgICBBU1NFUlQobV9idWZmZXI4LmlzRW1wdHkoKSk7
CiAgICAgQVNTRVJUKG1fYnVmZmVyMTYuaXNFbXB0eSgpKTsKQEAgLTEzMjUsNiArMTMyNyw3IEBA
IHN0YXJ0OgogICAgIHRva2VuTG9jYXRpb24tPnN0YXJ0T2Zmc2V0ID0gY3VycmVudE9mZnNldCgp
OwogICAgIHRva2VuTG9jYXRpb24tPnNvdXJjZU9mZnNldCA9IG1fc291cmNlT2Zmc2V0OwogICAg
IEFTU0VSVChjdXJyZW50T2Zmc2V0KCkgPj0gY3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKKyAg
ICB0b2tlblJlY29yZC0+bV9zdGFydFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAKICAg
ICBDaGFyYWN0ZXJUeXBlIHR5cGU7CiAgICAgaWYgKExJS0VMWShpc0xhdGluMShtX2N1cnJlbnQp
KSkKQEAgLTE3MDAsNiArMTcwMyw3IEBAIHJldHVyblRva2VuOgogICAgIHRva2VuTG9jYXRpb24t
PmVuZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICB0b2tlbkxvY2F0aW9uLT5saW5lU3Rh
cnRPZmZzZXQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAgICAgQVNTRVJUKHRva2VuTG9j
YXRpb24tPmVuZE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOworICAg
IHRva2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgbV9s
YXN0VG9rZW4gPSB0b2tlbjsKICAgICByZXR1cm4gdG9rZW47CiAKQEAgLTE3MDksNiArMTcxMyw3
IEBAIHJldHVybkVycm9yOgogICAgIHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA9IGN1cnJlbnRP
ZmZzZXQoKTsKICAgICB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQgPSBjdXJyZW50TGlu
ZVN0YXJ0T2Zmc2V0KCk7CiAgICAgQVNTRVJUKHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA+PSB0
b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOworICAgIHRva2VuUmVjb3JkLT5tX2VuZFBv
c2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodG9rZW4gJiBF
cnJvclRva2VuRmxhZyk7CiAgICAgcmV0dXJuIHRva2VuOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMSArODYsMTUgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0SXNSZXBhcnNpbmcoKSB7IG1faXNSZXBhcnNpbmcgPSB0cnVl
OyB9CiAgICAgYm9vbCBpc1JlcGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXBhcnNpbmc7
IH0KIAotICAgIEpTVG9rZW5UeXBlIGxleChKU1Rva2VuRGF0YSosIEpTVG9rZW5Mb2NhdGlvbios
IHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOworICAgIEpTVG9rZW5UeXBlIGxleChKU1Rva2Vu
KiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgYm9vbCBuZXh0VG9rZW5Jc0NvbG9u
KCk7CiAgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xpbmVOdW1iZXI7IH0K
ICAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gb2Zm
c2V0RnJvbVNvdXJjZVB0cihtX2NvZGUpOyB9CiAgICAgQUxXQVlTX0lOTElORSBpbnQgY3VycmVu
dExpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldEZyb21Tb3VyY2VQdHIobV9s
aW5lU3RhcnQpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1Rva2VuUG9zaXRpb24gY3VycmVudFBv
c2l0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBKU1Rva2VuUG9zaXRpb24obV9s
aW5lTnVtYmVyLCBjdXJyZW50T2Zmc2V0KCksIGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQoKSk7Cisg
ICAgfQogICAgIHZvaWQgc2V0TGFzdExpbmVOdW1iZXIoaW50IGxhc3RMaW5lTnVtYmVyKSB7IG1f
bGFzdExpbmVOdW1iZXIgPSBsYXN0TGluZU51bWJlcjsgfQogICAgIGludCBsYXN0TGluZU51bWJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdExpbmVOdW1iZXI7IH0KICAgICBib29sIHByZXZUZXJt
aW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90ZXJtaW5hdG9yOyB9CkBAIC0xMjUsNyArMTI5LDcg
QEAgcHVibGljOgogCiAgICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2UtPnByb3ZpZGVyKCk7IH0KIAotICAgIEpTVG9rZW5UeXBlIGxleEV4
cGVjdElkZW50aWZpZXIoSlNUb2tlbkRhdGEqLCBKU1Rva2VuTG9jYXRpb24qLCB1bnNpZ25lZCwg
Ym9vbCBzdHJpY3RNb2RlKTsKKyAgICBKU1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVudGlmaWVyKEpT
VG9rZW4qLCB1bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IHJlY29yZDgoaW50KTsKQEAgLTMzMSwxMiArMzM1LDE1IEBAIEFMV0FZU19JTkxJTkUgY29uc3Qg
SWRlbnRpZmllciogTGV4ZXI8VD4KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1BTFdBWVNf
SU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5E
YXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5Mb2NhdGlvbiogdG9rZW5Mb2NhdGlvbiwgdW5zaWduZWQg
bGV4ZXJGbGFncywgYm9vbCBzdHJpY3RNb2RlKQorQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBM
ZXhlcjxUPjo6bGV4RXhwZWN0SWRlbnRpZmllcihKU1Rva2VuKiB0b2tlblJlY29yZCwgdW5zaWdu
ZWQgbGV4ZXJGbGFncywgYm9vbCBzdHJpY3RNb2RlKQogeworICAgIEpTVG9rZW5EYXRhKiB0b2tl
bkRhdGEgPSAmdG9rZW5SZWNvcmQtPm1fZGF0YTsKKyAgICBKU1Rva2VuTG9jYXRpb24qIHRva2Vu
TG9jYXRpb24gPSAmdG9rZW5SZWNvcmQtPm1fbG9jYXRpb247CiAgICAgQVNTRVJUKChsZXhlckZs
YWdzICYgTGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMpKTsKICAgICBjb25zdCBUKiBzdGFy
dCA9IG1fY29kZTsKICAgICBjb25zdCBUKiBwdHIgPSBzdGFydDsKICAgICBjb25zdCBUKiBlbmQg
PSBtX2NvZGVFbmQ7CisgICAgSlNUb2tlblBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBjdXJyZW50
UG9zaXRpb24oKTsKICAgICBpZiAocHRyID49IGVuZCkgewogICAgICAgICBBU1NFUlQocHRyID09
IGVuZCk7CiAgICAgICAgIGdvdG8gc2xvd0Nhc2U7CkBAIC0zNzIsMTEgKzM3OSwxMyBAQCBBTFdB
WVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFCiAgICAgdG9rZW5Mb2NhdGlvbi0+
ZW5kT2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwogICAgIHRva2VuTG9jYXRpb24tPnNvdXJjZU9m
ZnNldCA9IG1fc291cmNlT2Zmc2V0OwogICAgIEFTU0VSVCh0b2tlbkxvY2F0aW9uLT5zdGFydE9m
ZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOworICAgIHRva2VuUmVjb3Jk
LT5tX3N0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIHRva2VuUmVjb3JkLT5tX2Vu
ZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgbV9sYXN0VG9rZW4gPSBJREVOVDsK
ICAgICByZXR1cm4gSURFTlQ7CiAgICAgCiBzbG93Q2FzZToKLSAgICByZXR1cm4gbGV4KHRva2Vu
RGF0YSwgdG9rZW5Mb2NhdGlvbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSk7CisgICAgcmV0dXJu
IGxleCh0b2tlblJlY29yZCwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3Ry
dWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE1MjU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBOb2RlOjpOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCi0gICAgICAgIDogbV9saW5lTnVtYmVyKGxvY2F0
aW9uLmxpbmUpCi0gICAgICAgICwgbV9zdGFydE9mZnNldChsb2NhdGlvbi5zdGFydE9mZnNldCkK
LSAgICAgICAgLCBtX2xpbmVTdGFydE9mZnNldChsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpCisg
ICAgICAgIDogbV9wb3NpdGlvbihsb2NhdGlvbi5saW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwg
bG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGxvY2F0aW9u
LnN0YXJ0T2Zmc2V0ID49IGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgfQpAQCAtMTAy
LDE0ICsxMDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotaW5saW5lIFJl
c29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGRp
dm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitpbmxpbmUgUmVzb2x2ZU5vZGU6OlJl
c29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHN0YXJ0KQogICAgICAgICA6IEV4cHJl
c3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCi0gICAgICAgICwg
bV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExp
bmUpCi0gICAgICAgICwgbV9kaXZvdExpbmVTdGFydChkaXZvdExpbmVTdGFydCkKKyAgICAgICAg
LCBtX3N0YXJ0KHN0YXJ0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhcnRPZmZzZXQgPj0g
bV9kaXZvdExpbmVTdGFydCk7CisgICAgICAgIEFTU0VSVChtX3N0YXJ0Lm9mZnNldCA+PSBtX3N0
YXJ0LmxpbmVTdGFydE9mZnNldCk7CiAgICAgfQogCiAgICAgaW5saW5lIEVsZW1lbnROb2RlOjpF
bGVtZW50Tm9kZShpbnQgZWxpc2lvbiwgRXhwcmVzc2lvbk5vZGUqIG5vZGUpCkBAIC0yNDYsODEg
KzI0Miw4MSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAg
ewogICAgIH0KIAotICAgIGlubGluZSBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6RXZhbEZ1bmN0aW9u
Q2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgQXJndW1lbnRzTm9kZSog
YXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAg
aW5saW5lIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpFdmFsRnVuY3Rpb25DYWxsTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNv
bnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUo
bG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAg
ICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGRpdm90ID49IGRpdm90
TGluZVN0YXJ0KTsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjpG
dW5jdGlvbkNhbGxWYWx1ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBGdW5jdGlvbkNhbGxWYWx1
ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNU
b2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBj
b25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2Rl
KGxvY2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAs
IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAg
ICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBtX2FyZ3MoYXJncykKICAgICB7CisgICAg
ICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3RTdGFydC5vZmZzZXQpOwogICAgIH0KIAot
ICAgIGlubGluZSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6RnVuY3Rpb25DYWxsUmVzb2x2ZU5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRp
dm90TGluZVN0YXJ0KQorICAgIGlubGluZSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6RnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVG9rZW5Qb3Np
dGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
b2tlblBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlv
bikKLSAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwg
bV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX2FyZ3MoYXJncykKICAgICB7CiAgICAgfQogCi0g
ICAgaW5saW5lIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwg
RXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQg
ZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZ1bmN0aW9u
Q2FsbEJyYWNrZXROb2RlOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1
YnNjcmlwdCwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZv
dCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRp
b24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAg
ICAsIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZVN1YkV4
cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2Jh
c2UoYmFzZSkKICAgICAgICAgLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpCiAgICAgICAgICwgbV9h
cmdzKGFyZ3MpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBGdW5jdGlvbkNhbGxEb3ROb2Rl
OjpGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4
cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9k
ZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisg
ICAgaW5saW5lIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1Rva2VuUG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9r
ZW5Qb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24p
Ci0gICAgICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dh
YmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAg
ICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9h
cmdzKGFyZ3MpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBDYWxsRnVuY3Rpb25DYWxsRG90
Tm9kZTo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1
bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCkKLSAgICAgICAgOiBGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBiYXNlLCBpZGVu
dCwgYXJncywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RM
aW5lU3RhcnQpCisgICAgaW5saW5lIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjpDYWxsRnVuY3Rp
b25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3Ms
IGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2
b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCkKKyAgICAgICAgOiBGdW5j
dGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBiYXNlLCBpZGVudCwgYXJncywgZGl2b3QsIGRpdm90
U3RhcnQsIGRpdm90RW5kKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXBwbHlGdW5jdGlv
bkNhbGxEb3ROb2RlOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBk
aXZvdExpbmVTdGFydCkKLSAgICAgICAgOiBGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBi
YXNlLCBpZGVudCwgYXJncywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGlu
ZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6
QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRz
Tm9kZSogYXJncywgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKQorICAg
ICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50LCBhcmdzLCBk
aXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBQ
b3N0Zml4Tm9kZTo6UG9zdGZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUs
IHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQotICAgICAgICA6IFByZWZpeE5vZGUobG9jYXRpb24s
IGV4cHIsIG9wZXIsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KQorICAgIGlubGluZSBQb3N0Zml4Tm9kZTo6UG9zdGZpeE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9y
IG9wZXIsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlv
biYgZGl2b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCkKKyAgICAgICAg
OiBQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcGVyLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBEZWxldGVSZXNvbHZlTm9kZTo6RGVs
ZXRlUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0
YXJ0KQorICAgIGlubGluZSBEZWxldGVSZXNvbHZlTm9kZTo6RGVsZXRlUmVzb2x2ZU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNv
bnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZv
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAg
ICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RF
bmQpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5l
IERlbGV0ZUJyYWNrZXROb2RlOjpEZWxldGVCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNj
cmlwdCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAg
aW5saW5lIERlbGV0ZUJyYWNrZXROb2RlOjpEZWxldGVCcmFja2V0Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUq
IHN1YnNjcmlwdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKQogICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90
TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZv
dFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAgICAgLCBtX3N1
YnNjcmlwdChzdWJzY3JpcHQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBEZWxldGVEb3RO
b2RlOjpEZWxldGVEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIERlbGV0ZURvdE5vZGU6
OkRlbGV0ZURvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBKU1Rva2VuUG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9r
ZW5Qb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24p
Ci0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1f
YmFzZShiYXNlKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgewpAQCAtMzUwLDkgKzM0
Niw5IEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAg
ICAgfQogCi0gICAgaW5saW5lIFByZWZpeE5vZGU6OlByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wZXIsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBQ
cmVmaXhOb2RlOjpQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4
cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcGVyLCBjb25zdCBKU1Rva2VuUG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Q
b3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0g
ICAgICAgICwgVGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBU
aHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZCkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBtX29wZXJhdG9yKG9wZXIp
CiAgICAgewpAQCAtNTM2LDE2ICs1MzIsMTQgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZl
Tm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmVhZE1vZGlmeVJlc29s
dmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25O
b2RlKiAgcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGlu
ZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIFJlYWRNb2RpZnlSZXNvbHZl
Tm9kZTo6UmVhZE1vZGlmeVJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9k
ZSogIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVG9rZW5Qb3NpdGlv
biYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUb2tl
blBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikK
LSAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9p
ZGVudChpZGVudCkKICAgICAgICAgLCBtX3JpZ2h0KHJpZ2h0KQogICAgICAgICAsIG1fb3BlcmF0
b3Iob3BlcikKICAgICAgICAgLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMocmlnaHRIYXNBc3NpZ25t
ZW50cykKICAgICB7Ci0gICAgICAgIEFTU0VSVChkaXZvdCA+PSBkaXZvdExpbmVTdGFydCk7Ci0g
ICAgICAgIEFTU0VSVChkaXZvdCAtIHN0YXJ0T2Zmc2V0ID49IGRpdm90TGluZVN0YXJ0KTsKICAg
ICB9CiAKICAgICBpbmxpbmUgQXNzaWduUmVzb2x2ZU5vZGU6OkFzc2lnblJlc29sdmVOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBF
eHByZXNzaW9uTm9kZSogcmlnaHQpCkBAIC01NTUsOSArNTQ5LDEwIEBAIGlubGluZSBSZXNvbHZl
Tm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFJl
YWRNb2RpZnlCcmFja2V0Tm9kZTo6UmVhZE1vZGlmeUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSog
c3Vic2NyaXB0LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vi
c2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQg
ZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisKKyAgICBpbmxpbmUgUmVhZE1v
ZGlmeUJyYWNrZXROb2RlOjpSZWFkTW9kaWZ5QnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJz
Y3JpcHQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3Jp
cHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1Rva2Vu
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9j
YXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwg
VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQog
ICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkK
ICAgICAgICAgLCBtX3JpZ2h0KHJpZ2h0KQpAQCAtNTY3LDkgKzU2Miw5IEBAIGlubGluZSBSZXNv
bHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5l
IEFzc2lnbkJyYWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNj
cmlwdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRz
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVk
IGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBBc3NpZ25CcmFja2V0Tm9kZTo6QXNzaWduQnJh
Y2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBj
b25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90
U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisg
ICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNj
cmlwdCkKICAgICAgICAgLCBtX3JpZ2h0KHJpZ2h0KQpAQCAtNTc4LDkgKzU3Myw5IEBAIGlubGlu
ZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAg
aW5saW5lIEFzc2lnbkRvdE5vZGU6OkFzc2lnbkRvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEFzc2ln
bkRvdE5vZGU6OkFzc2lnbkRvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9u
Tm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9u
KQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBt
X2Jhc2UoYmFzZSkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1fcmlnaHQo
cmlnaHQpCkBAIC01ODgsOSArNTgzLDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9k
ZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmVhZE1vZGlmeURvdE5vZGU6
OlJlYWRNb2RpZnlEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgT3BlcmF0b3Igb3Blciwg
RXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVk
IGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25l
ZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBSZWFkTW9k
aWZ5RG90Tm9kZTo6UmVhZE1vZGlmeURvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVy
YXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cywgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZVN1YkV4cHJlc3Npb25E
YXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0
YXJ0KQorICAgICAgICAsIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAgICAgLCBtX2lkZW50
KGlkZW50KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQpCkBAIC01OTksOSArNTk0LDkgQEAgaW5s
aW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgQXNzaWduRXJyb3JOb2RlOjpBc3NpZ25FcnJvck5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5l
U3RhcnQpCisgICAgaW5saW5lIEFzc2lnbkVycm9yTm9kZTo6QXNzaWduRXJyb3JOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9u
JiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAg
LCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwg
ZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9u
RGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgewogICAgIH0KIApAQCAtNzA2
LDEzICs3MDEsMTEgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwog
ICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgV2l0aE5vZGU6OldpdGhOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2Rl
KiBzdGF0ZW1lbnQsIHVpbnQzMl90IGRpdm90LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVk
IGRpdm90TGluZVN0YXJ0LCB1aW50MzJfdCBleHByZXNzaW9uTGVuZ3RoKQorICAgIGlubGluZSBX
aXRoTm9kZTo6V2l0aE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgY29uc3QgSlNUb2tlblBv
c2l0aW9uJiBkaXZvdCwgdWludDMyX3QgZXhwcmVzc2lvbkxlbmd0aCkKICAgICAgICAgOiBTdGF0
ZW1lbnROb2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1f
c3RhdGVtZW50KHN0YXRlbWVudCkKICAgICAgICAgLCBtX2Rpdm90KGRpdm90KQotICAgICAgICAs
IG1fZGl2b3RMaW5lKGRpdm90TGluZSkKLSAgICAgICAgLCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90
TGluZVN0YXJ0KQogICAgICAgICAsIG1fZXhwcmVzc2lvbkxlbmd0aChleHByZXNzaW9uTGVuZ3Ro
KQogICAgIHsKICAgICB9CkBAIC04MjIsMTcgKzgxNSwxNyBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6
OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBGb3JJbk5v
ZGU6OkZvckluTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIHVuc2lnbmVkIGRpdm90LCBpbnQgc3Rh
cnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZvckluTm9kZTo6Rm9ySW5Ob2RlKFZNKiB2bSwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4
cHJlc3Npb25Ob2RlKiBpbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0
YXRlbWVudCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKQogICAgICAg
ICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9pbml0KDApCi0gICAgICAg
ICwgbV9sZXhwcihuZXcgKHZtKSBSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIGRpdm90IC0g
c3RhcnRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpKQorICAgICAgICAsIG1fbGV4
cHIobmV3ICh2bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCBkaXZvdFN0YXJ0KSkKICAg
ICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAg
ICAgewogICAgICAgICBpZiAoaW4pIHsKICAgICAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBu
b2RlID0gbmV3ICh2bSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCBpbik7Ci0g
ICAgICAgICAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5lU3RhcnQpOwotICAgICAgICAgICAg
bm9kZS0+c2V0RXhjZXB0aW9uU291cmNlQ29kZShkaXZvdCwgZGl2b3QgLSBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0IC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICAg
ICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOworICAgICAg
ICAgICAgbm9kZS0+c2V0RXhjZXB0aW9uU291cmNlQ29kZShkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpOwogICAgICAgICAgICAgbV9pbml0ID0gbm9kZTsKICAgICAgICAgfQogICAgICAgICAv
LyBmb3IoIHZhciBmb28gPSBiYXIgaW4gYmF6ICkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAxNTI1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIHZvaWQgU3RhdGVtZW50Tm9kZTo6c2V0TG9jKHVuc2lnbmVkIGZpcnN0
TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIGludCBzdGFydE9mZnNldCwgaW50IGxpbmVTdGFydE9m
ZnNldCkKIHsKLSAgICBtX2xpbmVOdW1iZXIgPSBmaXJzdExpbmU7CiAgICAgbV9sYXN0TGluZSA9
IGxhc3RMaW5lOwotICAgIG1fc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKLSAgICBtX2xpbmVT
dGFydE9mZnNldCA9IGxpbmVTdGFydE9mZnNldDsKLSAgICBBU1NFUlQobV9zdGFydE9mZnNldCA+
PSBtX2xpbmVTdGFydE9mZnNldCk7CisgICAgbV9wb3NpdGlvbiA9IEpTVG9rZW5Qb3NpdGlvbihm
aXJzdExpbmUsIHN0YXJ0T2Zmc2V0LCBsaW5lU3RhcnRPZmZzZXQpOworICAgIEFTU0VSVChtX3Bv
c2l0aW9uLm9mZnNldCA+PSBtX3Bvc2l0aW9uLmxpbmVTdGFydE9mZnNldCk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTb3VyY2VFbGVtZW50cyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTQgKzEyOSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGUoKSB7IH0KIAotICAgICAgICBpbnQg
bGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Ci0gICAgICAgIGludCBzdGFy
dE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KLSAgICAgICAgaW50IGxp
bmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVN0YXJ0T2Zmc2V0OyB9CisgICAg
ICAgIGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLmxpbmU7IH0KKyAgICAg
ICAgaW50IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbi5vZmZzZXQ7IH0K
KyAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24u
bGluZVN0YXJ0T2Zmc2V0OyB9CisgICAgICAgIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgcG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAg
ICAgIGludCBtX2xpbmVOdW1iZXI7Ci0gICAgICAgIGludCBtX3N0YXJ0T2Zmc2V0OwotICAgICAg
ICBpbnQgbV9saW5lU3RhcnRPZmZzZXQ7CisgICAgICAgIEpTVG9rZW5Qb3NpdGlvbiBtX3Bvc2l0
aW9uOwogICAgIH07CiAKICAgICBjbGFzcyBFeHByZXNzaW9uTm9kZSA6IHB1YmxpYyBOb2RlIHsK
QEAgLTI1NCw0OSArMjUzLDQzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRocm93YWJsZUV4cHJlc3Np
b25EYXRhKCkKLSAgICAgICAgICAgIDogbV9kaXZvdChzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEp
KQotICAgICAgICAgICAgLCBtX2Rpdm90U3RhcnRPZmZzZXQoc3RhdGljX2Nhc3Q8dWludDE2X3Q+
KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdEVuZE9mZnNldChzdGF0aWNfY2FzdDx1aW50MTZf
dD4oLTEpKQotICAgICAgICAgICAgLCBtX2Rpdm90TGluZShzdGF0aWNfY2FzdDx1aW50MzJfdD4o
LTEpKQotICAgICAgICAgICAgLCBtX2Rpdm90TGluZVN0YXJ0KHN0YXRpY19jYXN0PHVpbnQzMl90
PigtMSkpCisgICAgICAgICAgICA6IG1fZGl2b3QoLTEsIC0xLCAtMSkKKyAgICAgICAgICAgICwg
bV9kaXZvdFN0YXJ0KC0xLCAtMSwgLTEpCisgICAgICAgICAgICAsIG1fZGl2b3RFbmQoLTEsIC0x
LCAtMSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YSh1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFy
dCkKKyAgICAgICAgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoY29uc3QgSlNUb2tlblBvc2l0aW9u
JiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBlbmQpCiAgICAgICAgICAgICA6IG1fZGl2b3QoZGl2b3QpCi0gICAgICAgICAgICAsIG1f
ZGl2b3RTdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAgICAgICAgICwgbV9kaXZvdEVuZE9m
ZnNldChlbmRPZmZzZXQpCi0gICAgICAgICAgICAsIG1fZGl2b3RMaW5lKGRpdm90TGluZSkKLSAg
ICAgICAgICAgICwgbV9kaXZvdExpbmVTdGFydChkaXZvdExpbmVTdGFydCkKKyAgICAgICAgICAg
ICwgbV9kaXZvdFN0YXJ0KHN0YXJ0KQorICAgICAgICAgICAgLCBtX2Rpdm90RW5kKGVuZCkKICAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3QgPj0gbV9kaXZvdExpbmVTdGFydCk7
CisgICAgICAgICAgICBBU1NFUlQobV9kaXZvdC5vZmZzZXQgPj0gbV9kaXZvdC5saW5lU3RhcnRP
ZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3RTdGFydC5vZmZzZXQgPj0gbV9kaXZv
dFN0YXJ0LmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgICAgICBBU1NFUlQobV9kaXZvdEVuZC5v
ZmZzZXQgPj0gbV9kaXZvdEVuZC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHNldEV4Y2VwdGlvblNvdXJjZUNvZGUodW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGlu
ZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisKKyAgICAgICAgdm9pZCBzZXRFeGNlcHRpb25T
b3VyY2VDb2RlKGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKKyAg
ICAgICAgICAgIEFTU0VSVChkaXZvdFN0YXJ0Lm9mZnNldCA+PSBkaXZvdFN0YXJ0LmxpbmVTdGFy
dE9mZnNldCk7CisgICAgICAgICAgICBBU1NFUlQoZGl2b3RFbmQub2Zmc2V0ID49IGRpdm90RW5k
LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgICAgICBtX2Rpdm90ID0gZGl2b3Q7Ci0gICAgICAg
ICAgICBtX2Rpdm90U3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKLSAgICAgICAgICAgIG1fZGl2
b3RFbmRPZmZzZXQgPSBlbmRPZmZzZXQ7Ci0gICAgICAgICAgICBtX2Rpdm90TGluZSA9IGRpdm90
TGluZTsKLSAgICAgICAgICAgIG1fZGl2b3RMaW5lU3RhcnQgPSBkaXZvdExpbmVTdGFydDsKKyAg
ICAgICAgICAgIG1fZGl2b3RTdGFydCA9IGRpdm90U3RhcnQ7CisgICAgICAgICAgICBtX2Rpdm90
RW5kID0gZGl2b3RFbmQ7CiAgICAgICAgIH0KIAotICAgICAgICB1aW50MzJfdCBkaXZvdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGl2b3Q7IH0KLSAgICAgICAgdWludDE2X3QgZGl2b3RTdGFydE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RTdGFydE9mZnNldDsgfQotICAgICAgICB1aW50MTZf
dCBkaXZvdEVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RFbmRPZmZzZXQ7IH0KLSAg
ICAgICAgdWludDMyX3QgZGl2b3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9kaXZvdExpbmU7IH0K
LSAgICAgICAgdWludDMyX3QgZGl2b3RMaW5lU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90
TGluZVN0YXJ0OyB9CisgICAgICAgIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QoKSBjb25z
dCB7IHJldHVybiBtX2Rpdm90OyB9CisgICAgICAgIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2
b3RTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RTdGFydDsgfQorICAgICAgICBjb25zdCBK
U1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKCkgY29uc3QgeyByZXR1cm4gbV9kaXZvdEVuZDsgfQog
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VGhyb3dSZWZlcmVuY2VF
cnJvcihCeXRlY29kZUdlbmVyYXRvciYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICBw
cml2YXRlOgotICAgICAgICB1aW50MzJfdCBtX2Rpdm90OwotICAgICAgICB1aW50MTZfdCBtX2Rp
dm90U3RhcnRPZmZzZXQ7Ci0gICAgICAgIHVpbnQxNl90IG1fZGl2b3RFbmRPZmZzZXQ7Ci0gICAg
ICAgIHVpbnQzMl90IG1fZGl2b3RMaW5lOwotICAgICAgICB1aW50MzJfdCBtX2Rpdm90TGluZVN0
YXJ0OworICAgICAgICBKU1Rva2VuUG9zaXRpb24gbV9kaXZvdDsKKyAgICAgICAgSlNUb2tlblBv
c2l0aW9uIG1fZGl2b3RTdGFydDsKKyAgICAgICAgSlNUb2tlblBvc2l0aW9uIG1fZGl2b3RFbmQ7
CiAgICAgfTsKIAogICAgIGNsYXNzIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIDogcHVibGlj
IFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKQEAgLTMwOSw4ICszMDIsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgVGhyb3dhYmxlU3ViRXhwcmVz
c2lvbkRhdGEodW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCi0g
ICAgICAgICAgICA6IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICBUaHJvd2FibGVT
dWJFeHByZXNzaW9uRGF0YShjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQp
CisgICAgICAgICAgICA6IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCkKICAgICAgICAgICAgICwgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQoMCkK
ICAgICAgICAgICAgICwgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KDApCiAgICAgICAgICAgICAs
IG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQoMCkKQEAgLTMxOCwyOCArMzExLDM0IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN1YmV4
cHJlc3Npb25JbmZvKHVpbnQzMl90IHN1YmV4cHJlc3Npb25EaXZvdCwgdWludDE2X3Qgc3ViZXhw
cmVzc2lvbk9mZnNldCwgdWludDMyX3Qgc3ViZXhwcmVzc2lvbkxpbmUsIHVpbnQzMl90IHN1YmV4
cHJlc3Npb25MaW5lU3RhcnQpCisgICAgICAgIHZvaWQgc2V0U3ViZXhwcmVzc2lvbkluZm8oY29u
c3QgSlNUb2tlblBvc2l0aW9uJiBzdWJleHByZXNzaW9uRGl2b3QsIGludCBzdWJleHByZXNzaW9u
T2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRpdm90
IDw9IGRpdm90KCkpOworICAgICAgICAgICAgQVNTRVJUKHN1YmV4cHJlc3Npb25EaXZvdC5vZmZz
ZXQgPD0gZGl2b3QoKS5vZmZzZXQpOwogICAgICAgICAgICAgLy8gT3ZlcmZsb3cgbWVhbnMgd2Ug
Y2FuJ3QgZG8gdGhpcyBzYWZlbHksIHNvIGp1c3QgcG9pbnQgYXQgdGhlIHByaW1hcnkgZGl2b3Qs
CiAgICAgICAgICAgICAvLyBkaXZvdExpbmUsIG9yIGRpdm90TGluZVN0YXJ0LgotICAgICAgICAg
ICAgaWYgKChkaXZvdCgpIC0gc3ViZXhwcmVzc2lvbkRpdm90KSAmIH4weEZGRkYpCisgICAgICAg
ICAgICBpZiAoKGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0KSAmIH4weEZGRkYp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKChkaXZvdExpbmUoKSAt
IHN1YmV4cHJlc3Npb25MaW5lKSAmIH4weEZGRkYpCisgICAgICAgICAgICBpZiAoKGRpdm90KCku
bGluZSAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5lKSAmIH4weEZGRkYpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKChkaXZvdExpbmVTdGFydCgpIC0gc3ViZXhwcmVz
c2lvbkxpbmVTdGFydCkgJiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChkaXZvdCgpLmxpbmVT
dGFydE9mZnNldCAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5lU3RhcnRPZmZzZXQpICYgfjB4RkZG
RikKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25E
aXZvdE9mZnNldCA9IGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Q7Ci0gICAgICAgICAgICBt
X3N1YmV4cHJlc3Npb25FbmRPZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0OwotICAgICAgICAg
ICAgbV9zdWJleHByZXNzaW9uTGluZU9mZnNldCA9IGRpdm90TGluZSgpIC0gc3ViZXhwcmVzc2lv
bkxpbmU7Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQgPSBkaXZv
dExpbmVTdGFydCgpIC0gc3ViZXhwcmVzc2lvbkxpbmVTdGFydDsKKyAgICAgICAgICAgIGlmICgo
ZGl2b3RFbmQoKSAtIHN1YmV4cHJlc3Npb25PZmZzZXQpICYgfjB4RkZGRikKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9IGRp
dm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0OworICAgICAgICAgICAgbV9zdWJleHBy
ZXNzaW9uRW5kT2Zmc2V0ID0gZGl2b3RFbmQoKSAtIHN1YmV4cHJlc3Npb25PZmZzZXQ7CisgICAg
ICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0ID0gZGl2b3QoKS5saW5lIC0gc3ViZXhw
cmVzc2lvbkRpdm90LmxpbmU7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRP
ZmZzZXQgPSBkaXZvdCgpLmxpbmVTdGFydE9mZnNldCAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5l
U3RhcnRPZmZzZXQ7CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9u
RGl2b3QoKSB7IHJldHVybiBkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0K
LSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gZGl2
b3RTdGFydE9mZnNldCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAgICAg
dW5zaWduZWQgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpIHsgcmV0dXJuIG1fc3ViZXhwcmVzc2lv
bkVuZE9mZnNldDsgfQotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uTGluZSgpIHsgcmV0
dXJuIGRpdm90TGluZSgpIC0gbV9zdWJleHByZXNzaW9uTGluZU9mZnNldDsgfQotICAgICAgICB1
bnNpZ25lZCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkgeyByZXR1cm4gZGl2b3RMaW5lU3RhcnQo
KSAtIG1fc3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNldDsgfQorICAgICAgICBKU1Rva2VuUG9z
aXRpb24gc3ViZXhwcmVzc2lvbkRpdm90KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IG5l
d0xpbmUgPSBkaXZvdCgpLmxpbmUgLSBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0OworICAgICAg
ICAgICAgaW50IG5ld09mZnNldCA9IGRpdm90KCkub2Zmc2V0IC0gbV9zdWJleHByZXNzaW9uRGl2
b3RPZmZzZXQ7CisgICAgICAgICAgICBpbnQgbmV3TGluZVN0YXJ0T2Zmc2V0ID0gZGl2b3QoKS5s
aW5lU3RhcnRPZmZzZXQgLSBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7CisgICAgICAg
ICAgICByZXR1cm4gSlNUb2tlblBvc2l0aW9uKG5ld0xpbmUsIG5ld09mZnNldCwgbmV3TGluZVN0
YXJ0T2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBKU1Rva2VuUG9zaXRpb24gc3ViZXhwcmVz
c2lvblN0YXJ0KCkgeyByZXR1cm4gZGl2b3RTdGFydCgpOyB9CisgICAgICAgIEpTVG9rZW5Qb3Np
dGlvbiBzdWJleHByZXNzaW9uRW5kKCkgeyByZXR1cm4gZGl2b3RFbmQoKSAtIG1fc3ViZXhwcmVz
c2lvbkVuZE9mZnNldDsgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB1aW50MTZfdCBtX3N1
YmV4cHJlc3Npb25EaXZvdE9mZnNldDsKQEAgLTM1OCw4ICszNTcsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgVGhyb3dhYmxlUHJlZml4ZWRTdWJF
eHByZXNzaW9uRGF0YSh1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFy
dCkKLSAgICAgICAgICAgIDogVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgIFRocm93
YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGEoY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZv
dCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBl
bmQpCisgICAgICAgICAgICA6IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydCwg
ZW5kKQogICAgICAgICAgICAgLCBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCgwKQogICAgICAg
ICAgICAgLCBtX3N1YmV4cHJlc3Npb25TdGFydE9mZnNldCgwKQogICAgICAgICAgICAgLCBtX3N1
YmV4cHJlc3Npb25MaW5lT2Zmc2V0KDApCkBAIC0zNjcsMjggKzM2NiwzNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRTdWJleHByZXNz
aW9uSW5mbyh1aW50MzJfdCBzdWJleHByZXNzaW9uRGl2b3QsIHVpbnQxNl90IHN1YmV4cHJlc3Np
b25PZmZzZXQsIHVpbnQzMl90IHN1YmV4cHJlc3Npb25MaW5lLCB1aW50MzJfdCBzdWJleHByZXNz
aW9uTGluZVN0YXJ0KQorICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25JbmZvKGNvbnN0IEpT
VG9rZW5Qb3NpdGlvbiYgc3ViZXhwcmVzc2lvbkRpdm90LCBpbnQgc3ViZXhwcmVzc2lvbk9mZnNl
dCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN1YmV4cHJlc3Npb25EaXZvdCA+PSBk
aXZvdCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0ID49
IGRpdm90KCkub2Zmc2V0KTsKICAgICAgICAgICAgIC8vIE92ZXJmbG93IG1lYW5zIHdlIGNhbid0
IGRvIHRoaXMgc2FmZWx5LCBzbyBqdXN0IHBvaW50IGF0IHRoZSBwcmltYXJ5IGRpdm90LAogICAg
ICAgICAgICAgLy8gZGl2b3RMaW5lLCBvciBkaXZvdExpbmVTdGFydC4KLSAgICAgICAgICAgIGlm
ICgoc3ViZXhwcmVzc2lvbkRpdm90IC0gZGl2b3QoKSkgJiB+MHhGRkZGKSAKKyAgICAgICAgICAg
IGlmICgoc3ViZXhwcmVzc2lvbkRpdm90Lm9mZnNldCAtIGRpdm90KCkpICYgfjB4RkZGRikgCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uRGl2
b3QubGluZSAtIGRpdm90KCkubGluZSkgJiB+MHhGRkZGKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkxpbmUgLSBkaXZvdExpbmUoKSkgJiB+
MHhGRkZGKQorICAgICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uRGl2b3QubGluZVN0YXJ0T2Zm
c2V0IC0gZGl2b3QoKS5saW5lU3RhcnRPZmZzZXQpICYgfjB4RkZGRikKICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoKHN1YmV4cHJlc3Npb25MaW5lU3RhcnQgLSBkaXZv
dExpbmVTdGFydCgpKSAmIH4weEZGRkYpCisgICAgICAgICAgICBpZiAoKHN1YmV4cHJlc3Npb25P
ZmZzZXQgLSBkaXZvdFN0YXJ0KCkpICYgfjB4RkZGRikgCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQgPSBzdWJleHByZXNzaW9u
RGl2b3QgLSBkaXZvdCgpOwotICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uU3RhcnRPZmZzZXQg
PSBzdWJleHByZXNzaW9uT2Zmc2V0OwotICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uTGluZU9m
ZnNldCA9IHN1YmV4cHJlc3Npb25MaW5lIC0gZGl2b3RMaW5lKCk7Ci0gICAgICAgICAgICBtX3N1
YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQgPSBzdWJleHByZXNzaW9uTGluZVN0YXJ0IC0gZGl2
b3RMaW5lU3RhcnQoKTsKKyAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0ID0g
c3ViZXhwcmVzc2lvbkRpdm90Lm9mZnNldCAtIGRpdm90KCk7CisgICAgICAgICAgICBtX3N1YmV4
cHJlc3Npb25TdGFydE9mZnNldCA9IHN1YmV4cHJlc3Npb25PZmZzZXQgLSBkaXZvdFN0YXJ0KCk7
CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkRp
dm90LmxpbmUgLSBkaXZvdCgpLmxpbmU7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5l
U3RhcnRPZmZzZXQgPSBzdWJleHByZXNzaW9uRGl2b3QubGluZVN0YXJ0T2Zmc2V0IC0gZGl2b3Qo
KS5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBzdWJleHBy
ZXNzaW9uRGl2b3QoKSB7IHJldHVybiBkaXZvdCgpICsgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZz
ZXQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCkgeyByZXR1
cm4gbV9zdWJleHByZXNzaW9uU3RhcnRPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3ViZXhw
cmVzc2lvbkVuZE9mZnNldCgpIHsgcmV0dXJuIGRpdm90RW5kT2Zmc2V0KCkgKyBtX3N1YmV4cHJl
c3Npb25EaXZvdE9mZnNldDsgfQotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uTGluZSgp
IHsgcmV0dXJuIGRpdm90TGluZSgpICsgbV9zdWJleHByZXNzaW9uTGluZU9mZnNldDsgfQotICAg
ICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkgeyByZXR1cm4gZGl2b3RMaW5l
U3RhcnQoKSArIG1fc3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNldDsgfQorICAgICAgICBKU1Rv
a2VuUG9zaXRpb24gc3ViZXhwcmVzc2lvbkRpdm90KCkKKyAgICAgICAgeworICAgICAgICAgICAg
aW50IG5ld0xpbmUgPSBkaXZvdCgpLmxpbmUgKyBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0Owor
ICAgICAgICAgICAgaW50IG5ld09mZnNldCA9IGRpdm90KCkub2Zmc2V0ICsgbV9zdWJleHByZXNz
aW9uRGl2b3RPZmZzZXQ7CisgICAgICAgICAgICBpbnQgbmV3TGluZVN0YXJ0T2Zmc2V0ID0gZGl2
b3QoKS5saW5lU3RhcnRPZmZzZXQgKyBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7Cisg
ICAgICAgICAgICByZXR1cm4gSlNUb2tlblBvc2l0aW9uKG5ld0xpbmUsIG5ld09mZnNldCwgbmV3
TGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBKU1Rva2VuUG9zaXRpb24gc3Vi
ZXhwcmVzc2lvblN0YXJ0KCkgeyByZXR1cm4gZGl2b3RTdGFydCgpICsgbV9zdWJleHByZXNzaW9u
U3RhcnRPZmZzZXQ7OyB9CisgICAgICAgIEpTVG9rZW5Qb3NpdGlvbiBzdWJleHByZXNzaW9uRW5k
KCkgeyByZXR1cm4gZGl2b3RFbmQoKTsgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB1aW50
MTZfdCBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldDsKQEAgLTQxOCw3ICs0MjMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIFJlc29sdmVOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBKU1Rva2Vu
UG9zaXRpb24mIHN0YXJ0KTsKIAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudDsgfQogCkBAIC00MzAsOSArNDM1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Jlc29sdmVOb2RlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1faWRlbnQ7Ci0gICAg
ICAgIHVpbnQzMl90IG1fc3RhcnRPZmZzZXQ7Ci0gICAgICAgIHVpbnQzMl90IG1fZGl2b3RMaW5l
OwotICAgICAgICB1aW50MzJfdCBtX2Rpdm90TGluZVN0YXJ0OworICAgICAgICBKU1Rva2VuUG9z
aXRpb24gbV9zdGFydDsKICAgICB9OwogCiAgICAgY2xhc3MgRWxlbWVudE5vZGUgOiBwdWJsaWMg
UGFyc2VyQXJlbmFGcmVlYWJsZSB7CkBAIC01NzksNyArNTgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBFdmFsRnVuY3Rpb25DYWxsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IEV2YWxGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEFyZ3VtZW50c05v
ZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgIEV2YWxGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEFyZ3VtZW50
c05vZGUqLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRp
b24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTg5LDcgKzU5Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsVmFsdWVOb2RlIDogcHVibGljIEV4
cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25Ob2RlKiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVu
c2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgQXJndW1lbnRzTm9kZSosIGNv
bnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02MDAsNyArNjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0
IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNv
bnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02MTEsNyArNjE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGlj
OgotICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgQXJndW1l
bnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsK
KyAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEFyZ3VtZW50
c05vZGUqLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRp
b24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjIzLDcgKzYyNiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsRG90Tm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBG
dW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVG9rZW5Q
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3Qg
SlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC02MzYsNyArNjM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZSA6IHB1YmxpYyBGdW5jdGlvbkNhbGxEb3ROb2RlIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJn
dW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2Rl
KiwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY0NCw3ICs2NDcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAKICAgICBjbGFzcyBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUgOiBwdWJsaWMg
RnVuY3Rpb25DYWxsRG90Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBBcHBseUZ1bmN0aW9u
Q2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2Us
IGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwg
dW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBBcHBseUZ1bmN0aW9uQ2FsbERvdE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rva2VuUG9zaXRpb24m
IGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY1
Miw3ICs2NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERlbGV0ZVJlc29sdmVO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRGVsZXRlUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2ln
bmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgRGVsZXRlUmVzb2x2ZU5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUb2tlblBv
c2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7
CkBAIC02NjIsNyArNjY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBEZWxldGVC
cmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlbGV0ZUJyYWNrZXROb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSog
c3Vic2NyaXB0LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7
CisgICAgICAgIERlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBjb25zdCBKU1Rva2Vu
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApOwpAQCAtNjczLDcgKzY3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgRGVsZXRlRG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlbGV0ZURvdE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZp
ZXImLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgIERlbGV0ZURvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUq
IGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYg
ZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNzI2
LDcgKzcyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJlZml4Tm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lv
bkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1
bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIFByZWZpeE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgY29uc3QgSlNUb2tlblBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApOwpAQCAtNzQwLDcgKzc0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
UG9zdGZpeE5vZGUgOiBwdWJsaWMgUHJlZml4Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBQ
b3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJh
dG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgIFBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwg
T3BlcmF0b3IsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC05ODMsNyArOTg2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUgOiBwdWJsaWMg
RXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVi
bGljOgotICAgICAgICBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogIHJpZ2h0LCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3Rh
cnQpOworICAgICAgICBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogIHJpZ2h0LCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBk
aXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDA3
LDcgKzEwMTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlYWRNb2RpZnlCcmFj
a2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJl
c3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5v
ZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJz
Y3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIFJlYWRNb2RpZnlC
cmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwg
RXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdo
dCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRz
LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRp
dm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTAyMiw3ICsxMDI1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBBc3NpZ25CcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEFzc2lnbkJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmln
aHQsIGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAg
ICBBc3NpZ25CcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0
LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMs
IGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2
b3RTdGFydCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDM2LDcgKzEwMzksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIEFzc2lnbkRvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUs
IHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBB
c3NpZ25Eb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNl
LCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFz
QXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgQXNzaWduRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYg
ZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTA0
OSw3ICsxMDUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWFkTW9kaWZ5RG90
Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Np
b25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlYWRNb2RpZnlEb3ROb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwg
T3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRz
LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAg
IFJlYWRNb2RpZnlEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdo
dCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90
LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlv
biYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAt
MTA2Myw3ICsxMDY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBc3NpZ25FcnJv
ck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9u
RGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBBc3NpZ25FcnJvck5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQp
OworICAgICAgICBBc3NpZ25FcnJvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SlNUb2tlblBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUb2tlblBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEyMzksNyArMTI0Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIEZvckluTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dh
YmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAgICAgICAgRm9ySW5Ob2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0
ZW1lbnROb2RlKik7Ci0gICAgICAgIEZvckluTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwg
U3RhdGVtZW50Tm9kZSosIHVuc2lnbmVkIGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAg
ICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBj
b25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGRpdm90
U3RhcnQsIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CkBAIC0xMjkyLDE2ICsxMjk1LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgV2l0aE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBXaXRoTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9k
ZSosIFN0YXRlbWVudE5vZGUqLCB1aW50MzJfdCBkaXZvdCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1
bnNpZ25lZCBkaXZvdExpbmVTdGFydCwgdWludDMyX3QgZXhwcmVzc2lvbkxlbmd0aCk7CisgICAg
ICAgIFdpdGhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgU3Rh
dGVtZW50Tm9kZSosIGNvbnN0IEpTVG9rZW5Qb3NpdGlvbiYgZGl2b3QsIHVpbnQzMl90IGV4cHJl
c3Npb25MZW5ndGgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAKICAgICAgICAg
RXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV9zdGF0ZW1l
bnQ7Ci0gICAgICAgIHVpbnQzMl90IG1fZGl2b3Q7Ci0gICAgICAgIHVpbnQzMl90IG1fZGl2b3RM
aW5lOwotICAgICAgICB1aW50MzJfdCBtX2Rpdm90TGluZVN0YXJ0OworICAgICAgICBKU1Rva2Vu
UG9zaXRpb24gbV9kaXZvdDsKICAgICAgICAgdWludDMyX3QgbV9leHByZXNzaW9uTGVuZ3RoOwog
ICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJl
dmlzaW9uIDE1MjU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksOCArNjksNiBAQCBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFy
c2VyKFZNKiB2bSwgY29uc3QgCiAgICAgLCBtX3N0YWNrKCp2bSwgd3RmVGhyZWFkRGF0YSgpLnN0
YWNrKCkpCiAgICAgLCBtX2hhc1N0YWNrT3ZlcmZsb3coZmFsc2UpCiAgICAgLCBtX2FsbG93c0lu
KHRydWUpCi0gICAgLCBtX2xhc3RMaW5lKDApCi0gICAgLCBtX2xhc3RUb2tlbkVuZCgwKQogICAg
ICwgbV9hc3NpZ25tZW50Q291bnQoMCkKICAgICAsIG1fbm9uTEhTQ291bnQoMCkKICAgICAsIG1f
c3ludGF4QWxyZWFkeVZhbGlkYXRlZChzb3VyY2UucHJvdmlkZXIoKS0+aXNWYWxpZCgpKQpAQCAt
MTMyLDIxICsxMzAsMjAgQEAgU3RyaW5nIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKCkK
ICAgICAgICAgZmVhdHVyZXMgfD0gU2hhZG93c0FyZ3VtZW50c0ZlYXR1cmU7CiAKICAgICBkaWRG
aW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBjb250ZXh0LnZhckRlY2xhcmF0aW9ucygpLCBj
b250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgZmVhdHVyZXMsCi0gICAgICAgICAgICAgICAgICAg
ICBtX2xhc3RMaW5lLCBjb250ZXh0Lm51bUNvbnN0YW50cygpLCBjYXB0dXJlZFZhcmlhYmxlcyk7
CisgICAgICAgIGNvbnRleHQubnVtQ29uc3RhbnRzKCksIGNhcHR1cmVkVmFyaWFibGVzKTsKIAog
ICAgIHJldHVybiBwYXJzZUVycm9yOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBl
Pgogdm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50
cyogc291cmNlRWxlbWVudHMsIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFy
U3RhY2s+KiB2YXJTdGFjaywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzZXJB
cmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiBmdW5jU3RhY2ssIENv
ZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IGxhc3RMaW5lLCBpbnQgbnVtQ29uc3RhbnRzLCBJZGVu
dGlmaWVyU2V0JiBjYXB0dXJlZFZhcnMpCisgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9u
U3RhY2tzOjpGdW5jdGlvblN0YWNrPiogZnVuY1N0YWNrLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMs
IGludCBudW1Db25zdGFudHMsIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFycykKIHsKICAgICBt
X3NvdXJjZUVsZW1lbnRzID0gc291cmNlRWxlbWVudHM7CiAgICAgbV92YXJEZWNsYXJhdGlvbnMg
PSB2YXJTdGFjazsKICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPSBmdW5jU3RhY2s7CiAgICAgbV9j
YXB0dXJlZFZhcmlhYmxlcy5zd2FwKGNhcHR1cmVkVmFycyk7CiAgICAgbV9mZWF0dXJlcyA9IGZl
YXR1cmVzOwotICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKICAgICBtX251bUNvbnN0YW50cyA9
IG51bUNvbnN0YW50czsKIH0KIApAQCAtMjA0LDcgKzIwMSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBpbnQgc2NyYXRjaDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBzY3JhdGNoMSA9IDA7CiAgICAgVHJlZUV4cHJlc3Npb24gc2NyYXRjaDIgPSAwOwot
ICAgIGludCBzY3JhdGNoMyA9IDA7CisgICAgSlNUb2tlblBvc2l0aW9uIHNjcmF0Y2gzOwogICAg
IFRyZWVFeHByZXNzaW9uIHZhckRlY2xzID0gcGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoY29udGV4
dCwgc2NyYXRjaCwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBzY3JhdGNoMywgc2NyYXRjaDMsIHNjcmF0
Y2gzKTsKICAgICBmYWlsSWZUcnVlKGhhc0Vycm9yKCkpOwogICAgIGZhaWxJZkZhbHNlKGF1dG9T
ZW1pQ29sb24oKSk7CkBAIC0yNzAsNyArMjY3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGludCYgZGVj
bGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYg
bGFzdEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGlu
aXRFbmQpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYgY29udGV4
dCwgaW50JiBkZWNsYXJhdGlvbnMsIGNvbnN0IElkZW50aWZpZXIqJiBsYXN0SWRlbnQsIFRyZWVF
eHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIEpTVG9rZW5Qb3NpdGlvbiYgaWRlbnRTdGFydCwg
SlNUb2tlblBvc2l0aW9uJiBpbml0U3RhcnQsIEpTVG9rZW5Qb3NpdGlvbiYgaW5pdEVuZCkKIHsK
ICAgICBUcmVlRXhwcmVzc2lvbiB2YXJEZWNscyA9IDA7CiAgICAgZG8gewpAQCAtMjc5LDcgKzI3
Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAg
bmV4dCgpOwogICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAgICAgIAotICAgICAgICBp
bnQgdmFyU3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIEpTVG9rZW5Qb3NpdGlvbiB2YXJT
dGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBpZGVudFN0YXJ0ID0gdmFyU3Rh
cnQ7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVu
dDsKICAgICAgICAgbGFzdElkZW50ID0gbmFtZTsKQEAgLTI4OCwxNyArMjg1LDE1IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgZmFpbElmRmFsc2VJ
ZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShkZWNsYXJlVmFyaWFibGUobmFtZSksICJDYW5ub3Qg
ZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVkIiwgbmFtZS0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUu
Iik7CiAgICAgICAgIGNvbnRleHQuYWRkVmFyKG5hbWUsIChoYXNJbml0aWFsaXplciB8fCAoIW1f
YWxsb3dzSW4gJiYgbWF0Y2goSU5UT0tFTikpKSA/IERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJbml0
aWFsaXplciA6IDApOwogICAgICAgICBpZiAoaGFzSW5pdGlhbGl6ZXIpIHsKLSAgICAgICAgICAg
IGludCB2YXJEaXZvdCA9IHRva2VuU3RhcnQoKSArIDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCB2
YXJMaW5lID0gdG9rZW5MaW5lKCk7IAotICAgICAgICAgICAgdW5zaWduZWQgdmFyTGluZVN0YXJ0
ID0gdG9rZW5MaW5lU3RhcnQoKTsKLSAgICAgICAgICAgIGluaXRTdGFydCA9IHRva2VuU3RhcnQo
KTsKKyAgICAgICAgICAgIEpTVG9rZW5Qb3NpdGlvbiB2YXJEaXZvdCA9IHRva2VuU3RhcnRQb3Np
dGlvbigpICsgMTsKKyAgICAgICAgICAgIGluaXRTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigp
OwogICAgICAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7IC8vIGNv
bnN1bWUgJz0nCiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgICAgICAgICBpbml0RW5kID0gbGFz
dFRva2VuRW5kKCk7CisgICAgICAgICAgICBpbml0RW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24o
KTsKICAgICAgICAgICAgIGxhc3RJbml0aWFsaXplciA9IGluaXRpYWxpemVyOwogICAgICAgICAg
ICAgZmFpbElmRmFsc2UoaW5pdGlhbGl6ZXIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBU
cmVlRXhwcmVzc2lvbiBub2RlID0gY29udGV4dC5jcmVhdGVBc3NpZ25SZXNvbHZlKGxvY2F0aW9u
LCAqbmFtZSwgaW5pdGlhbGl6ZXIsIHZhclN0YXJ0LCB2YXJEaXZvdCwgbGFzdFRva2VuRW5kKCks
IHZhckxpbmUsIHZhckxpbmVTdGFydCk7CisgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBub2Rl
ID0gY29udGV4dC5jcmVhdGVBc3NpZ25SZXNvbHZlKGxvY2F0aW9uLCAqbmFtZSwgaW5pdGlhbGl6
ZXIsIHZhclN0YXJ0LCB2YXJEaXZvdCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAg
ICAgICBpZiAoIXZhckRlY2xzKQogICAgICAgICAgICAgICAgIHZhckRlY2xzID0gbm9kZTsKICAg
ICAgICAgICAgIGVsc2UKQEAgLTM0NiwxMCArMzQxLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIGNvbnN1bWVPckZhaWwoT1BFTlBBUkVOKTsKICAgICBp
bnQgbm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwogICAgIGludCBkZWNsYXJhdGlvbnMgPSAw
OwotICAgIGludCBkZWNsc1N0YXJ0ID0gMDsKLSAgICBpbnQgZGVjbHNFbmQgPSAwOwotICAgIHVu
c2lnbmVkIGRlY2xzTGluZSA9IDA7Ci0gICAgdW5zaWduZWQgZGVjbHNMaW5lU3RhcnQgPSAwOwor
ICAgIEpTVG9rZW5Qb3NpdGlvbiBkZWNsc1N0YXJ0OworICAgIEpTVG9rZW5Qb3NpdGlvbiBkZWNs
c0VuZDsKICAgICBUcmVlRXhwcmVzc2lvbiBkZWNscyA9IDA7CiAgICAgaWYgKG1hdGNoKFZBUikp
IHsKICAgICAgICAgLyoKQEAgLTM2MCw4ICszNTMsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGZvckluVGFyZ2V0
ID0gMDsKICAgICAgICAgVHJlZUV4cHJlc3Npb24gZm9ySW5Jbml0aWFsaXplciA9IDA7CiAgICAg
ICAgIG1fYWxsb3dzSW4gPSBmYWxzZTsKLSAgICAgICAgaW50IGluaXRTdGFydCA9IDA7Ci0gICAg
ICAgIGludCBpbml0RW5kID0gMDsKKyAgICAgICAgSlNUb2tlblBvc2l0aW9uIGluaXRTdGFydDsK
KyAgICAgICAgSlNUb2tlblBvc2l0aW9uIGluaXRFbmQ7CiAgICAgICAgIGRlY2xzID0gcGFyc2VW
YXJEZWNsYXJhdGlvbkxpc3QoY29udGV4dCwgZGVjbGFyYXRpb25zLCBmb3JJblRhcmdldCwgZm9y
SW5Jbml0aWFsaXplciwgZGVjbHNTdGFydCwgaW5pdFN0YXJ0LCBpbml0RW5kKTsKICAgICAgICAg
bV9hbGxvd3NJbiA9IHRydWU7CiAgICAgICAgIGZhaWxJZlRydWUoaGFzRXJyb3IoKSk7CkBAIC0z
NzMsMTQgKzM2NiwxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
CiAgICAgICAgIGZhaWxJZkZhbHNlKGRlY2xhcmF0aW9ucyA9PSAxKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIEhhbmRsZSBmb3ItaW4gd2l0aCB2YXIgZGVjbGFyYXRpb24KLSAgICAgICAgaW50IGlu
TG9jYXRpb24gPSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGluTGluZSA9IHRva2Vu
TGluZSgpOwotICAgICAgICB1bnNpZ25lZCBpbkxpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7
CisgICAgICAgIEpTVG9rZW5Qb3NpdGlvbiBpbkxvY2F0aW9uID0gdG9rZW5TdGFydFBvc2l0aW9u
KCk7CiAgICAgICAgIGNvbnN1bWVPckZhaWwoSU5UT0tFTik7CiAgICAgICAgIAogICAgICAgICBU
cmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICBm
YWlsSWZGYWxzZShleHByKTsKLSAgICAgICAgaW50IGV4cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsK
KyAgICAgICAgSlNUb2tlblBvc2l0aW9uIGV4cHJFbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigp
OwogICAgICAgICAKICAgICAgICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKICAgICAgICAg
Y29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKQEAgLTM5MSwxNiArMzgyLDE0IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgZW5kTG9vcCgpOwogICAg
ICAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBmb3JJblRhcmdldCwgZm9ySW5Jbml0aWFs
aXplciwgZXhwciwgc3RhdGVtZW50LCBkZWNsc1N0YXJ0LCBpbkxvY2F0aW9uLCBleHByRW5kLCBp
bml0U3RhcnQsIGluaXRFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgaW5MaW5lLCBpbkxpbmVTdGFy
dCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZvckluTG9vcChsb2NhdGlvbiwgZm9y
SW5UYXJnZXQsIGZvckluSW5pdGlhbGl6ZXIsIGV4cHIsIHN0YXRlbWVudCwgZGVjbHNTdGFydCwg
aW5Mb2NhdGlvbiwgZXhwckVuZCwgaW5pdFN0YXJ0LCBpbml0RW5kLCBzdGFydExpbmUsIGVuZExp
bmUpOwogICAgIH0KICAgICAKICAgICBpZiAoIW1hdGNoKFNFTUlDT0xPTikpIHsKICAgICAgICAg
bV9hbGxvd3NJbiA9IGZhbHNlOwotICAgICAgICBkZWNsc1N0YXJ0ID0gdG9rZW5TdGFydCgpOwor
ICAgICAgICBkZWNsc1N0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGRlY2xz
ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICBkZWNsc0VuZCA9IGxhc3RUb2tl
bkVuZCgpOwotICAgICAgICBkZWNsc0xpbmUgPSBsYXN0VG9rZW5MaW5lKCk7Ci0gICAgICAgIGRl
Y2xzTGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgIGRlY2xzRW5kID0g
bGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgbV9hbGxvd3NJbiA9IHRydWU7CiAgICAg
ICAgIGZhaWxJZkZhbHNlKGRlY2xzKTsKICAgICB9CkBAIC00MzcsNyArNDI2LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIGNvbnN1bWVPckZhaWwoSU5U
T0tFTik7CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0
KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBpbnQgZXhwckVuZCA9IGxhc3RUb2tlbkVu
ZCgpOworICAgIEpTVG9rZW5Qb3NpdGlvbiBleHByRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24o
KTsKICAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOwogICAgIGNvbnN1bWVPckZhaWwoQ0xP
U0VQQVJFTik7CiAgICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKQEAgLTQ0Niw3ICs0
MzUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgZW5k
TG9vcCgpOwogICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CiAgICAgCi0gICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBkZWNscywgZXhwciwgc3RhdGVtZW50LCBk
ZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBkZWNsc0xp
bmUsIGRlY2xzTGluZVN0YXJ0KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGb3JJbkxvb3Ao
bG9jYXRpb24sIGRlY2xzLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQsIGRlY2xzRW5kLCBl
eHByRW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4
ZXJUeXBlPgpAQCAtNDU0LDI2ICs0NDMsMjEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZQogewogICAgIEFTU0VSVChtYXRjaChCUkVBSykpOwogICAgIEpTVG9rZW5M
b2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwotICAgIGludCBzdGFydENvbCA9IHRv
a2VuU3RhcnQoKTsKLSAgICBpbnQgZW5kQ29sID0gdG9rZW5FbmQoKTsKLSAgICBpbnQgc3RhcnRM
aW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICB1
bnNpZ25lZCBlbmRMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgIEpTVG9rZW5Qb3Np
dGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOworICAgIEpTVG9rZW5Qb3NpdGlvbiBl
bmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwogICAgIAogICAgIGlmIChhdXRv
U2VtaUNvbG9uKCkpIHsKICAgICAgICAgZmFpbElmRmFsc2VXaXRoTWVzc2FnZShicmVha0lzVmFs
aWQoKSwgIidicmVhaycgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBzd2l0Y2ggb3IgbG9vcCBzdGF0
ZW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobG9j
YXRpb24sIHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwgZW5kTGluZSwgZW5kTGluZVN0YXJ0
KTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobG9jYXRpb24s
IHN0YXJ0LCBlbmQpOwogICAgIH0KICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICBmYWlsSWZGYWxz
ZVdpdGhOYW1lQW5kTWVzc2FnZShnZXRMYWJlbChpZGVudCksICJMYWJlbCIsIGlkZW50LT5pbXBs
KCksICJpcyBub3QgZGVmaW5lZCIpOwotICAgIGVuZENvbCA9IHRva2VuRW5kKCk7Ci0gICAgZW5k
TGluZSA9IHRva2VuTGluZSgpOwotICAgIGVuZExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7
CisgICAgZW5kID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQoKTsKICAgICBmYWlsSWZG
YWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3Rh
dGVtZW50KGxvY2F0aW9uLCBpZGVudCwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRM
aW5lLCBlbmRMaW5lU3RhcnQpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVt
ZW50KGxvY2F0aW9uLCBpZGVudCwgc3RhcnQsIGVuZCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBMZXhlclR5cGU+CkBAIC00ODEsMjggKzQ2NSwyMyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lCiB7CiAgICAgQVNTRVJUKG1hdGNoKENPTlRJTlVFKSk7CiAgICAg
SlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7Ci0gICAgaW50IHN0YXJ0
Q29sID0gdG9rZW5TdGFydCgpOwotICAgIGludCBlbmRDb2wgPSB0b2tlbkVuZCgpOwotICAgIGlu
dCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgp
OwotICAgIHVuc2lnbmVkIGVuZExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgSlNU
b2tlblBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CisgICAgSlNUb2tlblBv
c2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBuZXh0KCk7CiAgICAgCiAgICAg
aWYgKGF1dG9TZW1pQ29sb24oKSkgewogICAgICAgICBmYWlsSWZGYWxzZVdpdGhNZXNzYWdlKGNv
bnRpbnVlSXNWYWxpZCgpLCAiJ2NvbnRpbnVlJyBpcyBvbmx5IHZhbGlkIGluc2lkZSBhIGxvb3Ag
c3RhdGVtZW50Iik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVt
ZW50KGxvY2F0aW9uLCBzdGFydENvbCwgZW5kQ29sLCBzdGFydExpbmUsIGVuZExpbmUsIGVuZExp
bmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50
KGxvY2F0aW9uLCBzdGFydCwgZW5kKTsKICAgICB9CiAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAg
U2NvcGVMYWJlbEluZm8qIGxhYmVsID0gZ2V0TGFiZWwoaWRlbnQpOwogICAgIGZhaWxJZkZhbHNl
V2l0aE5hbWVBbmRNZXNzYWdlKGxhYmVsLCAiTGFiZWwiLCBpZGVudC0+aW1wbCgpLCAiaXMgbm90
IGRlZmluZWQiKTsKICAgICBmYWlsSWZGYWxzZVdpdGhNZXNzYWdlKGxhYmVsLT5tX2lzTG9vcCwg
Iidjb250aW51ZScgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBsb29wIHN0YXRlbWVudCIpOwotICAg
IGVuZENvbCA9IHRva2VuRW5kKCk7Ci0gICAgZW5kTGluZSA9IHRva2VuTGluZSgpOwotICAgIGVu
ZExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgZW5kID0gdG9rZW5FbmRQb3NpdGlv
bigpOwogICAgIG5leHQoKTsKICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxvY2F0aW9uLCBpZGVudCwg
c3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBlbmRMaW5lU3RhcnQpOworICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxvY2F0aW9uLCBpZGVudCwg
c3RhcnQsIGVuZCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC01MTEs
MjkgKzQ5MCwyNCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAg
ICAgQVNTRVJUKG1hdGNoKFJFVFVSTikpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0
b2tlbkxvY2F0aW9uKCkpOwogICAgIGZhaWxJZkZhbHNlKGN1cnJlbnRTY29wZSgpLT5pc0Z1bmN0
aW9uKCkpOwotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgZW5kTGlu
ZSA9IHN0YXJ0TGluZTsKLSAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGVu
ZCA9IHRva2VuRW5kKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lID0gdG9rZW5MaW5lKCk7Ci0g
ICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgIEpTVG9r
ZW5Qb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOworICAgIEpTVG9rZW5Qb3Np
dGlvbiBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwogICAgIC8vIFdlIGRv
IHRoZSBhdXRvIHNlbWljb2xvbiBjaGVjayBiZWZvcmUgYXR0ZW1wdGluZyB0byBwYXJzZSBhbiBl
eHByZXNzaW9uCiAgICAgLy8gYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGEgbGluZSBicmVhayBh
ZnRlciB0aGUgcmV0dXJuIGNvcnJlY3RseSB0ZXJtaW5hdGVzCiAgICAgLy8gdGhlIHN0YXRlbWVu
dAogICAgIGlmIChtYXRjaChTRU1JQ09MT04pKQotICAgICAgICBlbmRMaW5lICA9IHRva2VuTGlu
ZSgpOworICAgICAgICBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CisKICAgICBpZiAoYXV0b1Nl
bWlDb2xvbigpKQotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQo
bG9jYXRpb24sIDAsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgZGl2b3RMaW5lLCBk
aXZvdExpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJldHVyblN0YXRl
bWVudChsb2NhdGlvbiwgMCwgc3RhcnQsIGVuZCk7CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9
IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBl
bmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICBkaXZvdExpbmUgPSBsYXN0VG9rZW5MaW5lKCk7Ci0g
ICAgZGl2b3RMaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKKyAgICBlbmQgPSBsYXN0
VG9rZW5FbmRQb3NpdGlvbigpOwogICAgIGlmIChtYXRjaChTRU1JQ09MT04pKQotICAgICAgICBl
bmRMaW5lICA9IHRva2VuTGluZSgpOworICAgICAgICBlbmQgID0gdG9rZW5FbmRQb3NpdGlvbigp
OwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlUmV0dXJuU3RhdGVtZW50KGxvY2F0aW9uLCBleHByLCBzdGFydCwgZW5kLCBzdGFydExp
bmUsIGVuZExpbmUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZVJldHVyblN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgc3RhcnQsIGVuZCk7CiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC01NDEsMjEgKzUxNSwxNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB7CiAgICAgQVNTRVJUKG1h
dGNoKFRIUk9XKSk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24o
KSk7Ci0gICAgaW50IGVTdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgc3RhcnRMaW5lID0g
dG9rZW5MaW5lKCk7CisgICAgSlNUb2tlblBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0
aW9uKCk7CiAgICAgbmV4dCgpOwogICAgIAogICAgIGZhaWxJZlRydWUoYXV0b1NlbWlDb2xvbigp
KTsKICAgICAKICAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRl
eHQpOwogICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGludCBlRW5kID0gbGFzdFRva2VuRW5k
KCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lID0gbGFzdFRva2VuTGluZSgpOwotICAgIHVuc2ln
bmVkIGRpdm90TGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7Ci0gICAgaW50IGVuZExp
bmUgPSB0b2tlbkxpbmUoKTsKKyAgICBKU1Rva2VuUG9zaXRpb24gZW5kID0gbGFzdFRva2VuRW5k
UG9zaXRpb24oKTsKICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwogICAgIAotICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZVRocm93U3RhdGVtZW50KGxvY2F0aW9uLCBleHByLCBlU3Rh
cnQsIGVFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7
CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlVGhyb3dTdGF0ZW1lbnQobG9jYXRpb24sIGV4cHIs
IHN0YXJ0LCBlbmQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAtNTcx
LDE2ICs1NDEsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQog
ICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBUcmVlRXhwcmVzc2lvbiBleHByID0g
cGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGlu
dCBlbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICB1bnNpZ25lZCBkaXZvdExpbmUgPSBsYXN0VG9r
ZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3Rh
cnQoKTsKKyAgICBKU1Rva2VuUG9zaXRpb24gZW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsK
ICAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOwogICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQ
QVJFTik7CiAgICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKICAgICBUcmVlU3RhdGVt
ZW50IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7CiAgICAgZmFp
bElmRmFsc2Uoc3RhdGVtZW50KTsKICAgICAKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVXaXRo
U3RhdGVtZW50KGxvY2F0aW9uLCBleHByLCBzdGF0ZW1lbnQsIHN0YXJ0LCBlbmQsIHN0YXJ0TGlu
ZSwgZW5kTGluZSwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlV2l0aFN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBzdGFydCwg
ZW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJU
eXBlPgpAQCAtNjY3LDcgKzYzNSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWUKICAgICAKICAgICB0cnlCbG9jayA9IHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4
dCk7CiAgICAgZmFpbElmRmFsc2UodHJ5QmxvY2spOwotICAgIGludCBsYXN0TGluZSA9IG1fbGFz
dExpbmU7CisgICAgaW50IGxhc3RMaW5lID0gbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lOwog
ICAgIAogICAgIGlmIChtYXRjaChDQVRDSCkpIHsKICAgICAgICAgY3VycmVudFNjb3BlKCktPnNl
dE5lZWRzRnVsbEFjdGl2YXRpb24oKTsKQEAgLTcxOSwxMyArNjg3LDEzIEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBuZXh0KCk7CiAgICAgaWYgKG1hdGNo
KENMT1NFQlJBQ0UpKSB7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlQmxvY2tTdGF0ZW1lbnQobG9jYXRpb24sIDAsIHN0YXJ0LCBtX2xhc3RMaW5lKTsKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQmxvY2tTdGF0ZW1lbnQobG9jYXRpb24sIDAsIHN0
YXJ0LCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUpOwogICAgIH0KICAgICBUcmVlU291cmNl
RWxlbWVudHMgc3VidHJlZSA9IHBhcnNlU291cmNlRWxlbWVudHM8RG9udENoZWNrRm9yU3RyaWN0
TW9kZT4oY29udGV4dCk7CiAgICAgZmFpbElmRmFsc2Uoc3VidHJlZSk7CiAgICAgbWF0Y2hPckZh
aWwoQ0xPU0VCUkFDRSk7CiAgICAgbmV4dCgpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJs
b2NrU3RhdGVtZW50KGxvY2F0aW9uLCBzdWJ0cmVlLCBzdGFydCwgbV9sYXN0TGluZSk7CisgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlQmxvY2tTdGF0ZW1lbnQobG9jYXRpb24sIHN1YnRyZWUsIHN0
YXJ0LCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgTGV4ZXJUeXBlPgpAQCAtOTM4LDI0ICs5MDYsMjAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbzxG
dW5jdGlvbk5lZWRzTmFtZSwgdHJ1ZT4oY29udGV4dCwgbmFtZSwgcGFyYW1ldGVycywgYm9keSwg
b3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3Rh
cnRDb2x1bW4pKSk7CiAgICAgZmFpbElmRmFsc2UobmFtZSk7CiAgICAgZmFpbElmRmFsc2VJZlN0
cmljdChkZWNsYXJlVmFyaWFibGUobmFtZSkpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1
bmNEZWNsU3RhdGVtZW50KGxvY2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJh
Y2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUsIGJv
ZHlTdGFydENvbHVtbik7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1l
bnQobG9jYXRpb24sIG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZU9mZnNldCwgY2xv
c2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5l
LCBib2R5U3RhcnRDb2x1bW4pOwogfQogCiBzdHJ1Y3QgTGFiZWxJbmZvIHsKLSAgICBMYWJlbElu
Zm8oY29uc3QgSWRlbnRpZmllciogaWRlbnQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQs
IHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgTGFiZWxJ
bmZvKGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGVuZCkKICAgICA6IG1faWRlbnQoaWRlbnQpCiAgICAg
LCBtX3N0YXJ0KHN0YXJ0KQogICAgICwgbV9lbmQoZW5kKQotICAgICwgbV9kaXZvdExpbmUoZGl2
b3RMaW5lKQotICAgICwgbV9kaXZvdExpbmVTdGFydChkaXZvdExpbmVTdGFydCkKICAgICB7CiAg
ICAgfQogICAgIAogICAgIGNvbnN0IElkZW50aWZpZXIqIG1faWRlbnQ7Ci0gICAgdW5zaWduZWQg
bV9zdGFydDsKLSAgICB1bnNpZ25lZCBtX2VuZDsKLSAgICB1bnNpZ25lZCBtX2Rpdm90TGluZTsK
LSAgICB1bnNpZ25lZCBtX2Rpdm90TGluZVN0YXJ0OworICAgIEpTVG9rZW5Qb3NpdGlvbiBtX3N0
YXJ0OworICAgIEpTVG9rZW5Qb3NpdGlvbiBtX2VuZDsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBMZXhlclR5cGU+CkBAIC05NjgsOCArOTMyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZQogICAgIFZlY3RvcjxMYWJlbEluZm8+IGxhYmVsczsKICAgICBKU1Rv
a2VuTG9jYXRpb24gbG9jYXRpb24obV9zb3VyY2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAgIGRvIHsK
LSAgICAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgICAgICBpbnQgc3RhcnRpbmdM
aW5lID0gdG9rZW5MaW5lKCk7CisgICAgICAgIEpTVG9rZW5Qb3NpdGlvbiBzdGFydCA9IHRva2Vu
U3RhcnRQb3NpdGlvbigpOwogICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKICAg
ICAgICAgaWYgKCFuZXh0VG9rZW5Jc0NvbG9uKCkpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGhp
dCB0aGlzIHBhdGggd2UncmUgbWFraW5nIGEgZXhwcmVzc2lvbiBzdGF0ZW1lbnQsIHdoaWNoCkBA
IC05NzgsMTIgKzk0MSwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lCiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNz
aW9uKGNvbnRleHQpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UoZXhwcmVzc2lvbik7CiAgICAg
ICAgICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAgICAgICAgICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVudChsb2NhdGlvbiwgZXhwcmVzc2lvbiwgc3RhcnRp
bmdMaW5lLCBtX2xhc3RMaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUV4
cHJTdGF0ZW1lbnQobG9jYXRpb24sIGV4cHJlc3Npb24sIHN0YXJ0LCBtX2xhc3RUb2tlbkVuZFBv
c2l0aW9uLmxpbmUpOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgIGludCBlbmQgPSB0b2tlbkVuZCgpOwot
ICAgICAgICB1bnNpZ25lZCBkaXZvdExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICAgICAgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgICAgICBKU1Rva2VuUG9z
aXRpb24gZW5kID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICBuZXh0KCk7CiAgICAgICAg
IGNvbnN1bWVPckZhaWwoQ09MT04pOwogICAgICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlk
YXRlZCkgewpAQCAtOTkyLDcgKzk1Myw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWUKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFiZWxzLnNp
emUoKTsgaSsrKQogICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoaWRlbnQtPmltcGwoKSA9PSBs
YWJlbHNbaV0ubV9pZGVudC0+aW1wbCgpKTsKICAgICAgICAgICAgIGZhaWxJZlRydWUoZ2V0TGFi
ZWwoaWRlbnQpKTsKLSAgICAgICAgICAgIGxhYmVscy5hcHBlbmQoTGFiZWxJbmZvKGlkZW50LCBz
dGFydCwgZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KSk7CisgICAgICAgICAgICBsYWJl
bHMuYXBwZW5kKExhYmVsSW5mbyhpZGVudCwgc3RhcnQsIGVuZCkpOwogICAgICAgICB9CiAgICAg
fSB3aGlsZSAobWF0Y2goSURFTlQpKTsKICAgICBib29sIGlzTG9vcCA9IGZhbHNlOwpAQCAtMTAx
OSw3ICs5ODAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAg
ICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
YmVscy5zaXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBMYWJlbEluZm8mIGluZm8gPSBsYWJl
bHNbbGFiZWxzLnNpemUoKSAtIGkgLSAxXTsKLSAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5j
cmVhdGVMYWJlbFN0YXRlbWVudChsb2NhdGlvbiwgaW5mby5tX2lkZW50LCBzdGF0ZW1lbnQsIGlu
Zm8ubV9zdGFydCwgaW5mby5tX2VuZCwgaW5mby5tX2Rpdm90TGluZSwgaW5mby5tX2Rpdm90TGlu
ZVN0YXJ0KTsKKyAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5jcmVhdGVMYWJlbFN0YXRlbWVu
dChsb2NhdGlvbiwgaW5mby5tX2lkZW50LCBzdGF0ZW1lbnQsIGluZm8ubV9zdGFydCwgaW5mby5t
X2VuZCk7CiAgICAgfQogICAgIHJldHVybiBzdGF0ZW1lbnQ7CiB9CkBAIC0xMDI3LDEyICs5ODgs
MTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogdGVtcGxhdGUg
PHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KFRyZWVC
dWlsZGVyJiBjb250ZXh0KQogewotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAg
ICBKU1Rva2VuUG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICBKU1Rv
a2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICBUcmVlRXhwcmVzc2lv
biBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNl
KGV4cHJlc3Npb24pOwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVudChsb2NhdGlvbiwgZXhwcmVzc2lvbiwgc3Rh
cnRMaW5lLCBtX2xhc3RMaW5lKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHByU3RhdGVt
ZW50KGxvY2F0aW9uLCBleHByZXNzaW9uLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5s
aW5lKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTExNDgsOSArMTEw
OSw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGZhaWxJZlN0YWNr
T3ZlcmZsb3coKTsKLSAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgdW5zaWduZWQg
bGluZSA9IHRva2VuTGluZSgpOwotICAgIHVuc2lnbmVkIGxpbmVTdGFydCA9IHRva2VuTGluZVN0
YXJ0KCk7CisgICAgSlNUb2tlblBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7
CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgaW50
IGluaXRpYWxBc3NpZ25tZW50Q291bnQgPSBtX2Fzc2lnbm1lbnRDb3VudDsKICAgICBpbnQgaW5p
dGlhbE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKQEAgLTExODEsMTAgKzExNDAsOCBAQCB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByCiAgICAgICAgIH0KICAgICAg
ICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgIGhhZEFzc2lnbm1lbnQg
PSB0cnVlOwotICAgICAgICBjb250ZXh0LmFzc2lnbm1lbnRTdGFja0FwcGVuZChhc3NpZ25tZW50
U3RhY2ssIGxocywgc3RhcnQsIHRva2VuU3RhcnQoKSwgbGluZSwgbGluZVN0YXJ0LCBtX2Fzc2ln
bm1lbnRDb3VudCwgb3ApOwotICAgICAgICBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICAgICAg
bGluZSA9IHRva2VuTGluZSgpOwotICAgICAgICBsaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgp
OworICAgICAgICBjb250ZXh0LmFzc2lnbm1lbnRTdGFja0FwcGVuZChhc3NpZ25tZW50U3RhY2ss
IGxocywgc3RhcnQsIHRva2VuU3RhcnRQb3NpdGlvbigpLCBtX2Fzc2lnbm1lbnRDb3VudCwgb3Ap
OworICAgICAgICBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBtX2Fzc2ln
bm1lbnRDb3VudCsrOwogICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdz
KTsKICAgICAgICAgaWYgKHN0cmljdE1vZGUoKSAmJiBtX2xhc3RJZGVudGlmaWVyICYmIGNvbnRl
eHQuaXNSZXNvbHZlKGxocykpIHsKQEAgLTEyMDYsNyArMTE2Myw3IEBAIGVuZDoKICAgICAgICAg
cmV0dXJuIGxoczsKICAgICAKICAgICB3aGlsZSAoYXNzaWdubWVudFN0YWNrKQotICAgICAgICBs
aHMgPSBjb250ZXh0LmNyZWF0ZUFzc2lnbm1lbnQobG9jYXRpb24sIGFzc2lnbm1lbnRTdGFjaywg
bGhzLCBpbml0aWFsQXNzaWdubWVudENvdW50LCBtX2Fzc2lnbm1lbnRDb3VudCwgbGFzdFRva2Vu
RW5kKCkpOworICAgICAgICBsaHMgPSBjb250ZXh0LmNyZWF0ZUFzc2lnbm1lbnQobG9jYXRpb24s
IGFzc2lnbm1lbnRTdGFjaywgbGhzLCBpbml0aWFsQXNzaWdubWVudENvdW50LCBtX2Fzc2lnbm1l
bnRDb3VudCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgCiAgICAgcmV0dXJuIGxoczsK
IH0KQEAgLTEyNTIsMTIgKzEyMDksMTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzcwogICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpCaW5hcnlFeHByQ29udGV4dCBi
aW5hcnlFeHByQ29udGV4dChjb250ZXh0KTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24o
dG9rZW5Mb2NhdGlvbigpKTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpbnQgZXhwclN0
YXJ0ID0gdG9rZW5TdGFydCgpOworICAgICAgICBKU1Rva2VuUG9zaXRpb24gZXhwclN0YXJ0ID0g
dG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBt
X2Fzc2lnbm1lbnRDb3VudDsKICAgICAgICAgVHJlZUV4cHJlc3Npb24gY3VycmVudCA9IHBhcnNl
VW5hcnlFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICBmYWlsSWZGYWxzZShjdXJyZW50KTsK
ICAgICAgICAgCi0gICAgICAgIGNvbnRleHQuYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8ob3Bl
cmFuZFN0YWNrRGVwdGgsIGN1cnJlbnQsIGV4cHJTdGFydCwgbGFzdFRva2VuRW5kKCksIGxhc3RU
b2tlbkVuZCgpLCBsYXN0VG9rZW5MaW5lKCksIGxhc3RUb2tlbkxpbmVTdGFydCgpLCBpbml0aWFs
QXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQpOworICAgICAgICBjb250ZXh0LmFwcGVu
ZEJpbmFyeUV4cHJlc3Npb25JbmZvKG9wZXJhbmRTdGFja0RlcHRoLCBjdXJyZW50LCBleHByU3Rh
cnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGluaXRp
YWxBc3NpZ25tZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCk7CiAgICAgICAgIGludCBwcmVjZWRl
bmNlID0gaXNCaW5hcnlPcGVyYXRvcihtX3Rva2VuLm1fdHlwZSk7CiAgICAgICAgIGlmICghcHJl
Y2VkZW5jZSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMzNyw4ICsxMjk0LDggQEAgdGVtcGxh
dGUgPGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWlsZAogICAgICAgICBuZXh0KCk7CiAgICAg
ICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5vUmVxdWlyZW1lbnRz
LCBmYWxzZT4oY29udGV4dCwgYWNjZXNzb3JOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJh
Y2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIGJvZHlTdGFydENvbHVt
bikpKTsKICAgICAgICAgaWYgKHN0cmluZ1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVy
biBjb250ZXh0LnRlbXBsYXRlIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHk8Y29tcGxldGU+
KGxvY2F0aW9uLCB0eXBlLCBzdHJpbmdQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9w
ZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGlu
ZSwgYm9keVN0YXJ0Q29sdW1uKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxhdGUgY3Jl
YXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eTxjb21wbGV0ZT4oY29uc3RfY2FzdDxWTSo+KG1fdm0p
LCBsb2NhdGlvbiwgdHlwZSwgbnVtZXJpY1Byb3BlcnR5TmFtZSwgcGFyYW1ldGVycywgYm9keSwg
b3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xhc3RM
aW5lLCBib2R5U3RhcnRDb2x1bW4pOworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxh
dGUgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eTxjb21wbGV0ZT4obG9jYXRpb24sIHR5cGUs
IHN0cmluZ1Byb3BlcnR5TmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBj
bG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxp
bmUsIGJvZHlTdGFydENvbHVtbik7CisgICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlIGNy
ZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHk8Y29tcGxldGU+KGNvbnN0X2Nhc3Q8Vk0qPihtX3Zt
KSwgbG9jYXRpb24sIHR5cGUsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHks
IG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0
VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBib2R5U3RhcnRDb2x1bW4pOwogICAgIH0KICAgICBjYXNl
IE5VTUJFUjogewogICAgICAgICBkb3VibGUgcHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEu
ZG91YmxlVmFsdWU7CkBAIC0xNTM2LDE1ICsxNDkzLDEzIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgcmV0dXJuIGNvbnRleHQudGhpc0V4cHIobG9j
YXRpb24pOwogICAgIH0KICAgICBjYXNlIElERU5UOiB7Ci0gICAgICAgIGludCBzdGFydCA9IHRv
a2VuU3RhcnQoKTsKLSAgICAgICAgaW50IGxpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICAgICAgaW50
IGxpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgIEpTVG9rZW5Qb3NpdGlvbiBz
dGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwogICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9j
YXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBjdXJyZW50
U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQsIG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0g
KmlkZW50KTsKICAgICAgICAgbV9sYXN0SWRlbnRpZmllciA9IGlkZW50OwotICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVSZXNvbHZlKGxvY2F0aW9uLCBpZGVudCwgc3RhcnQsIGxpbmUsIGxp
bmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJlc29sdmUobG9jYXRpb24s
IGlkZW50LCBzdGFydCk7CiAgICAgfQogICAgIGNhc2UgU1RSSU5HOiB7CiAgICAgICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CkBAIC0xNTgzLDEyICsx
NTM4LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgZmFpbElmRmFsc2UobV9sZXhlci0+c2NhblJlZ0V4cChwYXR0
ZXJuLCBmbGFncykpOwogICAgICAgICAKLSAgICAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgp
OwotICAgICAgICBpbnQgbGluZSA9IHRva2VuTGluZSgpOwotICAgICAgICBpbnQgbGluZVN0YXJ0
ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgSlNUb2tlblBvc2l0aW9uIHN0YXJ0ID0gdG9r
ZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tl
bkxvY2F0aW9uKCkpOwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIFRyZWVFeHByZXNzaW9uIHJl
ID0gY29udGV4dC5jcmVhdGVSZWdFeHAobG9jYXRpb24sICpwYXR0ZXJuLCAqZmxhZ3MsIHN0YXJ0
LCBsaW5lLCBsaW5lU3RhcnQpOworICAgICAgICBUcmVlRXhwcmVzc2lvbiByZSA9IGNvbnRleHQu
Y3JlYXRlUmVnRXhwKGxvY2F0aW9uLCAqcGF0dGVybiwgKmZsYWdzLCBzdGFydCk7CiAgICAgICAg
IGlmICghcmUpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHlhcnJFcnJvck1zZyA9IFlhcnI6
OmNoZWNrU3ludGF4KHBhdHRlcm4tPnN0cmluZygpKTsKICAgICAgICAgICAgIGZhaWxXaXRoTWVz
c2FnZSh5YXJyRXJyb3JNc2cpOwpAQCAtMTYyOSwxMCArMTU4Miw3IEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
aW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24oVHJlZUJ1aWxkZXIm
IGNvbnRleHQpCiB7CiAgICAgVHJlZUV4cHJlc3Npb24gYmFzZSA9IDA7Ci0gICAgaW50IHN0YXJ0
ID0gdG9rZW5TdGFydCgpOwotICAgIGludCBleHByZXNzaW9uU3RhcnQgPSBzdGFydDsKLSAgICBp
bnQgZXhwcmVzc2lvbkxpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgZXhwcmVzc2lvbkxpbmVT
dGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgSlNUb2tlblBvc2l0aW9uIGV4cHJlc3Npb25T
dGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgIGludCBuZXdDb3VudCA9IDA7CiAgICAg
SlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKG1fc291cmNlLT5zdGFydE9mZnNldCgpKTsKICAgICB3
aGlsZSAobWF0Y2goTkVXKSkgewpAQCAtMTY1MSw3ICsxNjAxLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRp
b24oKTsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm88RnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgZmFsc2U+KGNvbnRleHQsIG5hbWUsIHBhcmFt
ZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0
TGluZSwgYm9keVN0YXJ0Q29sdW1uKSkpOwotICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVG
dW5jdGlvbkV4cHIobG9jYXRpb24sIG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZU9m
ZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSwgYm9keVN0
YXJ0Q29sdW1uKTsKKyAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKGxv
Y2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJh
Y2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9k
eVN0YXJ0Q29sdW1uKTsKICAgICB9IGVsc2UKICAgICAgICAgYmFzZSA9IHBhcnNlUHJpbWFyeUV4
cHJlc3Npb24oY29udGV4dCk7CiAgICAgCkBAIC0xNjYxLDE1ICsxNjExLDEzIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgc3dpdGNoIChtX3Rva2Vu
Lm1fdHlwZSkgewogICAgICAgICBjYXNlIE9QRU5CUkFDS0VUOiB7CiAgICAgICAgICAgICBtX25v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgICAgIGludCBleHByZXNzaW9uRW5k
ID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkxpbmUgPSBsYXN0
VG9rZW5MaW5lKCk7Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkxpbmVTdGFydCA9IGxhc3RU
b2tlbkxpbmVTdGFydCgpOworICAgICAgICAgICAgSlNUb2tlblBvc2l0aW9uIGV4cHJlc3Npb25F
bmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAg
ICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKICAgICAgICAgICAgIGludCBp
bml0aWFsQXNzaWdubWVudHMgPSBtX2Fzc2lnbm1lbnRDb3VudDsKICAgICAgICAgICAgIFRyZWVF
eHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAg
ICAgZmFpbElmRmFsc2UocHJvcGVydHkpOwotICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlQnJhY2tldEFjY2Vzcyhsb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25t
ZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5k
LCB0b2tlbkVuZCgpLCBleHByZXNzaW9uTGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAg
ICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKGxvY2F0aW9uLCBiYXNl
LCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50LCBleHBy
ZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAg
ICAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0tFVCk7CiAgICAgICAgICAgICBtX25vbkxIU0Nv
dW50ID0gbm9uTEhTQ291bnQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2NzksMzAgKzE2Mjcs
MjUgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAg
ICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKICAgICAgICAgICAgIGlmIChuZXdD
b3VudCkgewogICAgICAgICAgICAgICAgIG5ld0NvdW50LS07Ci0gICAgICAgICAgICAgICAgaW50
IGV4cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleHBy
ZXNzaW9uTGluZSA9IGxhc3RUb2tlbkxpbmUoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBl
eHByZXNzaW9uTGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgICAgICAg
ICAgSlNUb2tlblBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigp
OwogICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVu
dHMoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRzKTsKLSAg
ICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNl
LCBhcmd1bWVudHMsIHN0YXJ0LCBleHByRW5kLCBsYXN0VG9rZW5FbmQoKSwgZXhwcmVzc2lvbkxp
bmUsIGV4cHJlc3Npb25MaW5lU3RhcnQpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0
LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0
LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmQo
KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleHByZXNzaW9uTGluZSA9IGxhc3RUb2tlbkxp
bmUoKTsKLSAgICAgICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkxpbmVTdGFydCA9IGxhc3RUb2tl
bkxpbmVTdGFydCgpOworICAgICAgICAgICAgICAgIEpTVG9rZW5Qb3NpdGlvbiBleHByZXNzaW9u
RW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICBUcmVlQXJndW1l
bnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOwogICAgICAgICAgICAgICAg
IGZhaWxJZkZhbHNlKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQu
bWFrZUZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lv
blN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmQoKSwgZXhwcmVzc2lvbkxpbmUsIGV4
cHJlc3Npb25MaW5lU3RhcnQpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VG
dW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFy
dCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIERPVDogewogICAgICAgICAgICAgbV9ub25U
cml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVuZCA9
IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICAgICAgZXhwcmVzc2lvbkxpbmVTdGFydCA9IGxhc3RU
b2tlbkxpbmVTdGFydCgpOworICAgICAgICAgICAgSlNUb2tlblBvc2l0aW9uIGV4cHJlc3Npb25F
bmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50
aWZpZXIoTGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1
aWxkS2V5d29yZHMpOwogICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwotICAgICAgICAg
ICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKGxvY2F0aW9uLCBiYXNlLCBtX3Rva2Vu
Lm1fZGF0YS5pZGVudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZCgp
LCBleHByZXNzaW9uTGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAgICAgICAgICBiYXNl
ID0gY29udGV4dC5jcmVhdGVEb3RBY2Nlc3MobG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRh
LmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24o
KSk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMTcxMiw3ICsxNjU1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzcwogICAgIH0KIGVuZE1lbWJlckV4cHJlc3Npb246CiAgICAgd2hpbGUgKG5ld0NvdW50LS0p
Ci0gICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIHN0
YXJ0LCBsYXN0VG9rZW5FbmQoKSwgZXhwcmVzc2lvbkxpbmUsIGV4cHJlc3Npb25MaW5lU3RhcnQp
OworICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBl
eHByZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgIHJldHVybiBiYXNl
OwogfQogCkBAIC0xNzQ1LDE0ICsxNjg4LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtX25vbkxI
U0NvdW50Kys7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kVW5hcnlUb2tlbih0b2tlblN0YWNrRGVw
dGgsIG1fdG9rZW4ubV90eXBlLCB0b2tlblN0YXJ0KCksIHRva2VuTGluZSgpLCB0b2tlbkxpbmVT
dGFydCgpKTsKKyAgICAgICAgY29udGV4dC5hcHBlbmRVbmFyeVRva2VuKHRva2VuU3RhY2tEZXB0
aCwgbV90b2tlbi5tX3R5cGUsIHRva2VuU3RhcnRQb3NpdGlvbigpKTsKICAgICAgICAgbmV4dCgp
OwogICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICB9Ci0gICAgaW50
IHN1YkV4cHJTdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgc3ViRXhwckxpbmUgPSB0b2tl
bkxpbmUoKTsKLSAgICBpbnQgc3ViRXhwckxpbmVTdGFydFBvc2l0aW9uID0gdG9rZW5MaW5lU3Rh
cnQoKTsKLSAgICBBU1NFUlQoc3ViRXhwclN0YXJ0ID49IHN1YkV4cHJMaW5lU3RhcnRQb3NpdGlv
bik7CisgICAgSlNUb2tlblBvc2l0aW9uIHN1YkV4cHJTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlv
bigpOworICAgIEFTU0VSVChzdWJFeHByU3RhcnQub2Zmc2V0ID49IHN1YkV4cHJTdGFydC5saW5l
U3RhcnRPZmZzZXQpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9u
KCkpOwogICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZU1lbWJlckV4cHJlc3Npb24oY29u
dGV4dCk7CiAgICAgZmFpbElmRmFsc2UoZXhwcik7CkBAIC0xNzY2LDcgKzE3MDcsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgY2FzZSBQTFVTUExVUzoK
ICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgIG1fbm9uTEhT
Q291bnQrKzsKLSAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVBvc3RmaXhOb2RlKGxvY2F0aW9u
LCBleHByLCBPcFBsdXNQbHVzLCBzdWJFeHByU3RhcnQsIGxhc3RUb2tlbkVuZCgpLCB0b2tlbkVu
ZCgpLCB0b2tlbkxpbmUoKSwgdG9rZW5MaW5lU3RhcnQoKSk7CisgICAgICAgIGV4cHIgPSBjb250
ZXh0Lm1ha2VQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BQbHVzUGx1cywgc3ViRXhwclN0
YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAg
ICBtX2Fzc2lnbm1lbnRDb3VudCsrOwogICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTmFt
ZUFuZE1lc3NhZ2UoaXNFdmFsT3JBcmd1bWVudHMsICInIiwgbV9sYXN0SWRlbnRpZmllci0+aW1w
bCgpLCAiJyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgZmFp
bElmVHJ1ZUlmU3RyaWN0KHJlcXVpcmVzTEV4cHIpOwpAQCAtMTc3NSw3ICsxNzE2LDcgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGNhc2UgTUlOVVNNSU5V
UzoKICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgIG1fbm9u
TEhTQ291bnQrKzsKLSAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVBvc3RmaXhOb2RlKGxvY2F0
aW9uLCBleHByLCBPcE1pbnVzTWludXMsIHN1YkV4cHJTdGFydCwgbGFzdFRva2VuRW5kKCksIHRv
a2VuRW5kKCksIHRva2VuTGluZSgpLCB0b2tlbkxpbmVTdGFydCgpKTsKKyAgICAgICAgZXhwciA9
IGNvbnRleHQubWFrZVBvc3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBPcE1pbnVzTWludXMsIHN1
YkV4cHJTdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwgdG9rZW5FbmRQb3NpdGlvbigpKTsK
ICAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0
V2l0aE5hbWVBbmRNZXNzYWdlKGlzRXZhbE9yQXJndW1lbnRzLCAiJyIsIG1fbGFzdElkZW50aWZp
ZXItPmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBtb2RlIik7CiAgICAg
ICAgIGZhaWxJZlRydWVJZlN0cmljdChyZXF1aXJlc0xFeHByKTsKQEAgLTE3ODUsOSArMTcyNiw3
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIAotICAgIGludCBlbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICBpbnQg
ZW5kTGluZSA9IGxhc3RUb2tlbkxpbmUoKTsKLSAgICBpbnQgZW5kTGluZVN0YXJ0UG9zaXRpb24g
PSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKKyAgICBKU1Rva2VuUG9zaXRpb24gZW5kID0gbGFzdFRv
a2VuRW5kUG9zaXRpb24oKTsKIAogICAgIGlmICghVHJlZUJ1aWxkZXI6OkNyZWF0ZXNBU1QgJiYg
KG1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCB8fCAhc3RyaWN0TW9kZSgpKSkKICAgICAgICAgcmV0
dXJuIGV4cHI7CkBAIC0xODEwLDEyICsxNzQ5LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBMVVNQ
TFVTOgogICAgICAgICBjYXNlIEFVVE9QTFVTUExVUzoKLSAgICAgICAgICAgIGV4cHIgPSBjb250
ZXh0Lm1ha2VQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBPcFBsdXNQbHVzLCBjb250ZXh0LnVu
YXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAx
LCBlbmQsIHN1YkV4cHJMaW5lLCBzdWJFeHByTGluZVN0YXJ0UG9zaXRpb24pOworICAgICAgICAg
ICAgZXhwciA9IGNvbnRleHQubWFrZVByZWZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wUGx1c1Bs
dXMsIGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCksIHN1
YkV4cHJTdGFydCArIDEsIGVuZCk7CiAgICAgICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCsrOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTUlOVVNNSU5VUzoKICAgICAgICAgY2Fz
ZSBBVVRPTUlOVVNNSU5VUzoKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhO
b2RlKGxvY2F0aW9uLCBleHByLCBPcE1pbnVzTWludXMsIGNvbnRleHQudW5hcnlUb2tlblN0YWNr
TGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCksIHN1YkV4cHJTdGFydCArIDEsIGVuZCwgc3ViRXhw
ckxpbmUsIHN1YkV4cHJMaW5lU3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICBleHByID0gY29u
dGV4dC5tYWtlUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BNaW51c01pbnVzLCBjb250ZXh0
LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQg
KyAxLCBlbmQpOwogICAgICAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVPRjoKQEAgLTE4MjYsMTQgKzE3NjUsMTMgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgREVMRVRFVE9LRU46CiAgICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJp
Y3RXaXRoTmFtZUFuZE1lc3NhZ2UoY29udGV4dC5pc1Jlc29sdmUoZXhwciksICJDYW5ub3QgZGVs
ZXRlIHVucXVhbGlmaWVkIHByb3BlcnR5IiwgbV9sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiaW4g
c3RyaWN0IG1vZGUiKTsKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VEZWxldGVOb2Rl
KGxvY2F0aW9uLCBleHByLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0
YWNrRGVwdGgpLCBlbmQsIGVuZCwgZW5kTGluZSwgZW5kTGluZVN0YXJ0UG9zaXRpb24pOworICAg
ICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZURlbGV0ZU5vZGUobG9jYXRpb24sIGV4cHIsIGNv
bnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCksIGVuZCwgZW5k
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8g
SWYgd2UgZ2V0IGhlcmUgc29tZXRoaW5nIGhhcyBnb25lIGhvcnJpYmx5IGhvcnJpYmx5IHdyb25n
CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAgICAgICAgIHN1YkV4cHJTdGFydCA9
IGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCk7Ci0gICAg
ICAgIHN1YkV4cHJMaW5lU3RhcnRQb3NpdGlvbiA9IGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFz
dExpbmVTdGFydFBvc2l0aW9uKHRva2VuU3RhY2tEZXB0aCk7CiAgICAgICAgIGNvbnRleHQudW5h
cnlUb2tlblN0YWNrUmVtb3ZlTGFzdCh0b2tlblN0YWNrRGVwdGgpOwogICAgIH0KICAgICByZXR1
cm4gZXhwcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNp
b24gMTUyNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDc1LDggKzQ3NSw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHBhcnNl
SW5uZXIoKTsKIAogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyosIFBh
cnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rp
b25TdGFjaz4qLCBDb2RlRmVhdHVyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCwg
aW50LCBJZGVudGlmaWVyU2V0Jik7CisgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlv
blN0YWNrczo6RnVuY3Rpb25TdGFjaz4qLCBDb2RlRmVhdHVyZXMsIGludCwgSWRlbnRpZmllclNl
dCYpOwogCiAgICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgdHlwZSBvZiBlcnJvciB0byByZXBvcnQu
CiAgICAgYm9vbCBpc0Z1bmN0aW9uQm9keU5vZGUoU2NvcGVOb2RlKikgeyByZXR1cm4gZmFsc2U7
IH0KQEAgLTQ4NCwyMCArNDgzLDIyIEBAIHByaXZhdGU6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgbmV4dCh1bnNpZ25lZCBsZXhlckZsYWdzID0gMCkKICAgICB7Ci0gICAgICAgIG1fbGFzdExp
bmUgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZTsKLSAgICAgICAgbV9sYXN0VG9rZW5FbmQgPSBt
X3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0OwotICAgICAgICBtX2xhc3RUb2tlbkxpbmVTdGFy
dCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7Ci0gICAgICAgIG1fbGV4ZXIt
PnNldExhc3RMaW5lTnVtYmVyKG1fbGFzdExpbmUpOwotICAgICAgICBtX3Rva2VuLm1fdHlwZSA9
IG1fbGV4ZXItPmxleCgmbV90b2tlbi5tX2RhdGEsICZtX3Rva2VuLm1fbG9jYXRpb24sIGxleGVy
RmxhZ3MsIHN0cmljdE1vZGUoKSk7CisgICAgICAgIGludCBsYXN0TGluZSA9IG1fdG9rZW4ubV9s
b2NhdGlvbi5saW5lOworICAgICAgICBpbnQgbGFzdFRva2VuRW5kID0gbV90b2tlbi5tX2xvY2F0
aW9uLmVuZE9mZnNldDsKKyAgICAgICAgaW50IGxhc3RUb2tlbkxpbmVTdGFydCA9IG1fdG9rZW4u
bV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CisgICAgICAgIG1fbGFzdFRva2VuRW5kUG9zaXRp
b24gPSBKU1Rva2VuUG9zaXRpb24obGFzdExpbmUsIGxhc3RUb2tlbkVuZCwgbGFzdFRva2VuTGlu
ZVN0YXJ0KTsKKyAgICAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIobGFzdExpbmUpOwor
ICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleCgmbV90b2tlbiwgbGV4ZXJGbGFn
cywgc3RyaWN0TW9kZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbmV4dEV4
cGVjdElkZW50aWZpZXIodW5zaWduZWQgbGV4ZXJGbGFncyA9IDApCiAgICAgewotICAgICAgICBt
X2xhc3RMaW5lID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7Ci0gICAgICAgIG1fbGFzdFRva2Vu
RW5kID0gbV90b2tlbi5tX2xvY2F0aW9uLmVuZE9mZnNldDsKLSAgICAgICAgbV9sYXN0VG9rZW5M
aW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwotICAgICAgICBt
X2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihtX2xhc3RMaW5lKTsKLSAgICAgICAgbV90b2tlbi5t
X3R5cGUgPSBtX2xleGVyLT5sZXhFeHBlY3RJZGVudGlmaWVyKCZtX3Rva2VuLm1fZGF0YSwgJm1f
dG9rZW4ubV9sb2NhdGlvbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSgpKTsKKyAgICAgICAgaW50
IGxhc3RMaW5lID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7CisgICAgICAgIGludCBsYXN0VG9r
ZW5FbmQgPSBtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0OworICAgICAgICBpbnQgbGFzdFRv
a2VuTGluZVN0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKKyAgICAg
ICAgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbiA9IEpTVG9rZW5Qb3NpdGlvbihsYXN0TGluZSwgbGFz
dFRva2VuRW5kLCBsYXN0VG9rZW5MaW5lU3RhcnQpOworICAgICAgICBtX2xleGVyLT5zZXRMYXN0
TGluZU51bWJlcihsYXN0TGluZSk7CisgICAgICAgIG1fdG9rZW4ubV90eXBlID0gbV9sZXhlci0+
bGV4RXhwZWN0SWRlbnRpZmllcigmbV90b2tlbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSgpKTsK
ICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbmV4dFRva2VuSXNDb2xvbigpCkBAIC01
MTUsNyArNTE2LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBBTFdBWVNfSU5MSU5FIFN0cmluZyBn
ZXRUb2tlbigpIHsKICAgICAgICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyID0gbV9z
b3VyY2UtPnByb3ZpZGVyKCk7Ci0gICAgICAgIHJldHVybiBzb3VyY2VQcm92aWRlci0+Z2V0UmFu
Z2UodG9rZW5TdGFydCgpLCB0b2tlbkVuZCgpKTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZVByb3Zp
ZGVyLT5nZXRSYW5nZSh0b2tlblN0YXJ0KCksIHRva2VuRW5kUG9zaXRpb24oKS5vZmZzZXQpOwog
ICAgIH0KICAgICAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbWF0Y2goSlNUb2tlblR5cGUgZXhw
ZWN0ZWQpCkBAIC01MjgsNiArNTI5LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX3Rv
a2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQ7CiAgICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJ
TkUgY29uc3QgSlNUb2tlblBvc2l0aW9uJiB0b2tlblN0YXJ0UG9zaXRpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdG9rZW4ubV9zdGFydFBvc2l0aW9uOworICAgIH0KKwogICAgIEFMV0FZ
U19JTkxJTkUgaW50IHRva2VuTGluZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV90b2tlbi5t
X2xvY2F0aW9uLmxpbmU7CkBAIC01MzgsOSArNTQ0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIHRva2VuU3RhcnQoKSAtIHRva2VuTGluZVN0YXJ0KCk7CiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSB1bnNpZ25lZCB0b2tlbkVuZCgpCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBKU1Rv
a2VuUG9zaXRpb24mIHRva2VuRW5kUG9zaXRpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
dG9rZW4ubV9sb2NhdGlvbi5lbmRPZmZzZXQ7CisgICAgICAgIHJldHVybiBtX3Rva2VuLm1fZW5k
UG9zaXRpb247CiAgICAgfQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgdG9rZW5M
aW5lU3RhcnQoKQpAQCAtOTE1LDcgKzkyMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGJv
b2wgc3RyaWN0LCBjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlUHJvcGVydHkg
cGFyc2VQcm9wZXJ0eShUcmVlQnVpbGRlciYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRy
ZWVCdWlsZGVyJik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5M
SU5FIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVp
bGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBU
cmVlRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYg
ZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lv
biYgbGFzdEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQm
IGluaXRFbmQpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElO
RSBUcmVlRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGlu
dCYgZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVz
c2lvbiYgbGFzdEluaXRpYWxpemVyLCBKU1Rva2VuUG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVG9r
ZW5Qb3NpdGlvbiYgaW5pdFN0YXJ0LCBKU1Rva2VuUG9zaXRpb24mIGluaXRFbmQpOwogICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlQ29uc3REZWNsTGlz
dCBwYXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0KTsKICAgICB0
ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2Nv
cGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVy
JiwgY29uc3QgSWRlbnRpZmllciomLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYsIFRyZWVGdW5j
dGlvbkJvZHkmLCB1bnNpZ25lZCYgb3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25lZCYgY2xvc2VCcmFj
ZU9mZnNldCwgaW50JiBib2R5U3RhcnRMaW5lLCB1bnNpZ25lZCYgYm9keVN0YXJ0Q29sdW1uKTsK
ICAgICBBTFdBWVNfSU5MSU5FIGludCBpc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5UeXBlKTsKQEAg
LTkzNSwxOSArOTQxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fc3RhY2suaXNTYWZl
VG9SZWN1cnNlKCk7CiAgICAgfQogICAgIAotICAgIGludCBsYXN0VG9rZW5FbmQoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGFzdFRva2VuRW5kOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGxhc3RUb2tlbkxpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGFzdExp
bmU7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGFzdFRva2VuTGluZVN0YXJ0KCkgY29uc3QKKyAg
ICBjb25zdCBKU1Rva2VuUG9zaXRpb24mIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2xhc3RUb2tlbkxpbmVTdGFydDsKKyAgICAgICAgcmV0dXJu
IG1fbGFzdFRva2VuRW5kUG9zaXRpb247CiAgICAgfQogCiAgICAgYm9vbCBoYXNFcnJvcigpIGNv
bnN0CkBAIC05NjUsMTAgKzk2MSw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNz
YWdlOwogICAgIEpTVG9rZW4gbV90b2tlbjsKICAgICBib29sIG1fYWxsb3dzSW47Ci0gICAgdW5z
aWduZWQgbV9sYXN0TGluZTsKLSAgICBpbnQgbV9sYXN0VG9rZW5FbmQ7Ci0gICAgdW5zaWduZWQg
bV9sYXN0VG9rZW5MaW5lOwotICAgIHVuc2lnbmVkIG1fbGFzdFRva2VuTGluZVN0YXJ0OworICAg
IEpTVG9rZW5Qb3NpdGlvbiBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uOwogICAgIGludCBtX2Fzc2ln
bm1lbnRDb3VudDsKICAgICBpbnQgbV9ub25MSFNDb3VudDsKICAgICBib29sIG1fc3ludGF4QWxy
ZWFkeVZhbGlkYXRlZDsKQEAgLTEwNTEsNyArMTA0NCw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9k
ZT4gUGFyc2VyPExleGVyVHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICptX3NvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVy
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX251bUNvbnN0YW50cyk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKG1fc291cmNlLT5maXJzdExpbmUoKSwgbV9sYXN0TGlu
ZSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVyLT5jdXJyZW50TGluZVN0YXJ0T2Zm
c2V0KCkpOworICAgICAgICByZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1f
bGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xl
eGVyLT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFdlIGNhbiBuZXZlciBzZWUgYSBzeW50YXggZXJyb3Igd2hlbiByZXBhcnNpbmcgYSBmdW5jdGlv
biwgc2luY2Ugd2Ugc2hvdWxkIGhhdmUKICAgICAgICAgLy8gcmVwb3J0ZWQgdGhlIGVycm9yIHdo
ZW4gcGFyc2luZyB0aGUgY29udGFpbmluZyBwcm9ncmFtIG9yIGV2YWwgY29kZS4gU28gaWYgd2Un
cmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAko
cmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJU
b2tlbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCwyNSBAQCBlbnVtIEpTVG9rZW5U
eXBlIHsKICAgICBJTlZBTElEX1NUUklOR19MSVRFUkFMX0VSUk9SVE9LID0gOSB8IEVycm9yVG9r
ZW5GbGFnLAogfTsKIAorc3RydWN0IEpTVG9rZW5Qb3NpdGlvbiB7CisgICAgSlNUb2tlblBvc2l0
aW9uKCkgOiBsaW5lKDApLCBvZmZzZXQoMCksIGxpbmVTdGFydE9mZnNldCgwKSB7IH0KKyAgICBK
U1Rva2VuUG9zaXRpb24oaW50IF9saW5lLCBpbnQgX29mZnNldCwgaW50IF9saW5lU3RhcnRPZmZz
ZXQpIDogbGluZShfbGluZSksIG9mZnNldChfb2Zmc2V0KSwgbGluZVN0YXJ0T2Zmc2V0KF9saW5l
U3RhcnRPZmZzZXQpIHsgfQorICAgIEpTVG9rZW5Qb3NpdGlvbihjb25zdCBKU1Rva2VuUG9zaXRp
b24mIG90aGVyKSA6IGxpbmUob3RoZXIubGluZSksIG9mZnNldChvdGhlci5vZmZzZXQpLCBsaW5l
U3RhcnRPZmZzZXQob3RoZXIubGluZVN0YXJ0T2Zmc2V0KSB7IH0KKworCisKKyAgICBpbmxpbmUg
SlNUb2tlblBvc2l0aW9uIG9wZXJhdG9yKyhpbnQgYWRqdXN0bWVudCkgY29uc3QgeyByZXR1cm4g
SlNUb2tlblBvc2l0aW9uKGxpbmUsIG9mZnNldCArIGFkanVzdG1lbnQsIGxpbmVTdGFydE9mZnNl
dCk7IH0KKyAgICBpbmxpbmUgSlNUb2tlblBvc2l0aW9uIG9wZXJhdG9yLShjb25zdCBKU1Rva2Vu
UG9zaXRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAqdGhpcyArICgtIG90aGVyLm9mZnNldCk7
IH0KKyAgICBpbmxpbmUgSlNUb2tlblBvc2l0aW9uIG9wZXJhdG9yLShpbnQgYWRqdXN0bWVudCkg
Y29uc3QgeyByZXR1cm4gKnRoaXMgKyAoLSBhZGp1c3RtZW50KTsgfQorICAgIGlubGluZSBKU1Rv
a2VuUG9zaXRpb24gb3BlcmF0b3ItKHVuc2lnbmVkIGFkanVzdG1lbnQpIGNvbnN0IHsgcmV0dXJu
ICp0aGlzICsgKC0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RtZW50KSk7IH0KKworICAgIG9wZXJh
dG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldDsgfQorCisgICAgaW50IGxpbmU7CisgICAg
aW50IG9mZnNldDsKKyAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0OworfTsKKwogdW5pb24gSlNUb2tl
bkRhdGEgewogICAgIHN0cnVjdCB7CiAgICAgICAgIHVpbnQzMl90IGxpbmU7CkBAIC0xODcsNiAr
MjA2LDggQEAgc3RydWN0IEpTVG9rZW4gewogICAgIEpTVG9rZW5UeXBlIG1fdHlwZTsKICAgICBK
U1Rva2VuRGF0YSBtX2RhdGE7CiAgICAgSlNUb2tlbkxvY2F0aW9uIG1fbG9jYXRpb247CisgICAg
SlNUb2tlblBvc2l0aW9uIG1fc3RhcnRQb3NpdGlvbjsKKyAgICBKU1Rva2VuUG9zaXRpb24gbV9l
bmRQb3NpdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHJldmlzaW9uIDE1MjU4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTksMjEgKzExOSwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIERvbnRCdWlsZFN0cmluZ3MgPSBMZXhlckZsYWdzRG9udEJ1aWxkU3RyaW5nczsKIAogICAg
IGludCBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIDE7IH0KLSAgICBFeHByZXNzaW9u
VHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIENhbGxFeHByOyB9CisgICAgRXhw
cmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIENhbGxFeHByOyB9CiAgICAgdm9pZCBh
cHBlbmRUb0NvbW1hKEV4cHJlc3Npb25UeXBlJiBiYXNlLCBFeHByZXNzaW9uVHlwZSByaWdodCkg
eyBiYXNlID0gcmlnaHQ7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb21tYUV4cHIoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
KSB7IHJldHVybiByaWdodDsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VBc3NpZ25Ob2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgRXhwcmVzc2lv
blR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBBc3Np
Z25tZW50RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VQcmVmaXhOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIFByZUV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBtYWtlUG9z
dGZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9y
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gUG9zdEV4cHI7IH0KKyAgICBFeHBy
ZXNzaW9uVHlwZSBtYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uVHlwZSwgT3BlcmF0b3IsIEV4cHJlc3Npb25UeXBlLCBib29sLCBib29sLCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VQ
cmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRv
ciwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gUHJlRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBl
IG1ha2VQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwg
T3BlcmF0b3IsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFBvc3RFeHByOyB9CiAgICAgRXhwcmVz
c2lvblR5cGUgbWFrZVR5cGVPZk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
blR5cGUpIHsgcmV0dXJuIFR5cGVvZkV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBtYWtlRGVs
ZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIERlbGV0ZUV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlw
ZSBtYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gRGVsZXRlRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBl
IG1ha2VOZWdhdGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7
IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlQml0d2lzZU5vdE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5
RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUxvZ2ljYWxOb3QoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4
cHJlc3Npb25UeXBlIGNyZWF0ZVVuYXJ5UGx1cyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3Jl
YXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4g
VW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgdGhpc0V4cHIoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJikgeyByZXR1cm4gVGhpc0V4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVS
ZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiBSZXNvbHZlRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCkg
eyByZXR1cm4gUmVzb2x2ZUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RM
aXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHBy
OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9CiAgICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVy
biBBcnJheUxpdGVyYWxFeHByOyB9CkBAIC0xNDIsMTMgKzE0MiwxMyBAQCBwdWJsaWM6CiAgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlU3RyaW5nKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0
IElkZW50aWZpZXIqKSB7IHJldHVybiBTdHJpbmdFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUg
Y3JlYXRlQm9vbGVhbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBib29sKSB7IHJldHVybiBCb29s
RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU51bGwoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJikgeyByZXR1cm4gTnVsbEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVCcmFj
a2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNz
aW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEJyYWNrZXRF
eHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRG90QWNjZXNzKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIERvdEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVSZWdFeHAoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYgcGF0dGVy
biwgY29uc3QgSWRlbnRpZmllciYsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFlhcnI6OmNoZWNr
U3ludGF4KHBhdHRlcm4uc3RyaW5nKCkpID8gMCA6IFJlZ0V4cEV4cHI7IH0KLSAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25U
eXBlLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBOZXdFeHByOyB9Cisg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQnJhY2tldEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBpbnQp
IHsgcmV0dXJuIEJyYWNrZXRFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRG90QWNj
ZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBjb25zdCBJZGVudGlm
aWVyKiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gRG90RXhwcjsgfQorICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVy
JiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiwgaW50KSB7IHJldHVybiBZYXJyOjpjaGVja1N5
bnRheChwYXR0ZXJuLnN0cmluZygpKSA/IDAgOiBSZWdFeHBFeHByOyB9CiAgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlw
ZSwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBOZXdFeHByOyB9CisgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlw
ZSwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVDb25kaXRpb25hbEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUs
IEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gQ29uZGl0aW9uYWxFeHBy
OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXNzaWduUmVzb2x2ZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBp
bnQsIGludCwgaW50KSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQorICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRl
bnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBBc3NpZ25t
ZW50RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwgaW50KSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KICAgICBpbnQgY3JlYXRlRnVu
Y3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCwgYm9vbCkgeyByZXR1cm4gMTsgfQogICAgIHZvaWQgc2V0RnVuY3Rpb25TdGFydChpbnQs
IGludCkgeyB9CkBAIC0xODUsMjIgKzE4NSwyMiBAQCBwdWJsaWM6CiAgICAgaW50IGNyZWF0ZUlm
U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCkgeyBy
ZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVJZlN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVh
dGVGb3JMb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50
IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQg
Y3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIq
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0
dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAg
ICAgaW50IGNyZWF0ZUVtcHR5U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0
dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlVmFyU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlUmV0dXJuU3Rh
dGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVCcmVha1N0YXRlbWVudChjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsg
fQotICAgIGludCBjcmVhdGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
LSAgICBpbnQgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlQ29u
dGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllcios
IGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVJl
dHVyblN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUJyZWFrU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCkg
eyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVDb250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVDb250
aW51ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwg
aW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlVHJ5U3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4g
MTsgfQogICAgIGludCBjcmVhdGVXaGlsZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlV2l0aFN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVXaXRoU3RhdGVtZW50
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRG9XaGlsZVN0YXRlbWVudChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3Jl
YXRlTGFiZWxTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmll
ciosIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0
ZVRocm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVMYWJlbFN0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVUaHJvd1N0YXRlbWVudChjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNy
ZWF0ZURlYnVnZ2VyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiAx
OyB9CiAgICAgaW50IGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgYXBwZW5kQ29uc3REZWNsKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgY29uc3QgSWRlbnRpZmllciosIGludCkgeyByZXR1
cm4gMTsgfQpAQCAtMjIyLDcgKzIyMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFZhcihjb25z
dCBJZGVudGlmaWVyKiwgYm9vbCkgeyB9CiAgICAgaW50IGNvbWJpbmVDb21tYU5vZGVzKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGV2YWxD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Np
b25JbmZvKGludCYgb3BlcmFuZFN0YWNrRGVwdGgsIGludCBleHByLCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwgYm9vbCkKKyAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKGludCYg
b3BlcmFuZFN0YWNrRGVwdGgsIGludCBleHByLCBpbnQsIGludCwgaW50LCBib29sKQogICAgIHsK
ICAgICAgICAgaWYgKCFtX3RvcEJpbmFyeUV4cHIpCiAgICAgICAgICAgICBtX3RvcEJpbmFyeUV4
cHIgPSBleHByOwpAQCAtMjQwLDEzICsyNDAsMTIgQEAgcHVibGljOgogICAgIHZvaWQgb3BlcmF0
b3JTdGFja0FwcGVuZChpbnQmIG9wZXJhdG9yU3RhY2tEZXB0aCwgaW50LCBpbnQpIHsgb3BlcmF0
b3JTdGFja0RlcHRoKys7IH0KICAgICBpbnQgcG9wT3BlcmFuZFN0YWNrKGludCYpIHsgaW50IHJl
cyA9IG1fdG9wQmluYXJ5RXhwcjsgbV90b3BCaW5hcnlFeHByID0gMDsgcmV0dXJuIHJlczsgfQog
ICAgIAotICAgIHZvaWQgYXBwZW5kVW5hcnlUb2tlbihpbnQmIHN0YWNrRGVwdGgsIGludCB0b2ss
IGludCwgaW50LCBpbnQpIHsgc3RhY2tEZXB0aCA9IDE7IG1fdG9wVW5hcnlUb2tlbiA9IHRvazsg
fQorICAgIHZvaWQgYXBwZW5kVW5hcnlUb2tlbihpbnQmIHN0YWNrRGVwdGgsIGludCB0b2ssIGlu
dCkgeyBzdGFja0RlcHRoID0gMTsgbV90b3BVbmFyeVRva2VuID0gdG9rOyB9CiAgICAgaW50IHVu
YXJ5VG9rZW5TdGFja0xhc3RUeXBlKGludCYpIHsgcmV0dXJuIG1fdG9wVW5hcnlUb2tlbjsgfQot
ICAgIHVuc2lnbmVkIHVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydChpbnQmKSB7IHJldHVybiAwOyB9
Ci0gICAgdW5zaWduZWQgdW5hcnlUb2tlblN0YWNrTGFzdExpbmVTdGFydFBvc2l0aW9uKGludCYp
IHsgcmV0dXJuIDA7IH0KKyAgICBKU1Rva2VuUG9zaXRpb24gdW5hcnlUb2tlblN0YWNrTGFzdFN0
YXJ0KGludCYpIHsgcmV0dXJuIEpTVG9rZW5Qb3NpdGlvbigwLCAwLCAwKTsgfQogICAgIHZvaWQg
dW5hcnlUb2tlblN0YWNrUmVtb3ZlTGFzdChpbnQmIHN0YWNrRGVwdGgpIHsgc3RhY2tEZXB0aCA9
IDA7IH0KICAgICAKLSAgICB2b2lkIGFzc2lnbm1lbnRTdGFja0FwcGVuZChpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIE9wZXJhdG9yKSB7IH0KKyAgICB2b2lkIGFzc2lnbm1lbnRT
dGFja0FwcGVuZChpbnQsIGludCwgaW50LCBpbnQsIGludCwgT3BlcmF0b3IpIHsgfQogICAgIGlu
dCBjcmVhdGVBc3NpZ25tZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAxOyB9CiAg
ICAgY29uc3QgSWRlbnRpZmllciYgZ2V0TmFtZShjb25zdCBQcm9wZXJ0eSYgcHJvcGVydHkpIGNv
bnN0IHsgQVNTRVJUKHByb3BlcnR5Lm5hbWUpOyByZXR1cm4gKnByb3BlcnR5Lm5hbWU7IH0KICAg
ICBQcm9wZXJ0eU5vZGU6OlR5cGUgZ2V0VHlwZShjb25zdCBQcm9wZXJ0eSYgcHJvcGVydHkpIGNv
bnN0IHsgcmV0dXJuIHByb3BlcnR5LnR5cGU7IH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MjU4MykK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEzLTA3LTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBG
aXggcHJvYmxlbXMgd2l0aCBkaXZvdCBhbmQgbGluZVN0YXJ0IG1pc21hdGNoZXMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2NjIuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lv
biB0ZXN0IGNhc2VzIGZyb20gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExODY2MgorICAgICAgICBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExODY2NC4KKworICAgICAgICAqIGZhc3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6Cisg
ICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvbGluZS1jb2x1bW4tbnVtYmVycy5qczoKKyAg
ICAgICAgKHRyeS50b0Z1enoxKToKKyAgICAgICAgKHRyeS50b0Z1enoyKToKKwogMjAxMy0wNy0x
MSAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2Ug
c2ltcGxlX2JsYW5rLnN3ZiB3aXRoIGxpbmVzLnN3ZiBmb3Igc25hcHNob3R0aW5nIHRlc3RzLgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTI1ODMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2xp
bmUtY29sdW1uLW51bWJlcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5
MywxNCBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAgICAgMiAg
IGV2YWwgYXQgW25hdGl2ZSBjb2RlXQogICAgIDMgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVt
bi1udW1iZXJzLmh0bWw6MTU1OjUKIAorLS0+IENhc2UgMTkgU3RhY2sgVHJhY2U6CisgICAgMCAg
IHRvRnV6ejEgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE2OToyNgorICAgIDEgICBnbG9i
YWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTcyOjEyCisKKy0tPiBDYXNlIDIw
IFN0YWNrIFRyYWNlOgorICAgIDAgICB0b0Z1enoyIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRt
bDoxODM6NDEKKyAgICAxICAgZ2xvYmFsIGNvZGUgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1s
OjE4NzoxMgorCiAtLT4gQ2FzZSAxIFN0YWNrIFRyYWNlOgogICAgIDAgICBnbG9iYWwgY29kZSBh
dCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjM6MjgKIApAQCAtMTgzLDYgKzE5MSwxNCBAQCBPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAgICAgMiAgIGV2YWwgYXQgW25h
dGl2ZSBjb2RlXQogICAgIDMgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpz
Ojk2OjUKIAorLS0+IENhc2UgMTkgU3RhY2sgVHJhY2U6CisgICAgMCAgIHRvRnV6ejEgYXQgbGlu
ZS1jb2x1bW4tbnVtYmVycy5qczoxMDg6MjYKKyAgICAxICAgZ2xvYmFsIGNvZGUgYXQgbGluZS1j
b2x1bW4tbnVtYmVycy5qczoxMTE6MTIKKworLS0+IENhc2UgMjAgU3RhY2sgVHJhY2U6CisgICAg
MCAgIHRvRnV6ejIgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxMjA6NDEKKyAgICAxICAgZ2xv
YmFsIGNvZGUgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxMjQ6MTIKKwogUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbAkocmV2aXNpb24gMTUyNTgzKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTE2MSw2ICsxNjEsMzUgQEAgZXZhbCgiXG4iICsKICIiKTsKIDwvc2NyaXB0PgogCis8
IS0tIENhc2UgMTk6IFJlZ3Jlc3Npb24gdGVzdCBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTg2NjIgLS0+Cis8c2NyaXB0PnRlc3RJZCsrOzwvc2NyaXB0Pgor
PHNjcmlwdD4KK3RyeSB7CisgICAgZnVuY3Rpb24gdG9GdXp6MSgpIHsKKyAgICAgICAgaWYgKFBy
aW9yaXR5UXVldWUucHJvdG90eXBlLmRvU29ydCgpIGluc3RhbmNlb2YgKHRoaXMgXj0gZnVuY3Rp
b24oKSB7CisgICAgICAgIH0pKSByZXR1cm4gMjsgCisgICAgfQorICAgIHRvRnV6ejEoKTsKK30g
Y2F0Y2goZSkgeworICAgIHByaW50U3RhY2soZS5zdGFjayk7Cit9Cis8L3NjcmlwdD4KKworPCEt
LSBDYXNlIDIwOiBSZWdyZXNzaW9uIHRlc3QgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE4NjY0IC0tPgorPHNjcmlwdD50ZXN0SWQrKzs8L3NjcmlwdD4KKzxz
Y3JpcHQ+Cit0cnkgeworICAgIGZ1bmN0aW9uIHRvRnV6ejIoKSB7CisgICAgICAgIGZvciAodmFy
IGNvbmYgPSBuZXcgQ29uZmlnT2JqZWN0KHsKKyAgICAgICAgfSkgaW4gc3RyMS5sb2NhbGVDb21w
YXJlKSB7CisgICAgICAgIH0KKyAgICB9CisgICAgdG9GdXp6MigpOworfSBjYXRjaChlKSB7Cisg
ICAgcHJpbnRTdGFjayhlLnN0YWNrKTsKK30KKzwvc2NyaXB0PgorCiA8IS0tIE5vdyBkbyBpdCBh
bGwgb3ZlciB3aXRoIGEgbG9hZGVkIHNjcmlwdCBmaWxlLiAtLT4KIDxzY3JpcHQ+dGVzdElkID0g
MDs8L3NjcmlwdD4KIAk8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2xpbmUtY29sdW1uLW51bWJl
cnMuanMiPjwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMv
bGluZS1jb2x1bW4tbnVtYmVycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pz
L3NjcmlwdC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpzCShyZXZpc2lvbiAxNTI1ODMpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNCArMTAxLDI5IEBAIGV2YWwoIlxuIiArCiAifVxuIiAr
CiAiIik7CiAKKy8vIENhc2UgMTk6IFJlZ3Jlc3Npb24gdGVzdCBmcm9tIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2NjIKK3Rlc3RJZCsrOwordHJ5IHsKKyAgICBm
dW5jdGlvbiB0b0Z1enoxKCkgeworICAgICAgICBpZiAoUHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUu
ZG9Tb3J0KCkgaW5zdGFuY2VvZiAodGhpcyBePSBmdW5jdGlvbigpIHsKKyAgICAgICAgfSkpIHJl
dHVybiAyOyAKKyAgICB9CisgICAgdG9GdXp6MSgpOworfSBjYXRjaChlKSB7CisgICAgcHJpbnRT
dGFjayhlLnN0YWNrKTsKK30KKworLy8gQ2FzZSAyMDogUmVncmVzc2lvbiB0ZXN0IGZyb20gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODY2NAordGVzdElkKys7Cit0
cnkgeworICAgIGZ1bmN0aW9uIHRvRnV6ejIoKSB7CisgICAgICAgIGZvciAodmFyIGNvbmYgPSBu
ZXcgQ29uZmlnT2JqZWN0KHsKKyAgICAgICAgfSkgaW4gc3RyMS5sb2NhbGVDb21wYXJlKSB7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgdG9GdXp6MigpOworfSBjYXRjaChlKSB7CisgICAgcHJpbnRT
dGFjayhlLnN0YWNrKTsKK30KKwogc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>207283</attachid>
            <date>2013-07-22 14:37:33 -0700</date>
            <delta_ts>2013-07-22 14:37:33 -0700</delta_ts>
            <desc>Perf results of the patch.</desc>
            <filename>perf-results.txt</filename>
            <type>text/plain</type>
            <size>26395</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">R2VuZXJhdGluZyBiZW5jaG1hcmsgcmVwb3J0IGF0IC9Vc2Vycy9tYXJrbGFtL1N1blNwaWRlclY4
U3BpZGVyT2N0YW5lS3Jha2VuSlNCZW5jaEpTUmVncmVzc0RTUF9lb25fMjAxMzA3MjJfMTQzMl9y
ZXBvcnQudHh0CkFuZCByYXcgZGF0YSBhdCAvVXNlcnMvbWFya2xhbS9TdW5TcGlkZXJWOFNwaWRl
ck9jdGFuZUtyYWtlbkpTQmVuY2hKU1JlZ3Jlc3NEU1BfZW9uXzIwMTMwNzIyXzE0MzIuanNvbgoK
QmVuY2htYXJrIHJlcG9ydCBmb3IgU3VuU3BpZGVyLCBWOFNwaWRlciwgT2N0YW5lLCBLcmFrZW4s
IEpTQmVuY2gsIEpTUmVncmVzcywgYW5kIERTUCBvbiBlb24gKE1hY0Jvb2tBaXI1LDEpLgoKVk1z
IHRlc3RlZDoKIkNvbmYjMSIgYXQgL1ZvbHVtZXMvU291cmNlL3dzNS9PcGVuU291cmNlL1dlYktp
dEJ1aWxkL1JlbGVhc2UvRHVtcFJlbmRlclRyZWUgKHIxNTI1ODMpCiJDb25mIzIiIGF0IC9Wb2x1
bWVzL1NvdXJjZS93czUvT3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxlYXNlL0R1bXBSZW5kZXJU
cmVlIChyMTUyNTgzKQoKQ29sbGVjdGVkIDEyIHNhbXBsZXMgcGVyIGJlbmNobWFyay9WTSwgd2l0
aCA0IFZNIGludm9jYXRpb25zIHBlciBiZW5jaG1hcmsuIEVtaXR0ZWQgYSBjYWxsIHRvIGdjKCkg
YmV0d2VlbiBzYW1wbGUKbWVhc3VyZW1lbnRzLiBVc2VkIDEgYmVuY2htYXJrIGl0ZXJhdGlvbiBw
ZXIgVk0gaW52b2NhdGlvbiBmb3Igd2FybS11cC4gVXNlZCB0aGUganNjLXNwZWNpZmljIHByZWNp
c2VUaW1lKCkgZnVuY3Rpb24gdG8gZ2V0Cm1pY3Jvc2Vjb25kLWxldmVsIHRpbWluZy4gUmVwb3J0
aW5nIGJlbmNobWFyayBleGVjdXRpb24gdGltZXMgd2l0aCA5NSUgY29uZmlkZW5jZSBpbnRlcnZh
bHMgaW4gbWlsbGlzZWNvbmRzLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvbmYjMSAgICAgICAgICAgICAgICAgICAgQ29uZiMyICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKU3VuU3BpZGVyOgogICAzZC1jdWJlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjUxNTQrLTAuNDUwOCAgICAg
ICAgICAgIDkuMzU3MistMC4zMzM1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE2OXggZmFzdGVyCiAg
IDNkLW1vcnBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuODIyOCst
MC4wNzcyICAgICA/ICAgICAgOC4yOTA3Ky0wLjgzMzkgICAgICAgID8gbWlnaHQgYmUgMS4wNTk4
eCBzbG93ZXIKICAgM2QtcmF5dHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxMC40NDI3Ky0wLjE2NjIgICAgID8gICAgIDEwLjQ3MjgrLTAuMTkzMCAgICAgICAgPwogICBh
Y2Nlc3MtYmluYXJ5LXRyZWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjMzNzUrLTAu
Mjk1MSAgICAgPyAgICAgIDIuNTI2NSstMC4zMTI4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDgwOHgg
c2xvd2VyCiAgIGFjY2Vzcy1mYW5ua3VjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDYuOTczNSstMC4wOTE2ICAgICA/ICAgICAgNy4zNTY0Ky0wLjU3OTIgICAgICAgID8gbWlnaHQg
YmUgMS4wNTQ5eCBzbG93ZXIKICAgYWNjZXNzLW5ib2R5ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNC4xMjMwKy0wLjA1NTAgICAgICAgICAgICA0LjExMjIrLTAuMDM3MyAgICAg
ICAgCiAgIGFjY2Vzcy1uc2lldmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQu
Mjc4MSstMC4wNTUwICAgICAgICAgICAgNC4yNjcxKy0wLjA1ODUgICAgICAgIAogICBiaXRvcHMt
M2JpdC1iaXRzLWluLWJ5dGUgICAgICAgICAgICAgICAgICAgICAgICAyLjAwMTcrLTAuMDc1OCAg
ICAgICAgICAgIDEuOTQ0NistMC4wMjIyICAgICAgICAgIG1pZ2h0IGJlIDEuMDI5NHggZmFzdGVy
CiAgIGJpdG9wcy1iaXRzLWluLWJ5dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNzIw
MystMC4wNTU0ICAgICA/ICAgICAgMi43NTAzKy0wLjA2OTYgICAgICAgID8gbWlnaHQgYmUgMS4w
MTEweCBzbG93ZXIKICAgYml0b3BzLWJpdHdpc2UtYW5kICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMi41NjQ2Ky0wLjAzMzIgICAgICAgICAgICAyLjU0NDMrLTAuMDE4NSAgICAgICAgCiAg
IGJpdG9wcy1uc2lldmUtYml0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMjkzMyst
MC4wODM0ICAgICAgICAgICAgNC4yNTgyKy0wLjAzNDUgICAgICAgIAogICBjb250cm9sZmxvdy1y
ZWN1cnNpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjc0MzMrLTAuMjM4MyAgICAgICAg
ICAgIDIuNTI2MCstMC4wMTM4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDg2MHggZmFzdGVyCiAgIGNy
eXB0by1hZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNzIyNCstMC4y
ODA2ICAgICA/ICAgICAgNy44MDYzKy0wLjQwODEgICAgICAgID8gbWlnaHQgYmUgMS4wMTA5eCBz
bG93ZXIKICAgY3J5cHRvLW1kNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NC4xNzI4Ky0wLjA3MTcgICAgICAgICAgICA0LjEwODMrLTAuMTAxMiAgICAgICAgICBtaWdodCBi
ZSAxLjAxNTd4IGZhc3RlcgogICBjcnlwdG8tc2hhMSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAzLjMxNTQrLTAuMDM2MyAgICAgPyAgICAgIDMuNTYxNCstMC4yODAwICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDc0Mnggc2xvd2VyCiAgIGRhdGUtZm9ybWF0LXRvZnRlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTIuNDExNistMC43NjY5ICAgICA/ICAgICAxMi41NzcwKy0w
Ljc1NzggICAgICAgID8gbWlnaHQgYmUgMS4wMTMzeCBzbG93ZXIKICAgZGF0ZS1mb3JtYXQteHBh
cmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOS43MjQzKy0wLjUxNzQgICAgID8gICAg
ICA5Ljg0MDArLTAuNjcyNiAgICAgICAgPyBtaWdodCBiZSAxLjAxMTl4IHNsb3dlcgogICBtYXRo
LWNvcmRpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjg4MTgrLTAuMDQ1
NSAgICAgPyAgICAgIDMuODk1MSstMC4wNTYxICAgICAgICA/CiAgIG1hdGgtcGFydGlhbC1zdW1z
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguODQyOCstMC4xNzQ5ICAgICAgICAgICAg
OC42Nzk0Ky0wLjA0MzEgICAgICAgICAgbWlnaHQgYmUgMS4wMTg4eCBmYXN0ZXIKICAgbWF0aC1z
cGVjdHJhbC1ub3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi43Nzk5Ky0wLjAxOTcg
ICAgID8gICAgICAyLjc4MjMrLTAuMDIyMyAgICAgICAgPwogICByZWdleHAtZG5hICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLjc3MTcrLTAuNTA1MiAgICAgICAgICAgMTAu
NjUzMistMC40MDIyICAgICAgICAgIG1pZ2h0IGJlIDEuMDExMXggZmFzdGVyCiAgIHN0cmluZy1i
YXNlNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuMjI0MystMC40NTczICAg
ICA/ICAgICAgNS40NjUzKy0wLjY3ODggICAgICAgID8gbWlnaHQgYmUgMS4wNDYxeCBzbG93ZXIK
ICAgc3RyaW5nLWZhc3RhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC41MzQ0
Ky0wLjQyOTIgICAgID8gICAgIDEwLjY3MjYrLTAuNjExMCAgICAgICAgPyBtaWdodCBiZSAxLjAx
MzF4IHNsb3dlcgogICBzdHJpbmctdGFnY2xvdWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEyLjU2MzQrLTAuMjI4NCAgICAgPyAgICAgMTIuNjI5MistMC4yMzc1ICAgICAgICA/CiAg
IHN0cmluZy11bnBhY2stY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcuNzMyMSst
MC4yODUxICAgICA/ICAgICAyOC44MzEyKy0yLjMxODkgICAgICAgID8gbWlnaHQgYmUgMS4wMzk2
eCBzbG93ZXIKICAgc3RyaW5nLXZhbGlkYXRlLWlucHV0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOC4yODAwKy0wLjE5MjcgICAgID8gICAgICA4LjM3ODYrLTAuMjI5NiAgICAgICAgPyBtaWdo
dCBiZSAxLjAxMTl4IHNsb3dlcgoKICAgPGFyaXRobWV0aWM+ICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNy4yMjIwKy0wLjEzOTEgICAgID8gICAgICA3LjMxODcrLTAuMjEzNyAg
ICAgICAgPyBtaWdodCBiZSAxLjAxMzR4IHNsb3dlcgogICA8Z2VvbWV0cmljPiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA1LjgxMDQrLTAuMTA5OCAgICAgPyAgICAgIDUuODU2
NystMC4xMjUxICAgICAgICA/IG1pZ2h0IGJlIDEuMDA4MHggc2xvd2VyCiAgIDxoYXJtb25pYz4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNzY2MistMC4wOTgzICAgICA/
ICAgICAgNC43ODYxKy0wLjA4NTIgICAgICAgID8gbWlnaHQgYmUgMS4wMDQyeCBzbG93ZXIKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25m
IzEgICAgICAgICAgICAgICAgICAgIENvbmYjMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgClY4U3BpZGVyOgogICBjcnlwdG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDc2Ljk4NDErLTIuNzQ4NSAgICAgICAgICAgNzUuMTE4NystMC42MjE2ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDI0OHggZmFzdGVyCiAgIGRlbHRhYmx1ZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxMTUuODc3NSstNy40MDQ2ICAgICAgICAgIDExMi45MzU2
Ky0yLjY4MzYgICAgICAgICAgbWlnaHQgYmUgMS4wMjYweCBmYXN0ZXIKICAgZWFybGV5LWJveWVy
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ni4yMTI0Ky0xLjEwOTIgICAgICAg
ICAgIDY1LjU4NzgrLTAuNzI1MSAgICAgICAgCiAgIHJheXRyYWNlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNTYuMTcwMystMS4yMDIxICAgICA/ICAgICA1Ni4yNDg1Ky0x
LjY3MjcgICAgICAgID8KICAgcmVnZXhwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA4OC4wODMzKy0wLjU2MDggICAgID8gICAgIDg5LjI0ODcrLTEuMjc1NCAgICAgICAg
PyBtaWdodCBiZSAxLjAxMzJ4IHNsb3dlcgogICByaWNoYXJkcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDk4Ljk0NjIrLTEuMTgxMyAgICAgPyAgICAxMDAuMTYwMistMi4y
MDY0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyM3ggc2xvd2VyCiAgIHNwbGF5ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTYuNzM4NCstNC4yMDA0ICAgICAgICAgICA1
NS45MTExKy0yLjIxOTcgICAgICAgICAgbWlnaHQgYmUgMS4wMTQ4eCBmYXN0ZXIKCiAgIDxhcml0
aG1ldGljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzkuODU4OSstMS4xNDE5
ICAgICAgICAgICA3OS4zMTU4Ky0wLjcxNzIgICAgICAgICAgbWlnaHQgYmUgMS4wMDY4eCBmYXN0
ZXIKICAgPGdlb21ldHJpYz4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ny4x
MjYxKy0wLjk1MDMgICAgICAgICAgIDc2LjY4MDMrLTAuNzcyOSAgICAgICAgICBtaWdodCBiZSAx
LjAwNTh4IGZhc3RlcgogICA8aGFybW9uaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDc0LjU2MDErLTAuOTgyMiAgICAgICAgICAgNzQuMTgwMCstMC44Njg2ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDA1MXggZmFzdGVyCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29uZiMxICAgICAgICAgICAgICAgICAgICBDb25mIzIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApPY3RhbmUgYW5kIFY4djc6CiAg
IGVuY3J5cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC40MDAzNSst
MC4wMDI0OCAgICA/ICAgICAwLjQwMjY0Ky0wLjAwNTM0ICAgICAgID8KICAgZGVjcnlwdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ljg5ODE4Ky0wLjU1MTI2ICAgICAg
ICAgIDcuNjU5NDMrLTAuNTA5NTEgICAgICAgICBtaWdodCBiZSAxLjAzMTJ4IGZhc3RlcgogICBk
ZWx0YWJsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgIDAuNTMwNzcrLTAu
MDIyNDggICAgPyAgICAgMC41NDIzOCstMC4wMzc2OSAgICAgICA/IG1pZ2h0IGJlIDEuMDIxOXgg
c2xvd2VyCiAgIGVhcmxleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MC43MjIyOCstMC4wMDY5OSAgICAgICAgICAwLjcxMTIwKy0wLjAwNDk2ICAgICAgICAgbWlnaHQg
YmUgMS4wMTU2eCBmYXN0ZXIKICAgYm95ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA5LjM2OTExKy0wLjE1ODgzICAgICAgICAgIDkuMzM1NzIrLTAuMDU5NzcgICAg
ICAgCiAgIHJheXRyYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgICAgNC4y
MDkzOSstMC4wODU3OCAgICAgICAgICA0LjE1ODY0Ky0wLjAyMzk5ICAgICAgICAgbWlnaHQgYmUg
MS4wMTIyeCBmYXN0ZXIKICAgcmVnZXhwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
MiAgICAgIDI5LjE0MzEzKy0wLjIzNzYwICAgID8gICAgMjkuMjI4NTkrLTAuMTg4MTcgICAgICAg
PwogICByaWNoYXJkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgIDAuMjUy
MzMrLTAuMDAxMTggICAgPyAgICAgMC4yNTc3OCstMC4wMDgzMSAgICAgICA/IG1pZ2h0IGJlIDEu
MDIxNnggc2xvd2VyCiAgIHNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIg
ICAgICAgMC42MjExMCstMC4wMDg3NSAgICA/ICAgICAwLjYyODMwKy0wLjAxOTcyICAgICAgID8g
bWlnaHQgYmUgMS4wMTE2eCBzbG93ZXIKICAgbmF2aWVyLXN0b2tlcyAgICAgICAgICAgICAgICAg
ICAgICAgICB4MiAgICAgICA5LjkwMDIyKy0wLjA1ODI4ICAgID8gICAgIDkuOTIwMTkrLTAuMDUy
MzQgICAgICAgPwogICBjbG9zdXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAuMzMyNDkrLTAuMDA4NDMgICAgICAgICAgMC4zMzA1NSstMC4wMDcxMCAgICAgICAKICAg
anF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjEyMjgxKy0w
LjUyNjEzICAgICAgICAgIDQuMTA2MTArLTAuNTIwNTIgICAgICAgCiAgIGdiZW11ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgIDEyOC4wMjQ2NCstOC4wMzM3NSAgICA/ICAg
MTMxLjI2Mjk4Ky05LjczNDU4ICAgICAgID8gbWlnaHQgYmUgMS4wMjUzeCBzbG93ZXIKICAgbWFu
ZHJlZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgMTYxLjIxMjk3Ky0xLjAw
MjUxICAgID8gICAxNjEuOTEwOTArLTAuOTU4ODAgICAgICAgPwogICBwZGZqcyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgODkuMTg1MDIrLTAuNzc0MTEgICAgICAgICA4
OC44NjcyNCstMS4wNjI3MiAgICAgICAKICAgYm94MmQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4MiAgICAgIDMxLjAxMjkwKy0wLjQ5NTIwICAgID8gICAgMzEuNTAzNTgrLTEuMjc3
NTcgICAgICAgPyBtaWdodCBiZSAxLjAxNTh4IHNsb3dlcgoKVjh2NzoKICAgPGFyaXRobWV0aWM+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LjczMTQ5Ky0wLjA1ODExICAgICAg
ICAgIDYuNzIzODArLTAuMDI3MjQgICAgICAgICBtaWdodCBiZSAxLjAwMTF4IGZhc3RlcgogICA8
Z2VvbWV0cmljPiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMTU0OTYrLTAu
MDE5MjcgICAgPyAgICAgMi4xNjA3NSstMC4wMjEzMiAgICAgICA/IG1pZ2h0IGJlIDEuMDAyN3gg
c2xvd2VyCiAgIDxoYXJtb25pYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MC44MDg0NystMC4wMDY4NiAgICA/ICAgICAwLjgxODA1Ky0wLjAxMDg1ICAgICAgID8gbWlnaHQg
YmUgMS4wMTE5eCBzbG93ZXIKCk9jdGFuZSBpbmNsdWRpbmcgVjh2NzoKICAgPGFyaXRobWV0aWM+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1LjgwODg1Ky0wLjU0OTg4ICAgID8g
ICAgMzYuMTE5NDkrLTAuNzUzMTggICAgICAgPyBtaWdodCBiZSAxLjAwODd4IHNsb3dlcgogICA8
Z2VvbWV0cmljPiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuNDA2OTkrLTAu
MDQyODMgICAgPyAgICAgNi40MzQyOCstMC4wNTkxMCAgICAgICA/IG1pZ2h0IGJlIDEuMDA0M3gg
c2xvd2VyCiAgIDxoYXJtb25pYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MS4xMjIxOCstMC4wMDgzNCAgICA/ICAgICAxLjEzMjgyKy0wLjAxNTQ2ICAgICAgID8gbWlnaHQg
YmUgMS4wMDk1eCBzbG93ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb25mIzEgICAgICAgICAgICAgICAgICAgIENvbmYjMiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCktyYWtlbjoKICAgYWktYXN0YXIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjguMjgwKy0xLjA5MSAgICAgID8gICAg
IDMzOC42NDcrLTE0LjIzMSAgICAgICAgPyBtaWdodCBiZSAxLjAzMTZ4IHNsb3dlcgogICBhdWRp
by1iZWF0LWRldGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOS4xMDUrLTguNTUy
ICAgICAgPyAgICAgMjIwLjQ2NistMTIuNDY5ICAgICAgICA/CiAgIGF1ZGlvLWRmdCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU2LjM3MistNS44MjYgICAgICA/ICAgICAz
NTcuOTE2Ky01LjIwNCAgICAgICAgID8KICAgYXVkaW8tZmZ0ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxMjMuOTEzKy0xLjk1OCAgICAgICAgICAgIDEyMy41NzkrLTIuMDIy
ICAgICAgICAgCiAgIGF1ZGlvLW9zY2lsbGF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMjI4Ljk2OSstMTEuNzcwICAgICAgICAgICAyMjAuMjEwKy0yLjI5NiAgICAgICAgICAgbWln
aHQgYmUgMS4wMzk4eCBmYXN0ZXIKICAgaW1hZ2luZy1kYXJrcm9vbSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyNjguNzg1Ky0yLjI2OCAgICAgID8gICAgIDI3MS41MDcrLTQuMjE1ICAg
ICAgICAgPyBtaWdodCBiZSAxLjAxMDF4IHNsb3dlcgogICBpbWFnaW5nLWRlc2F0dXJhdGUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEyOS40OTArLTMuMjU1ICAgICAgICAgICAgMTI3LjY3
MCstMS44NTMgICAgICAgICAgIG1pZ2h0IGJlIDEuMDE0M3ggZmFzdGVyCiAgIGltYWdpbmctZ2F1
c3NpYW4tYmx1ciAgICAgICAgICAgICAgICAgICAgICAgICAgNDYyLjI2OCstNDguMDU4ICAgICAg
ICAgICA0MjMuMzM1Ky0yLjE2NCAgICAgICAgICAgbWlnaHQgYmUgMS4wOTIweCBmYXN0ZXIKICAg
anNvbi1wYXJzZS1maW5hbmNpYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjMuNjU4Ky0x
LjEzOSAgICAgID8gICAgICA2My43MzcrLTAuODQ1ICAgICAgICAgPwogICBqc29uLXN0cmluZ2lm
eS10aW5kZXJib3ggICAgICAgICAgICAgICAgICAgICAgICA4OS45MjUrLTEuNTA1ICAgICAgPyAg
ICAgIDkxLjA5NSstMi4wMTcgICAgICAgICA/IG1pZ2h0IGJlIDEuMDEzMHggc2xvd2VyCiAgIHN0
YW5mb3JkLWNyeXB0by1hZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5LjUzOCstMS4z
ODMgICAgICA/ICAgICAxMDIuMTQzKy01LjMwMiAgICAgICAgID8gbWlnaHQgYmUgMS4wMjYyeCBz
bG93ZXIKICAgc3RhbmZvcmQtY3J5cHRvLWNjbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
MDIuMjU3Ky0zLjE2MCAgICAgICAgICAgIDEwMS41NDcrLTEuMjA2ICAgICAgICAgCiAgIHN0YW5m
b3JkLWNyeXB0by1wYmtkZjIgICAgICAgICAgICAgICAgICAgICAgICAgMjI2LjQ0NCstOC40NzUg
ICAgICA/ICAgICAyMjYuNjc0Ky02LjIyNCAgICAgICAgID8KICAgc3RhbmZvcmQtY3J5cHRvLXNo
YTI1Ni1pdGVyYXRpdmUgICAgICAgICAgICAgICAxMTEuMDg3Ky0xLjY3NCAgICAgID8gICAgIDEx
MS4zMzIrLTIuNzA2ICAgICAgICAgPwoKICAgPGFyaXRobWV0aWM+ICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyMDAuNzIxKy0zLjUwMyAgICAgICAgICAgIDE5OC41NjErLTEuNTU0
ICAgICAgICAgICBtaWdodCBiZSAxLjAxMDl4IGZhc3RlcgogICA8Z2VvbWV0cmljPiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OS45OTIrLTEuNDQzICAgICAgICAgICAgMTY5
LjQxOCstMS4yMDYgICAgICAgICAgIG1pZ2h0IGJlIDEuMDAzNHggZmFzdGVyCiAgIDxoYXJtb25p
Yz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ0LjgwMSstMC43MzggICAg
ICA/ICAgICAxNDQuODk2Ky0xLjA4MSAgICAgICAgID8gbWlnaHQgYmUgMS4wMDA3eCBzbG93ZXIK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b25mIzEgICAgICAgICAgICAgICAgICAgIENvbmYjMiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCkpTQmVuY2g6CiAgIGFtYXpvbiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDYuOTE2NystMC4xODM0ICAgICAgICAgICAgNi43NTAwKy0wLjI4NzQg
ICAgICAgICAgbWlnaHQgYmUgMS4wMjQ3eCBmYXN0ZXIKICAgZmFjZWJvb2sgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAzNS4wMDAwKy0xLjY3MDEgICAgID8gICAgIDM1LjE2
NjcrLTIuNTUzNSAgICAgICAgPwogICBnb29nbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDcxLjkxNjcrLTEuODg1OSAgICAgICAgICAgNzAuNzUwMCstMi42ODM3ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDE2NXggZmFzdGVyCiAgIHR3aXR0ZXIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDguOTE2NystMC4zMjcyICAgICAgICAgICAgOC42NjY3
Ky0wLjMxMjggICAgICAgICAgbWlnaHQgYmUgMS4wMjg4eCBmYXN0ZXIKICAgeWFob28gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy40MTY3Ky0wLjMyNzIgICAgICAg
ICAgICAzLjI1MDArLTAuMjg3NCAgICAgICAgICBtaWdodCBiZSAxLjA1MTN4IGZhc3RlcgoKICAg
PGFyaXRobWV0aWM+ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNS4yMzMzKy0w
LjQ1MjggICAgICAgICAgIDI0LjkxNjcrLTAuNjI2MCAgICAgICAgICBtaWdodCBiZSAxLjAxMjd4
IGZhc3RlcgogICA8Z2VvbWV0cmljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEzLjkyNTYrLTAuMzI2NCAgICAgICAgICAgMTMuNjA0NistMC4zNDc2ICAgICAgICAgIG1pZ2h0
IGJlIDEuMDIzNnggZmFzdGVyCiAgIDxoYXJtb25pYz4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDguMzkyNSstMC4zODgyICAgICAgICAgICAgOC4xMDc5Ky0wLjQwMzQgICAg
ICAgICAgbWlnaHQgYmUgMS4wMzUxeCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25mIzEgICAgICAgICAgICAgICAgICAgIENv
bmYjMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkpTUmVncmVzczoKICAg
YWRhcHQtdG8tZG91YmxlLWRpdmlkZSAgICAgICAgICAgICAgICAgICAgICAgICAyNC41MDI2Ky0w
LjYyMDEgICAgICAgICAgIDI0LjQzNTIrLTAuMTczMCAgICAgICAgCiAgIGFsaWFzZWQtYXJndW1l
bnRzLWdldGJ5dmFsICAgICAgICAgICAgICAgICAgICAgIDAuOTg3MistMC4wMTY5ICAgICAgICAg
ICAgMC45ODcwKy0wLjAxNjMgICAgICAgIAogICBhbGxvY2F0ZS1iaWctb2JqZWN0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzLjA5ODYrLTAuOTMyOSAgICAgPyAgICAgIDMuNTM4NSstMS4w
NjEzICAgICAgICA/IG1pZ2h0IGJlIDEuMTQyMHggc2xvd2VyCiAgIGFyaXR5LW1pc21hdGNoLWlu
bGluaW5nICAgICAgICAgICAgICAgICAgICAgICAgIDAuODAyNystMC4wMDkzICAgICA/ICAgICAg
MC44MDk2Ky0wLjAyMTQgICAgICAgID8KICAgYXJyYXktYWNjZXNzLXBvbHltb3JwaGljLXN0cnVj
dHVyZSAgICAgICAgICAgICAgNi42NzI2Ky0xLjM1NjQgICAgID8gICAgICA3LjE5NjErLTEuNjE0
MSAgICAgICAgPyBtaWdodCBiZSAxLjA3ODR4IHNsb3dlcgogICBhcnJheS1ub25hcnJheS1wb2x5
bW9yaHBpYy1hY2Nlc3MgICAgICAgICAgICAgIDQ5LjcwMTYrLTAuNDgzNCAgICAgPyAgICAgNTAu
NzAxMistMS42MDAzICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwMXggc2xvd2VyCiAgIGFycmF5LXdp
dGgtZG91YmxlLWFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuMDU5NCstMC4wNjc5ICAg
ICA/ICAgICAgNS4wNzA5Ky0wLjA2NTYgICAgICAgID8KICAgYXJyYXktd2l0aC1kb3VibGUtaW5j
cmVtZW50ICAgICAgICAgICAgICAgICAgICAgMy45NjQzKy0wLjExMjUgICAgID8gICAgICAzLjk5
MTErLTAuMTE1OSAgICAgICAgPwogICBhcnJheS13aXRoLWRvdWJsZS1tdWwtYWRkICAgICAgICAg
ICAgICAgICAgICAgICA1LjgxNjArLTAuMDY0MiAgICAgPyAgICAgIDYuMDA2MCstMC4yMTkxICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDMyN3ggc2xvd2VyCiAgIGFycmF5LXdpdGgtZG91YmxlLXN1bSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDUuMzA0MSstMC4wNTU3ICAgICAgICAgICAgNS4yNzIz
Ky0wLjAzODIgICAgICAgIAogICBhcnJheS13aXRoLWludDMyLWFkZC1zdWIgICAgICAgICAgICAg
ICAgICAgICAgICA4LjEyNjIrLTAuMTA5MSAgICAgICAgICAgIDguMTA3NCstMC4wODAxICAgICAg
ICAKICAgYXJyYXktd2l0aC1pbnQzMi1vci1kb3VibGUtc3VtICAgICAgICAgICAgICAgICAgNS4z
ODg4Ky0wLjA4MzcgICAgID8gICAgICA1LjQxOTIrLTAuMDc1NyAgICAgICAgPwogICBiaWctaW50
LW11bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjY5NzcrLTAuMDQ1NSAg
ICAgPyAgICAgIDUuMDA1OCstMC40ODM0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDY1Nnggc2xvd2Vy
CiAgIGJvb2xlYW4tdGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuOTkw
MistMC4xNDM5ICAgICA/ICAgICAgNC4wMDU1Ky0wLjE2MjIgICAgICAgID8KICAgYnJhbmNoLWZv
bGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC44NTAwKy0wLjA0NTEgICAg
ICAgICAgICA0LjgwOTkrLTAuMDMxNyAgICAgICAgCiAgIGNhc3QtaW50LXRvLWRvdWJsZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMTMuMjYxNistMC4xNDQ2ICAgICAgICAgICAxMy4yMjcw
Ky0wLjA1MzcgICAgICAgIAogICBjZWxsLWFyZ3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDE0LjI1NDgrLTAuMDkxMSAgICAgICAgICAgMTQuMjA2NCstMC4xMjUzICAgICAg
ICAKICAgY2ZnLXNpbXBsaWZ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy42
NDQxKy0wLjQxMzQgICAgICAgICAgICAzLjM5NzYrLTAuMDM0MyAgICAgICAgICBtaWdodCBiZSAx
LjA3MjZ4IGZhc3RlcgogICBjbXBlcS1vYmotdG8tb2JqLW90aGVyICAgICAgICAgICAgICAgICAg
ICAgICAgIDEwLjgyNzUrLTAuMTQ3MiAgICAgPyAgICAgMTAuOTg5MSstMC40OTgzICAgICAgICA/
IG1pZ2h0IGJlIDEuMDE0OXggc2xvd2VyCiAgIGNvbnN0YW50LXRlc3QgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDYuMDU3NCstMC4wNDk2ICAgICAgICAgICAgNi4wNDc1Ky0wLjA2
NjQgICAgICAgIAogICBkaXJlY3QtYXJndW1lbnRzLWdldGJ5dmFsICAgICAgICAgICAgICAgICAg
ICAgICAwLjkwMzYrLTAuMDIxNSAgICAgPyAgICAgIDAuOTE2NystMC4wMzE2ICAgICAgICA/IG1p
Z2h0IGJlIDEuMDE0NXggc2xvd2VyCiAgIGRvdWJsZS1wb2xsdXRpb24tZ2V0Ynl2YWwgICAgICAg
ICAgICAgICAgICAgICAgMTEuNDY4MCstMC4wNzk4ICAgICA/ICAgICAxMS40ODIxKy0wLjEwMjkg
ICAgICAgID8KICAgZG91YmxlLXBvbGx1dGlvbi1wdXRieW9mZnNldCAgICAgICAgICAgICAgICAg
ICAgNS4wOTU5Ky0wLjYyNzAgICAgICAgICAgICA0LjkwNzMrLTAuNDk3MCAgICAgICAgICBtaWdo
dCBiZSAxLjAzODR4IGZhc3RlcgogICBlbXB0eS1zdHJpbmctcGx1cy1pbnQgICAgICAgICAgICAg
ICAgICAgICAgICAgIDExLjg3NjYrLTAuMzA3MyAgICAgICAgICAgMTEuNzQ5OSstMC4xNzAzICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDEwOHggZmFzdGVyCiAgIGV4dGVybmFsLWFyZ3VtZW50cy1nZXRi
eXZhbCAgICAgICAgICAgICAgICAgICAgIDIuNDg4MCstMC4xMTExICAgICA/ICAgICAgMi40OTIy
Ky0wLjE1MDAgICAgICAgID8KICAgZXh0ZXJuYWwtYXJndW1lbnRzLXB1dGJ5dmFsICAgICAgICAg
ICAgICAgICAgICAgNC4wMTQzKy0wLjI2NzkgICAgICAgICAgICAzLjg4NjUrLTAuMjMxOSAgICAg
ICAgICBtaWdodCBiZSAxLjAzMjl4IGZhc3RlcgogICBGbG9hdDMyQXJyYXktbWF0cml4LW11bHQg
ICAgICAgICAgICAgICAgICAgICAgIDE0Ljk1NjYrLTAuNjgyNiAgICAgICAgICAgMTQuODk4NCst
MC43NDE1ICAgICAgICAKICAgZm9sZC1kb3VibGUtdG8taW50ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxOC4wOTg2Ky0wLjI1ODQgICAgICAgICAgIDE3Ljk4NjQrLTAuMDg2NCAgICAgICAg
CiAgIGZ1bmN0aW9uLWRvdC1hcHBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMDQy
NCstMC4xMDM1ICAgICAgICAgICAgMi45ODc4Ky0wLjAzMjAgICAgICAgICAgbWlnaHQgYmUgMS4w
MTgzeCBmYXN0ZXIKICAgZnVuY3Rpb24tdGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNC4xOTc5Ky0wLjA4NTggICAgICAgICAgICA0LjE4NzUrLTAuMDg3NCAgICAgICAgCiAg
IGdldC1ieS1pZC1jaGFpbi1mcm9tLXRyeS1ibG9jayAgICAgICAgICAgICAgICAgIDUuOTYxNist
MC4xMzA0ICAgICA/ICAgICAgNi4yMTM0Ky0wLjY1MjIgICAgICAgID8gbWlnaHQgYmUgMS4wNDIy
eCBzbG93ZXIKICAgSGFzaE1hcC1wdXQtZ2V0LWl0ZXJhdGUta2V5cyAgICAgICAgICAgICAgICAg
ICA1NC40MDcyKy0wLjU5NjQgICAgID8gICAgIDU0LjkzNzIrLTEuNDU5MiAgICAgICAgPwogICBI
YXNoTWFwLXB1dC1nZXQtaXRlcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgIDYyLjEwMDcrLTEu
NTY2NiAgICAgPyAgICAgNjIuMTk2NystMS4zMDEyICAgICAgICA/CiAgIEhhc2hNYXAtc3RyaW5n
LXB1dC1nZXQtaXRlcmF0ZSAgICAgICAgICAgICAgICAgNjMuMTU0NistMC40Mzk0ICAgICA/ICAg
ICA2NC4yODcxKy0yLjQxNjcgICAgICAgID8gbWlnaHQgYmUgMS4wMTc5eCBzbG93ZXIKICAgaW11
bC1kb3VibGUtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNC41Mjg4Ky0wLjA1
MzQgICAgID8gICAgIDE0LjY3NTYrLTAuMTU4NiAgICAgICAgPyBtaWdodCBiZSAxLjAxMDF4IHNs
b3dlcgogICBpbXVsLWludC1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0
Ljg2OTArLTAuMjQyOCAgICAgPyAgICAgMTUuMTM0NSstMC44MTM2ICAgICAgICA/IG1pZ2h0IGJl
IDEuMDE3OXggc2xvd2VyCiAgIGltdWwtbWl4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTguOTg2OCstMC42MDM4ICAgICAgICAgICAxOC41MzI4Ky0wLjA5MzkgICAgICAg
ICAgbWlnaHQgYmUgMS4wMjQ1eCBmYXN0ZXIKICAgaW5kZXhlZC1wcm9wZXJ0aWVzLWluLW9iamVj
dHMgICAgICAgICAgICAgICAgICAgMy45MjU0Ky0wLjA0NDMgICAgID8gICAgICAzLjk2MDQrLTAu
MDQ5MSAgICAgICAgPwogICBpbmxpbmUtYXJndW1lbnRzLWFjY2VzcyAgICAgICAgICAgICAgICAg
ICAgICAgICAxLjI0NTErLTAuMDIzNiAgICAgPyAgICAgIDEuMjgyNSstMC4wNzgxICAgICAgICA/
IG1pZ2h0IGJlIDEuMDMwMXggc2xvd2VyCiAgIGlubGluZS1hcmd1bWVudHMtbG9jYWwtZXNjYXBl
ICAgICAgICAgICAgICAgICAgMjEuOTYzMystMC4xNTQ2ICAgICA/ICAgICAyMi4wMTAxKy0wLjE2
ODQgICAgICAgID8KICAgaW5saW5lLWdldC1zY29wZWQtdmFyICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNi4xNDk4Ky0wLjI5ODcgICAgICAgICAgICA2LjAxNjYrLTAuMTE2MSAgICAgICAgICBt
aWdodCBiZSAxLjAyMjF4IGZhc3RlcgogICBpbmxpbmVkLXB1dC1ieS1pZC10cmFuc2l0aW9uICAg
ICAgICAgICAgICAgICAgIDExLjY4OTYrLTAuMTI2NSAgICAgPyAgICAgMTEuNzI1NCstMC4wOTYz
ICAgICAgICA/CiAgIGludC1vci1vdGhlci1hYnMtdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAg
ICAgIDguMDMwOSstMC4xMDc2ICAgICAgICAgICAgNy45ODk2Ky0wLjA4NzIgICAgICAgIAogICBp
bnQtb3Itb3RoZXItYWJzLXplcm8tdGhlbi1nZXQtYnktdmFsICAgICAgICAgIDI5LjMzOTErLTAu
MjM4MiAgICAgICAgICAgMjkuMjU5OCstMC4wODAzICAgICAgICAKICAgaW50LW9yLW90aGVyLWFk
ZC10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAgICAxMC4zMzMzKy0wLjQxMDAgICAgICAgICAg
IDEwLjEzMzQrLTAuMTA1MiAgICAgICAgICBtaWdodCBiZSAxLjAxOTd4IGZhc3RlcgogICBpbnQt
b3Itb3RoZXItYWRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjA2NzQrLTAuMDgy
NSAgICAgPyAgICAgIDkuMDk1OCstMC4wODUzICAgICAgICA/CiAgIGludC1vci1vdGhlci1kaXYt
dGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgIDcuMTMzNSstMC4zMjIwICAgICAgICAgICAg
Ni44ODU3Ky0wLjA1ODQgICAgICAgICAgbWlnaHQgYmUgMS4wMzYweCBmYXN0ZXIKICAgaW50LW9y
LW90aGVyLW1heC10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAgICAgOC4yOTQwKy0wLjA1MzIg
ICAgID8gICAgICA4LjMwMDkrLTAuMDU4NCAgICAgICAgPwogICBpbnQtb3Itb3RoZXItbWluLXRo
ZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICA4LjQxNjArLTAuNDMyMCAgICAgICAgICAgIDgu
MjM0MystMC4wODA4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIyMXggZmFzdGVyCiAgIGludC1vci1v
dGhlci1tb2QtdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgIDYuMzcxNystMC4wMzAxICAg
ICA/ICAgICAgNi43NDQyKy0wLjUwNTEgICAgICAgID8gbWlnaHQgYmUgMS4wNTg1eCBzbG93ZXIK
ICAgaW50LW9yLW90aGVyLW11bC10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAgICAgNi45MzU3
Ky0wLjA0NjEgICAgID8gICAgICA3LjAzOTArLTAuMTg5MiAgICAgICAgPyBtaWdodCBiZSAxLjAx
NDl4IHNsb3dlcgogICBpbnQtb3Itb3RoZXItbmVnLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAg
ICAgICA3LjMwMjYrLTAuMjQ5NSAgICAgICAgICAgIDcuMTg1NystMC4wNzMwICAgICAgICAgIG1p
Z2h0IGJlIDEuMDE2M3ggZmFzdGVyCiAgIGludC1vci1vdGhlci1uZWctemVyby10aGVuLWdldC1i
eS12YWwgICAgICAgICAgMjguNjI5OSstMC4zMTM3ICAgICAgICAgICAyOC41MDIwKy0wLjM1MjIg
ICAgICAgIAogICBpbnQtb3Itb3RoZXItc3ViLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAg
IDEwLjA5ODIrLTAuMDYxNyAgICAgPyAgICAgMTAuMTEzNystMC4wODY0ICAgICAgICA/CiAgIGlu
dC1vci1vdGhlci1zdWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuNzgwNistMC4x
NjY4ICAgICAgICAgICAgNi42NTIxKy0wLjA0ODcgICAgICAgICAgbWlnaHQgYmUgMS4wMTkzeCBm
YXN0ZXIKICAgaW50LW92ZXJmbG93LWxvY2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
MC4wNzU2Ky0wLjA1MjEgICAgID8gICAgIDEwLjEwMTkrLTAuMTM5NCAgICAgICAgPwogICBJbnQx
NkFycmF5LWJ1YmJsZS1zb3J0ICAgICAgICAgICAgICAgICAgICAgICAgIDYyLjM5MzkrLTAuNDc0
OSAgICAgPyAgICAgNjMuMTY3MSstMS40MDgxICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyNHggc2xv
d2VyCiAgIEludDE2QXJyYXktbG9hZC1pbnQtbXVsICAgICAgICAgICAgICAgICAgICAgICAgIDEu
OTI4NystMC4wMzY4ICAgICAgICAgICAgMS45MDMwKy0wLjAxNjEgICAgICAgICAgbWlnaHQgYmUg
MS4wMTM1eCBmYXN0ZXIKICAgSW50OEFycmF5LWxvYWQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNS4yMDk1Ky0wLjA4MjEgICAgID8gICAgICA1LjU4MTYrLTAuNzQ1NCAgICAgICAg
PyBtaWdodCBiZSAxLjA3MTR4IHNsb3dlcgogICBpbnRlZ2VyLWRpdmlkZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDE0LjAyOTErLTAuODE0NCAgICAgICAgICAgMTMuNzA0NCstMC4w
NjkwICAgICAgICAgIG1pZ2h0IGJlIDEuMDIzN3ggZmFzdGVyCiAgIGludGVnZXItbW9kdWxvICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMDg5OSstMC4wNzI2ICAgICAgICAgICAg
Mi4wMTYwKy0wLjAyMDIgICAgICAgICAgbWlnaHQgYmUgMS4wMzY3eCBmYXN0ZXIKICAgbWFrZS1p
bmRleGVkLXN0b3JhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy44MzcyKy0wLjUxOTIg
ICAgID8gICAgICA0LjE4MzIrLTAuOTA5MiAgICAgICAgPyBtaWdodCBiZSAxLjA5MDJ4IHNsb3dl
cgogICBtZXRob2Qtb24tbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxLjIx
NzUrLTAuODI0NSAgICAgPyAgICAgMjEuNjQwOCstMi44MDU3ICAgICAgICA/IG1pZ2h0IGJlIDEu
MDIwMHggc2xvd2VyCiAgIG5lZ2F0aXZlLXplcm8tZGl2aWRlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAuNDYzOSstMC4wMTI2ICAgICA/ICAgICAgMC40ODAxKy0wLjAxNTQgICAgICAgID8g
bWlnaHQgYmUgMS4wMzQ5eCBzbG93ZXIKICAgbmVnYXRpdmUtemVyby1tb2R1bG8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMC40NDc0Ky0wLjAxMTAgICAgID8gICAgICAwLjQ1NjYrLTAuMDE4
NyAgICAgICAgPyBtaWdodCBiZSAxLjAyMDV4IHNsb3dlcgogICBuZWdhdGl2ZS16ZXJvLW5lZ2F0
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQ1MTYrLTAuMDIwNyAgICAgPyAgICAgIDAu
NDUzNCstMC4wNDA4ICAgICAgICA/CiAgIG5lc3RlZC1mdW5jdGlvbi1wYXJzaW5nLXJhbmRvbSAg
ICAgICAgICAgICAgICAzMzcuMzc4NistMTAuNTU5NSAgICA/ICAgIDMzOC44NTUwKy05Ljc2MTIg
ICAgICAgID8KICAgbmVzdGVkLWZ1bmN0aW9uLXBhcnNpbmcgICAgICAgICAgICAgICAgICAgICAg
ICA0Mi43NTIwKy0yLjUzMDAgICAgID8gICAgIDQzLjE1MjcrLTIuNjE2MSAgICAgICAgPwogICBu
ZXctYXJyYXktYnVmZmVyLWRlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjgwNTArLTAu
MTIwNCAgICAgPyAgICAgIDMuODQxMystMC4xMTQxICAgICAgICA/CiAgIG5ldy1hcnJheS1idWZm
ZXItcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgMTEuNzgwNCstMi4yMDkyICAgICAgICAg
ICAxMS43MzI3Ky0yLjEzNjggICAgICAgIAogICBuZXctYXJyYXktZGVhZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDI5LjYxOTcrLTAuMDYxMCAgICAgICAgICAgMjkuNDI4OSstMC4y
NTEyICAgICAgICAKICAgbmV3LWFycmF5LXB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOS45OTY1Ky0xLjcwMzkgICAgICAgICAgICA5Ljk1MTgrLTEuNzA3OSAgICAgICAgCiAg
IG51bWJlci10ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuOTc0MSst
MC4xMjc1ICAgICAgICAgICAgMy45NjEzKy0wLjA5ODQgICAgICAgIAogICBvYmplY3QtY2xvc3Vy
ZS1jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjE4MTMrLTAuMTkxMyAgICAgPyAg
ICAgIDcuMTk4MCstMC4yMTM5ICAgICAgICA/CiAgIG9iamVjdC10ZXN0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDQuMjQwOSstMC4xMzEyICAgICA/ICAgICAgNC4zMDk2Ky0w
LjE0NDkgICAgICAgID8gbWlnaHQgYmUgMS4wMTYyeCBzbG93ZXIKICAgcG9seS1zdHJpY3RlcSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MC4xNzExKy0xLjU1ODEgICAgICAgICAg
IDg5LjU5ODcrLTAuODc4NyAgICAgICAgCiAgIHBvbHltb3JwaGljLXN0cnVjdHVyZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTguMDU4NCstMC40OTg4ICAgICAgICAgICAxNy44Njc1Ky0wLjA2
ODYgICAgICAgICAgbWlnaHQgYmUgMS4wMTA3eCBmYXN0ZXIKICAgcG9seXZhcmlhbnQtbW9ub21v
cnBoaWMtZ2V0LWJ5LWlkICAgICAgICAgICAgICAgOS45NjQ2Ky0wLjA5OTAgICAgID8gICAgIDEx
LjA1MDgrLTEuNjc4NiAgICAgICAgPyBtaWdodCBiZSAxLjEwOTB4IHNsb3dlcgogICByYXJlLW9z
ci1leGl0LW9uLWxvY2FsICAgICAgICAgICAgICAgICAgICAgICAgIDE5LjIxOTYrLTAuMTQwMiAg
ICAgICAgICAgMTkuMTgxNSstMC4xMzE4ICAgICAgICAKICAgcmVnaXN0ZXItcHJlc3N1cmUtZnJv
bS1vc3IgICAgICAgICAgICAgICAgICAgICAyOS43NDMwKy0wLjc5NjYgICAgICAgICAgIDI5LjQw
MjkrLTAuNDY3NyAgICAgICAgICBtaWdodCBiZSAxLjAxMTZ4IGZhc3RlcgogICBzaW1wbGUtYWN0
aXZhdGlvbi1kZW1vICAgICAgICAgICAgICAgICAgICAgICAgIDMzLjkwOTUrLTAuMjQ4OCAgICAg
PyAgICAgMzQuMTA1NystMC41MDA1ICAgICAgICA/CiAgIHNsb3ctYXJyYXktcHJvZmlsZS1jb252
ZXJnZW5jZSAgICAgICAgICAgICAgICAgIDQuMjQ2MystMC4yMDQ0ICAgICA/ICAgICAgNC4zNTA2
Ky0wLjI1NTUgICAgICAgID8gbWlnaHQgYmUgMS4wMjQ2eCBzbG93ZXIKICAgc2xvdy1jb252ZXJn
ZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4yNTM0Ky0wLjAzMTIgICAgID8g
ICAgICAzLjMzMjMrLTAuMTU4NyAgICAgICAgPyBtaWdodCBiZSAxLjAyNDJ4IHNsb3dlcgogICBz
cGFyc2UtY29uZGl0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjI0NTErLTAu
MDMxMiAgICAgICAgICAgIDEuMjA3MystMC4wMjAyICAgICAgICAgIG1pZ2h0IGJlIDEuMDMxNHgg
ZmFzdGVyCiAgIHNwbGljZS10by1yZW1vdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MzcuNzc1OSstMS42NjQ2ICAgICAgICAgICAzNy4xMzYxKy0wLjI3ODAgICAgICAgICAgbWlnaHQg
YmUgMS4wMTcyeCBmYXN0ZXIKICAgc3RyaW5nLWNvbmNhdC1vYmplY3QgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMi43ODI0Ky0wLjA0MzggICAgICAgICAgICAyLjc1NTcrLTAuMDI3MiAgICAg
ICAgCiAgIHN0cmluZy1jb25jYXQtcGFpci1vYmplY3QgICAgICAgICAgICAgICAgICAgICAgIDIu
NzAzNCstMC4wMjgxICAgICA/ICAgICAgMi43MjU0Ky0wLjA2MzMgICAgICAgID8KICAgc3RyaW5n
LWNvbmNhdC1wYWlyLXNpbXBsZSAgICAgICAgICAgICAgICAgICAgICAxNC41NjE0Ky0wLjMyMDMg
ICAgICAgICAgIDE0LjUwODMrLTAuMzk1NiAgICAgICAgCiAgIHN0cmluZy1jb25jYXQtc2ltcGxl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQuNzUzMSstMC4zOTA0ICAgICA/ICAgICAxNC44
MjI3Ky0wLjQzMzkgICAgICAgID8KICAgc3RyaW5nLWNvbnMtcmVwZWF0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxMS41MTk2Ky0wLjY4OTggICAgICAgICAgIDExLjM5NTMrLTAuNjMxNiAg
ICAgICAgICBtaWdodCBiZSAxLjAxMDl4IGZhc3RlcgogICBzdHJpbmctY29ucy10b3dlciAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDMyLjEyNjYrLTE5LjEyNzcgICAgPyAgICAgMzIuNjIy
MCstMjAuNTU1OCAgICAgICA/IG1pZ2h0IGJlIDEuMDE1NHggc2xvd2VyCiAgIHN0cmluZy1lcXVh
bGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDYuNzk4OSstMi44MTQ3ICAgICAg
ICAgICA0NC44NDc5Ky0wLjg3NTcgICAgICAgICAgbWlnaHQgYmUgMS4wNDM1eCBmYXN0ZXIKICAg
c3RyaW5nLWhhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi42NTc1Ky0w
LjA0MTQgICAgICAgICAgICAyLjY0NzYrLTAuMDMyOSAgICAgICAgCiAgIHN0cmluZy1yZXBlYXQt
YXJpdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgMzkuNTYyNistMC41NjEzICAgICA/ICAg
ICAzOS44MDcyKy0xLjA4NzkgICAgICAgID8KICAgc3RyaW5nLXN1YiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA3OC43NzI4Ky0xLjU2MjUgICAgID8gICAgIDc5LjAxMTgrLTEu
NzY3MCAgICAgICAgPwogICBzdHJpbmctdGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAzLjYwMjErLTAuMDYyNiAgICAgPyAgICAgIDMuNjAyMystMC4wNDM0ICAgICAgICA/
CiAgIHN0cnVjdHVyZS1ob2lzdC1vdmVyLXRyYW5zaXRpb25zICAgICAgICAgICAgICAgIDMuNDQw
OCstMC41MzE3ICAgICAgICAgICAgMy40MDY1Ky0wLjQ5NTYgICAgICAgICAgbWlnaHQgYmUgMS4w
MTAxeCBmYXN0ZXIKICAgdGVhci1vZmYtYXJndW1lbnRzLXNpbXBsZSAgICAgICAgICAgICAgICAg
ICAgICAgMS42OTQ5Ky0wLjAzMTQgICAgID8gICAgICAxLjcwMTkrLTAuMDQwMSAgICAgICAgPwog
ICB0ZWFyLW9mZi1hcmd1bWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjA2MjYr
LTAuMDYyMiAgICAgPyAgICAgIDMuMDY4MSstMC4xMTMzICAgICAgICA/CiAgIHRlbXBvcmFsLXN0
cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTguNjY5NCstMC4wOTE2ICAgICA/
ICAgICAxOC44MTM5Ky0wLjE5NzkgICAgICAgID8KICAgdG8taW50MzItYm9vbGVhbiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyMy40MjAzKy0wLjEwNDcgICAgID8gICAgIDIzLjQzNTYr
LTAuMTAyMSAgICAgICAgPwogICB1bmRlZmluZWQtdGVzdCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAzLjkzMjgrLTAuMTA1NyAgICAgPyAgICAgIDQuMDAxNistMC4yODA2ICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDE3NXggc2xvd2VyCgogICA8YXJpdGhtZXRpYz4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDE3LjcxOTUrLTAuMjk5MCAgICAgPyAgICAgMTcuNzY4Mist
MC4zMjY5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDAyN3ggc2xvd2VyCiAgIDxnZW9tZXRyaWM+ICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguMTcwOCstMC4xMDQxICAgICA/ICAg
ICAgOC4xOTc3Ky0wLjA5OTUgICAgICAgID8gbWlnaHQgYmUgMS4wMDMzeCBzbG93ZXIKICAgPGhh
cm1vbmljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy45NTI2Ky0wLjAy
ODAgICAgID8gICAgICAzLjk3NzArLTAuMDMyNiAgICAgICAgPyBtaWdodCBiZSAxLjAwNjJ4IHNs
b3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbmYjMSAgICAgICAgICAgICAgICAgICAgQ29uZiMyICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKRFNQOgogICBmaWx0cnItcG9zdGVyaXplLXRpbnQgICAgICAgICAg
ICAgICAgICAgICAgICAgIDQ2LjYwMTArLTEuMTc4MCAgICAgPyAgICAgNDYuNjg4MistMS41NzMz
ICAgICAgICA/CiAgIGZpbHRyci10aW50LWNvbnRyYXN0LXNhdC1icmlnaHQgICAgICAgICAgICAg
ICAgNjYuNjk5MystMi40MTcxICAgICAgICAgICA2Ni41Mzg0Ky0xLjcyNjggICAgICAgIAogICBm
aWx0cnItdGludC1zYXQtYWRqLWNvbnRyLW11bHQgICAgICAgICAgICAgICAgIDc1LjEyOTgrLTEu
ODkwNCAgICAgICAgICAgNzUuMTAyNistMS41OTM0ICAgICAgICAKICAgZmlsdHJyLWJsdXItb3Zl
cmxheS1zYXQtY29udHIgICAgICAgICAgICAgICAgIDIwNC44Mzg1Ky0xNS40MjAwICAgICAgICAg
MTkyLjgxOTUrLTQuNjAxNyAgICAgICAgICBtaWdodCBiZSAxLjA2MjN4IGZhc3RlcgogICBmaWx0
cnItc2F0LWJsdXItbXVsdC1zaGFycGVuLWNvbnRyICAgICAgICAgICAgMjI1Ljg4NDYrLTQuNzgx
MiAgICAgPyAgICAyMjguMTIzMSstNy40MzYxICAgICAgICA/CiAgIGZpbHRyci1zZXBpYS1iaWFz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIuOTg0OCstMS40NDYzICAgICA/ICAgICAz
My41NTk3Ky0xLjI4OTIgICAgICAgID8gbWlnaHQgYmUgMS4wMTc0eCBzbG93ZXIKICAgcm91dGU5
LXZwOCAgICAgICAgICAgICAgICAgICAgICAgICAgICB4NSAgICAgIDk4Ny4zOTY2Ky02LjU5MTkg
ICAgID8gICAgOTk3LjgzNTIrLTEzLjM1NTMgICAgICAgPyBtaWdodCBiZSAxLjAxMDZ4IHNsb3dl
cgogICBzdGFyZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg1ICAgICAxMTc3LjQ4
NTArLTMuODE4NyAgICAgICAgIDExNzEuODQ3MSstNC4wNzE2ICAgICAgICAKICAgYmVsbGFyZC1q
c2xpbnV4ICAgICAgICAgICAgICAgICAgICAgICB4NSAgICAgMjk5NC42NjY3Ky05LjM5ODEgICAg
ID8gICAyOTk2LjA4MzMrLTE2LjA3OTQgICAgICAgPwogICB6eW5hcHMtcXVha2UzICAgICAgICAg
ICAgICAgICAgICAgICAgIHg1ICAgICAxMTI0Ljk4NjMrLTguNTg2NSAgICAgICAgIDExMjMuODcx
NSstOS43ODMyICAgICAgICAKICAgenluYXBzLW1hbmRlbGJyb3QgICAgICAgICAgICAgICAgICAg
ICB4NSAgICAgMTAxOS43NjUyKy00LjE0NzYgICAgICAgICAxMDE3LjY1NDcrLTMuNDQzMiAgICAg
ICAgCiAgIGFtbW9qcy1hc20tanMgICAgICAgICAgICAgICAgICAgICAgICAgeDUgICAgICAyNTMu
MDk3NystMTguNjYwMCAgICAgICAgIDI0My4wNDAwKy0xOC44OTIyICAgICAgICAgbWlnaHQgYmUg
MS4wNDE0eCBmYXN0ZXIKICAgYW1tb2pzLXJlZ3VsYXItanMgICAgICAgICAgICAgICAgICAgICB4
NSAgICAgIDI0NC45OTI2Ky05LjYyMDYgICAgID8gICAgMjQ5Ljg2MDArLTcuMzg5MyAgICAgICAg
PyBtaWdodCBiZSAxLjAxOTl4IHNsb3dlcgoKICAgPGFyaXRobWV0aWM+ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDk2Ny40MTY4Ky0zLjM4ODggICAgICAgICAgOTY2LjkyMTcrLTMu
ODQzMCAgICAgICAgICBtaWdodCBiZSAxLjAwMDV4IGZhc3RlcgogICA8Z2VvbWV0cmljPiAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTg2LjY3MDUrLTkuMTk3MSAgICAgICAgICA1
ODQuOTU4MistNy42OTE3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDAyOXggZmFzdGVyCiAgIDxoYXJt
b25pYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzMuMDA3MSstOC4wMzA1
ICAgICAgICAgIDI3Mi43NjE3Ky02LjgwODYgICAgICAgICAgbWlnaHQgYmUgMS4wMDA5eCBmYXN0
ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb25mIzEgICAgICAgICAgICAgICAgICAgIENvbmYjMiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCkFsbCBiZW5jaG1hcmtzOgogICA8YXJpdGhtZXRpYz4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMjA4LjUzMTkrLTAuNTc2MSAgICAgICAgICAyMDguMzQ5
MystMC43ODQ3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDAwOXggZmFzdGVyCiAgIDxnZW9tZXRyaWM+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIuMTk5MistMC4xOTQ0ICAgICA/
ICAgICAyMi4yMzIzKy0wLjE5NTAgICAgICAgID8gbWlnaHQgYmUgMS4wMDE1eCBzbG93ZXIKICAg
PGhhcm1vbmljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy45OTA4Ky0w
LjAyMDQgICAgID8gICAgICA0LjAxODErLTAuMDMyNyAgICAgICAgPyBtaWdodCBiZSAxLjAwNjh4
IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbmYjMSAgICAgICAgICAgICAgICAgICAgQ29uZiMyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKR2VvbWVhbiBvZiBwcmVmZXJyZWQgbWVhbnM6CiAgIDxzY2Fs
ZWQtcmVzdWx0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYuNTEyNystMC4yNDUw
ICAgICAgICAgICAzNi40NTIwKy0wLjI5NjQgICAgICAgICAgbWlnaHQgYmUgMS4wMDE3eCBmYXN0
ZXIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207289</attachid>
            <date>2013-07-22 16:02:46 -0700</date>
            <delta_ts>2013-07-22 16:18:43 -0700</delta_ts>
            <desc>patch 2: renamed JSTokenPosition to JSTextPosition, deleted some empty lines, and added JSTextPosition::operator+(unsigned) (needed for Windows).</desc>
            <filename>bug-118662b.patch</filename>
            <type>text/plain</type>
            <size>198225</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxMy0wNy0yMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Rml4IHByb2JsZW1zIHdpdGggZGl2b3QgYW5kIGxpbmVTdGFydCBtaXNtYXRjaGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjYyLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIxNTI0OTQgYWRkZWQg
dGhlIHJlY29yZGluZyBvZiBsaW5lU3RhcnQgdmFsdWVzIGZvciBkaXZvdCBwb3NpdGlvbnMuCisg
ICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgY29tcHV0YXRpb24gb2YgY29sdW1uIG51bWJl
cnMuIFNpbWlsYXJseSwgaXQgYWxzbworICAgICAgICBhZGRlZCB0aGUgcmVjb3JkaW5nIG9mIGxp
bmUgbnVtYmVycyBmb3IgdGhlIGRpdm90IHBvc2l0aW9ucy4gT25lIHByb2JsZW0KKyAgICAgICAg
d2l0aCB0aGUgYXBwcm9hY2ggdGFrZW4gd2FzIHRoYXQgdGhlIGxpbmUgYW5kIGxpbmVTdGFydCB2
YWx1ZXMgd2VyZQorICAgICAgICByZWNvcmRlZCBpbmRlcGVuZGVudGx5LCBhbmQgaGVuY2Ugd2Vy
ZSBub3QgYWx3YXlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICAgc2FtcGxlZCBhdCB0aGUgc2Ft
ZSBwbGFjZSB0aGF0IHRoZSBkaXZvdCBwb3NpdGlvbiBpcyByZWNvcmRlZC4gVGhpcworICAgICAg
ICByZXN1bHRlZCBpbiBwb3RlbnRpYWwgbWlzbWF0Y2hlcyB0aGF0IGNhdXNlIHNvbWUgYXNzZXJ0
aW9ucyB0byBmYWlsLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgYSBK
U1RleHRQb3NpdGlvbiBhYnN0cmFjdGlvbiB0aGF0IHJlY29yZHMKKyAgICAgICAgdGhlIGRpdm90
IHBvc2l0aW9uLCBsaW5lLCBhbmQgbGluZVN0YXJ0IGFzIGEgc2luZ2xlIHF1YW50aXR5LiBXaGVy
ZXZlcgorICAgICAgICB3ZSByZWNvcmQgdGhlIGRpdm90IHBvc2l0aW9uIGFzIGFuIHVuc2lnbmVk
IGludCBwcmV2aW91c2x5LCB3ZSBub3cgcmVjb3JkCisgICAgICAgIGl0cyBKU1RleHRQb3NpdGlv
biB3aGljaCBjYXB0dXJlcyBhbGwgMyB2YWx1ZXMgaW4gb25lIGdvLiBUaGlzIGVuc3VyZXMKKyAg
ICAgICAgdGhhdCB0aGUgY2FwdHVyZWQgbGluZSBhbmQgbGluZVN0YXJ0IHdpbGwgYWx3YXlzIG1h
dGNoIHRoZSBjYXB0dXJlZCBkaXZvdAorICAgICAgICBwb3NpdGlvbi4KKworICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxW
YXJhcmdzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayk6CisgICAg
ICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5l
U3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHByZXNzaW9uSW5m
byk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5l
IGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OmVtaXRU
aHJvd1JlZmVyZW5jZUVycm9yKToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6TmV3RXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkV2YWxGdW5j
dGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAg
ICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9z
dGZpeE5vZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpEZWxldGVSZXNvbHZlTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OlByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6UHJlZml4Tm9k
ZTo6ZW1pdEJyYWNrZXQpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0RG90KToKKyAg
ICAgICAgKEpTQzo6VW5hcnlPcE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkJp
bmFyeU9wTm9kZTo6ZW1pdFN0cmNhdCk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUJpbmFyeU9w
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZk5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OmVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudCk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFz
c2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlEb3RO
b2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OldpdGhOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpUaHJvd05vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2Yg
cGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIv
QVNUQnVpbGRlci5oOgorICAgICAgICAtIFJlcGxhY2VkIEFTVEJ1aWxkZXI6OlBvc2l0aW9uSW5m
byB3aXRoIEpTVGV4dFBvc2l0aW9uLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpCaW5hcnlP
cEluZm86OkJpbmFyeU9wSW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OkFzc2lnbm1l
bnRJbmZvOjpBc3NpZ25tZW50SW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZVJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCcmFja2V0QWNjZXNz
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG90QWNjZXNzKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVnRXhwKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y3JlYXRlTmV3RXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUFzc2ln
blJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFeHByU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZUxhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
V2l0aFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVRocm93U3Rh
dGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6YXBwZW5kQmluYXJ5RXhwcmVzc2lv
bkluZm8pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphcHBlbmRVbmFyeVRva2VuKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6dW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6YXNzaWdubWVudFN0YWNrQXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWdubWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OnNldEV4Y2VwdGlvbkxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFr
ZURlbGV0ZU5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxs
Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VCaW5hcnlOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlUHJlZml4Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VQ
b3N0Zml4Tm9kZSk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFz
c2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvTGV4
ZXIuY3BwOgorICAgICAgICAoSlNDOjo6OmxleCk6CisgICAgICAgIC0gQWRkZWQgc3VwcG9ydCBm
b3IgY2FwdHVyaW5nIHRoZSBhcHByb3ByaWF0ZSBKU1RleHRQb3NpdGlvbnMgaW5zdGVhZAorICAg
ICAgICAgIG9mIGp1c3QgdGhlIGNoYXJhY3RlciBvZmZzZXQuCisgICAgICAgICogcGFyc2VyL0xl
eGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50UG9zaXRpb24pOgorICAgICAgICAo
SlNDOjo6OmxleEV4cGVjdElkZW50aWZpZXIpOgorICAgICAgICAtIEFkZGVkIHN1cHBvcnQgZm9y
IGNhcHR1cmluZyB0aGUgYXBwcm9wcmlhdGUgSlNUZXh0UG9zaXRpb25zIGluc3RlYWQKKyAgICAg
ICAgICBvZiBqdXN0IHRoZSBjaGFyYWN0ZXIgb2Zmc2V0LgorICAgICAgICAqIHBhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlND
OjpSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpFdmFsRnVuY3Rpb25D
YWxsTm9kZTo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNh
bGxWYWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5vZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUpOgor
ICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6Q2FsbEZ1bmN0aW9uQ2FsbERv
dE5vZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OkFwcGx5RnVu
Y3Rpb25DYWxsRG90Tm9kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjpQb3N0Zml4Tm9k
ZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZSk6
CisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2RlOjpEZWxldGVCcmFja2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5vZGUpOgorICAgICAgICAoSlND
OjpQcmVmaXhOb2RlOjpQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeVJlc29s
dmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5
QnJhY2tldE5vZGU6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2ln
bkJyYWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRv
dE5vZGU6OkFzc2lnbkRvdE5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5RG90Tm9kZTo6
UmVhZE1vZGlmeURvdE5vZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25FcnJvck5vZGU6OkFzc2ln
bkVycm9yTm9kZSk6CisgICAgICAgIChKU0M6OldpdGhOb2RlOjpXaXRoTm9kZSk6CisgICAgICAg
IChKU0M6OkZvckluTm9kZTo6Rm9ySW5Ob2RlKToKKyAgICAgICAgLSBVc2UgSlNUZXh0UG9zaXRp
b24gaW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUgYW5kIGxpbmVTdGFydCBleHBsaWNpdGx5LgorICAg
ICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlN0YXRlbWVudE5vZGU6OnNl
dExvYyk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBs
aW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoK
KyAgICAgICAgKEpTQzo6Tm9kZTo6bGluZU5vKToKKyAgICAgICAgKEpTQzo6Tm9kZTo6c3RhcnRP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpOb2RlOjpsaW5lU3RhcnRPZmZzZXQpOgorICAgICAgICAo
SlNDOjpOb2RlOjpwb3NpdGlvbik6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4cHJlc3Npb25E
YXRhOjpUaHJvd2FibGVFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4
cHJlc3Npb25EYXRhOjpzZXRFeGNlcHRpb25Tb3VyY2VDb2RlKToKKyAgICAgICAgKEpTQzo6VGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGE6OmRpdm90KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhw
cmVzc2lvbkRhdGE6OmRpdm90U3RhcnQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVFeHByZXNz
aW9uRGF0YTo6ZGl2b3RFbmQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVTdWJFeHByZXNzaW9u
RGF0YTo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEpOgorICAgICAgICAoSlNDOjpUaHJvd2Fi
bGVTdWJFeHByZXNzaW9uRGF0YTo6c2V0U3ViZXhwcmVzc2lvbkluZm8pOgorICAgICAgICAoSlND
OjpUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVzc2lvbkRpdm90KToKKyAgICAg
ICAgKEpTQzo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGE6OnN1YmV4cHJlc3Npb25TdGFydCk6
CisgICAgICAgIChKU0M6OlRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhOjpzdWJleHByZXNzaW9u
RW5kKToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YTo6
VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChKU0M6OlRocm93
YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGE6OnNldFN1YmV4cHJlc3Npb25JbmZvKToKKyAg
ICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVz
c2lvbkRpdm90KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9u
RGF0YTo6c3ViZXhwcmVzc2lvblN0YXJ0KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4
ZWRTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVzc2lvbkVuZCk6CisgICAgICAgIC0gVXNlIEpT
VGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGlj
aXRseS4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQYXJz
ZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAtIFVzZSBKU1RleHRQ
b3NpdGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHku
CisgICAgICAgIChKU0M6Ojo6ZGlkRmluaXNoUGFyc2luZyk6CisgICAgICAgIC0gUmVtb3ZlIHNl
dHRpbmcgb2YgbV9sYXN0TGluZSB2YWx1ZS4gV2UgYWx3YXlzIHBhc3MgaW4gdGhlIHZhbHVlIGZy
b20KKyAgICAgICAgICBtX2xhc3RMaW5lIGFueXdheS4gU28sIHRoaXMgYXNzaWdubWVudCBpcyBl
ZmZlY3RpdmVseSBhIG5vcC4KKyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uKToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdCk6CisgICAgICAgIChKU0M6
Ojo6cGFyc2VGb3JTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQnJlYWtTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjo6OnBhcnNlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVRocm93
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVdpdGhTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJsb2Nr
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24pOgor
ICAgICAgICAoSlNDOjpMYWJlbEluZm86OkxhYmVsSW5mbyk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VFeHBy
ZXNzaW9uU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJpbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAo
SlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJpbWFyeUV4cHJl
c3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAg
IChKU0M6Ojo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAtIFVzZSBKU1RleHRQb3Np
dGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHQpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHRFeHBlY3RJZGVudGlmaWVyKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyOjpnZXRUb2tlbik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6dG9rZW5TdGFydFBv
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjp0b2tlbkVuZFBvc2l0aW9uKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjpsYXN0VG9rZW5FbmRQb3NpdGlvbik6CisgICAgICAgIChKU0M6Ojo6
cGFyc2UpOgorICAgICAgICAtIFVzZSBKU1RleHRQb3NpdGlvbiBpbnN0ZWFkIG9mIHBhc3Npbmcg
bGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisgICAgICAgICogcGFyc2VyL1BhcnNlclRv
a2Vucy5oOgorICAgICAgICAoSlNDOjpKU1RleHRQb3NpdGlvbjo6SlNUZXh0UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpKU1RleHRQb3NpdGlvbjo6b3BlcmF0b3IrKToKKyAgICAgICAgKEpTQzo6
SlNUZXh0UG9zaXRpb246Om9wZXJhdG9yLSk6CisgICAgICAgIChKU0M6OkpTVGV4dFBvc2l0aW9u
OjpvcGVyYXRvciBpbnQpOgorICAgICAgICAtIEFkZGVkIEpTVGV4dFBvc2l0aW9uLgorICAgICAg
ICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFr
ZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjptYWtlUHJlZml4Tm9k
ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VQb3N0Zml4Tm9kZSk6CisgICAg
ICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6
U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNr
ZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpj
cmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVSZWdF
eHApOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVOZXdFeHByKToKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQXNzaWduUmVzb2x2ZSk6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZvckluTG9vcCk6CisgICAgICAgIChKU0M6OlN5bnRh
eENoZWNrZXI6OmNyZWF0ZVJldHVyblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6OmNyZWF0ZUJyZWFrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tl
cjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpjcmVhdGVXaXRoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3Jl
YXRlTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVU
aHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmFwcGVuZEJpbmFy
eUV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6b3BlcmF0b3JT
dGFja1BvcCk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2lu
ZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKwogMjAxMy0wNy0xMSAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEF0dGVtcHQgdG8gZml4IHRoZSB3aW5k
b3dzIGJ1aWxkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1MjU4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAxLDkgKzE3MDEsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE5ld0Z1CiAgICAgcmV0dXJuIHIwOwogfQogCi1SZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5j
LCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNhbGxB
cmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMm
IGNhbGxBcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKIHsK
LSAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgbGlu
ZVN0YXJ0KTsKKyAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0LCBmdW5jLCBleHBlY3Rl
ZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwog
fQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgp
CkBAIC0xNzM0LDkgKzE3MzQsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBY3Rp
dmF0aW9uCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5p
bmRleCgpKTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsRXZh
bChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVudHMmIGNhbGxB
cmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxFdmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKQogewotICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsX2V2
YWwsIGRzdCwgZnVuYywgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgbGluZVN0YXJ0KTsKKyAgICByZXR1cm4gZW1p
dENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1bmMsIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIH0KIAogRXhwZWN0ZWRGdW5j
dGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZXhwZWN0ZWRGdW5jdGlvbkZvcklkZW50aWZpZXIoY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKQEAgLTE4MTQsNyArMTgxNCw3IEBAIEV4cGVjdGVk
RnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXQKICAgICByZXR1cm4gZXhwZWN0ZWRGdW5j
dGlvbjsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY29k
ZUlEIG9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVk
RnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxB
cmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCkKIHsKICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF9jYWxsX2V2YWwpOwogICAgIEFTU0VSVChmdW5jLT5yZWZDb3VudCgpKTsKQEAgLTE4MzcsNyAr
MTgzNyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMucHJvZmlsZUhvb2tSZWdpc3Rl
cigpLT5pbmRleCgpKTsKICAgICB9CiAKLSAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAKICAgICBSZWZQdHI8TGFiZWw+
IGRvbmUgPSBuZXdMYWJlbCgpOwogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBlbWl0RXhwZWN0ZWRG
dW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRz
LCBkb25lLmdldCgpKTsKQEAgLTE4NzEsNyArMTg3MSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVu
dHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9maWxlSG9v
a1JlZ2lzdGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KQorUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJn
dW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvZmls
ZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogewog
ICAgIGlmIChtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKICAgICAgICAgZW1pdE1vdmUocHJv
ZmlsZUhvb2tSZWdpc3RlciwgZnVuYyk7CkBAIC0xODc5LDcgKzE4NzksNyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChwcm9maWxlSG9va1JlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAgZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBsaW5l
U3RhcnQpOworICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RF
bmQpOwogCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIGVtaXRPcGNvZGUob3BfY2FsbF92YXJhcmdz
KTsKQEAgLTE5MzEsNyArMTkzMSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0VW5hcnkKICAgICByZXR1cm4gc3JjOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4
cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3Vt
ZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRz
JiBjYWxsQXJndW1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiB7
CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNvdW50KCkpOwogCkBAIC0xOTU1LDcgKzE5NTUsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyArK2kpCiAgICAgICAgIGNhbGxG
cmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwogCi0gICAgZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBsaW5lU3RhcnQpOworICAgIGVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIAogICAgIFJl
ZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CiAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IGVt
aXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOwpAQCAtMjAzNCw3ICsyMDM0LDggQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayhEZQogICAgIGlmICghbV9zaG91bGRFbWl0RGVi
dWdIb29rcykKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCi0gICAgZW1pdEV4cHJlc3Npb25JbmZv
KGNoYXJPZmZzZXQsIDAsIDAsIGZpcnN0TGluZSwgbGluZVN0YXJ0KTsKKyAgICBKU1RleHRQb3Np
dGlvbiBkaXZvdChmaXJzdExpbmUsIGNoYXJPZmZzZXQsIGxpbmVTdGFydCk7CisgICAgZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90LCBkaXZvdCwgZGl2b3QpOwogICAgIHVuc2lnbmVkIGNoYXJQb3Np
dGlvbiA9IGNoYXJPZmZzZXQgLSBtX3Njb3BlTm9kZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsK
ICAgICBlbWl0T3Bjb2RlKG9wX2RlYnVnKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZGVi
dWdIb29rSUQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzUsMjcgKzM3NSwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IG4tPmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dCgqdGhpcywgdHJ1ZVRhcmdldCwgZmFs
c2VUYXJnZXQsIGZhbGxUaHJvdWdoTW9kZSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGVt
aXRFeHByZXNzaW9uSW5mbyhpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNl
dCwgdW5zaWduZWQgbGluZSwgaW50IGxpbmVTdGFydCkKLSAgICAgICAgeworICAgICAgICB2b2lk
IGVtaXRFeHByZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQp
CisgICAgICAgIHsgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQg
Pj0gZGl2b3RTdGFydC5vZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKGRpdm90RW5kLm9mZnNl
dCA+PSBkaXZvdC5vZmZzZXQpOworCiAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0ID0gbV9z
Y29wZU5vZGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBm
aXJzdExpbmUgPSBtX3Njb3BlTm9kZS0+c291cmNlKCkuZmlyc3RMaW5lKCk7CiAKLSAgICAgICAg
ICAgIEFTU0VSVChkaXZvdCA+PSBsaW5lU3RhcnQpOwotICAgICAgICAgICAgQVNTRVJUKGRpdm90
ID49IHNvdXJjZU9mZnNldCk7Ci0gICAgICAgICAgICBkaXZvdCAtPSBzb3VyY2VPZmZzZXQ7Cisg
ICAgICAgICAgICBpbnQgZGl2b3RPZmZzZXQgPSBkaXZvdC5vZmZzZXQgLSBzb3VyY2VPZmZzZXQ7
CisgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBkaXZvdC5vZmZzZXQgLSBkaXZvdFN0YXJ0
Lm9mZnNldDsKKyAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSBkaXZvdEVuZC5vZmZzZXQgLSBk
aXZvdC5vZmZzZXQ7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxpbmUgPSBkaXZvdC5saW5lOwor
ICAgICAgICAgICAgQVNTRVJUKGxpbmUgPj0gZmlyc3RMaW5lKTsKKyAgICAgICAgICAgIGxpbmUg
LT0gZmlyc3RMaW5lOwogCisgICAgICAgICAgICBpbnQgbGluZVN0YXJ0ID0gZGl2b3QubGluZVN0
YXJ0T2Zmc2V0OwogICAgICAgICAgICAgaWYgKGxpbmVTdGFydCA+IHNvdXJjZU9mZnNldCkKICAg
ICAgICAgICAgICAgICBsaW5lU3RhcnQgLT0gc291cmNlT2Zmc2V0OwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IDA7Ci0KLSAgICAgICAgICAgIEFTU0VSVChs
aW5lID49IGZpcnN0TGluZSk7Ci0gICAgICAgICAgICBsaW5lIC09IGZpcnN0TGluZTsKKyAgICAg
ICAgICAgIEFTU0VSVChkaXZvdE9mZnNldCA+PSBsaW5lU3RhcnQpOworICAgICAgICAgICAgdW5z
aWduZWQgY29sdW1uID0gZGl2b3RPZmZzZXQgLSBsaW5lU3RhcnQ7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgICAg
ICAgICAgQVNTRVJUKGRpdm90ID49IGxpbmVTdGFydCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
b2x1bW4gPSBkaXZvdCAtIGxpbmVTdGFydDsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRF
eHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkRXhwcmVz
c2lvbkluZm8oaW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAgICAgICB9CiAKICAgICAgICAgQUxXQVlTX0lOTElO
RSBib29sIGxlZnRIYW5kU2lkZU5lZWRzQ29weShib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGJv
b2wgcmlnaHRJc1B1cmUpCkBAIC00NzEsMTUgKzQ3NiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0UHV0R2V0dGVyU2V0dGVyKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiBnZXR0ZXIsIFJlZ2lzdGVySUQqIHNldHRl
cik7CiAgICAgICAgIAogICAgICAgICBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb25G
b3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9u
LCBDYWxsQXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGZ1bmMsIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0
YXJ0KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklE
KiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBw
cm9maWxlSG9va1JlZ2lzdGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxFdmFs
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVy
SUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJz
dEZyZWVSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExv
YWRWYXJhcmdzKFJlZ2lzdGVySUQqIGFyZ0NvdW50RHN0LCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0
ZXIsIFJlZ2lzdGVySUQqIGFyZ3MpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXR1cm4o
UmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdpc3RlcklE
KiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU5vRHN0T3Aob3BfZW5kLCBzcmMpOyB9CiAKLSAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwg
dW5zaWduZWQgbGluZVN0YXJ0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENvbnN0cnVjdChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxB
cmd1bWVudHMmLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0U3RyY2F0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
LCBpbnQgY291bnQpOwogICAgICAgICB2b2lkIGVtaXRUb1ByaW1pdGl2ZShSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAKQEAgLTU4Myw3ICs1ODgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gKGkuZS4gIk9iamVjdCgpIiBpcyBpZGVudGljYWwgdG8gIm5ldyBPYmpl
Y3QoKSIpLgogICAgICAgICBFeHBlY3RlZEZ1bmN0aW9uIGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25p
cHBldChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24s
IENhbGxBcmd1bWVudHMmLCBMYWJlbCogZG9uZSk7CiAgICAgICAgIAotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5j
LCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGxpbmVTdGFydCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsKE9wY29kZUlELCBS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxB
cmd1bWVudHMmLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAg
ICAgIFJlZ2lzdGVySUQqIG5ld1JlZ2lzdGVyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE1
MjU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIEV4cHJlc3Npb25Ob2Rl
OjplbWl0Qnl0ZWNvZGVJbkNvbmRpCiAKIFJlZ2lzdGVySUQqIFRocm93YWJsZUV4cHJlc3Npb25E
YXRhOjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90
TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRUaHJvd1JlZmVyZW5jZUVycm9yKG1lc3NhZ2UpOwogICAgIHJldHVybiBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CiB9CkBAIC0xNTMsOCArMTUzLDggQEAgUmVnaXN0ZXJJRCogUmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZShCeQogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbCk7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGRp
dm90ID0gbV9zdGFydE9mZnNldCArIG1faWRlbnQubGVuZ3RoKCk7Ci0gICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgbV9pZGVudC5sZW5ndGgoKSwgMCwgbV9kaXZvdExpbmUs
IG1fZGl2b3RMaW5lU3RhcnQpOworICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90ID0gbV9zdGFydCAr
IG1faWRlbnQubGVuZ3RoKCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCwgbV9zdGFydCwgZGl2b3QpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFJlc29sdmUoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CiB9
CiAKQEAgLTMyNiwxMyArMzI2LDEzIEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6
OmVtaXRCeXQKICAgICAgICAgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMoc3Rh
dGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpCiAgICAgICAgICYm
ICFnZW5lcmF0b3Iuc3ltYm9sVGFibGUoKS5zbG93QXJndW1lbnRzKCkpIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50
QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZ2VuZXJhdG9yLnVuY2hlY2tl
ZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCksIHByb3BlcnR5KTsKICAgICB9CiAKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jh
c2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJh
dG9yKSk7CiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9z
dWJzY3JpcHQpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsK
IH0KIApAQCAtMzQ2LDEzICszNDYsMTMgQEAgUmVnaXN0ZXJJRCogRG90QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZAogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZU5vZGUgPSBzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KG1fYmFzZSk7CiAgICAgICAgIGlmICghZ2VuZXJhdG9yLndpbGxSZXNv
bHZlVG9Bcmd1bWVudHMocmVzb2x2ZU5vZGUtPmlkZW50aWZpZXIoKSkpCiAgICAgICAgICAgICBn
b3RvIG5vbkFyZ3VtZW50c1BhdGg7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExp
bmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpKTsKICAg
ICB9CiAKIG5vbkFyZ3VtZW50c1BhdGg6CiAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2Jhc2UpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwg
ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9pZGVudCk7
CiB9CiAKQEAgLTM3NSw3ICszNzUsNyBAQCBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5CiAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBOb0V4cGVjdGVkRnVuY3Rpb247
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
KTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbk9ySWdub3JlZChkc3QpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRD
b25zdHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0KSwgZnVuYy5n
ZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogaW5saW5lIENhbGxBcmd1bWVudHM6OkNhbGxBcmd1bWVu
dHMoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRz
Tm9kZSkKQEAgLTQxMCw5ICs0MTAsMTAgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5v
ZGU6OmVtaXRCeQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
IC0gZGl2b3RTdGFydE9mZnNldCgpICsgNCwgNCwgMCwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFydCgpICsgNDsK
KyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCks
IG5ld0Rpdm90KTsKICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBmdW5jLmdldCgpLCBnZW5lcmF0b3IucmVzb2x2ZShnZW5lcmF0
b3IucHJvcGVydHlOYW1lcygpLmV2YWwpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRp
dm90TGluZVN0YXJ0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDIyLDcgKzQyMyw3IEBAIFJlZ2lzdGVy
SUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0
LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90
TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1
bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KQEAgLTQzOCw3ICs0MzksNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZTo6ZW1pCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgLy8gVGhpcyBwYXNzZXMgTm9F
eHBlY3RlZEZ1bmN0aW9uIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlz
IGluIGEKICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qgb25lIG9mIG91
ciBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCkpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQog
CiAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNTdGF0aWMoKSkgewpAQCAtNDQ2LDE2ICs0NDcsMTYg
QEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEdldFN0YXRpY1ZhcihmdW5jLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMu
Z2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3Rh
cnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0
KCkpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGV4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwg
bV9hcmdzKTsKLSAgICBpbnQgaWRlbnRpZmllclN0YXJ0ID0gZGl2b3QoKSAtIGRpdm90U3RhcnRP
ZmZzZXQoKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oaWRlbnRpZmllclN0
YXJ0ICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCwgZGl2b3RMaW5lKCks
IGRpdm90TGluZVN0YXJ0KCkpOworICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RT
dGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKICAgICBnZW5lcmF0b3IuZW1p
dFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBmdW5jLmdldCgp
LCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1
bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90
U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRG
dW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbEJy
YWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2NCwxMSAr
NDY1LDExIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKIHsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0
KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgp
LCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpLCBz
dWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Np
b25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
dW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJn
dW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0
aW9uLmdldCgpKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZv
dExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgp
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbERvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtNDc4LDkgKzQ3OSw5IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwg
c3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNz
aW9uTGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhw
cmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkp
OwogICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgp
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwg
ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgpKSwgZnVuY3Rp
b24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCkBAIC00ODgsNyArNDg5LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaQogICAgIFJlZlB0cjxMYWJlbD4gcmVhbENhbGwgPSBnZW5lcmF0b3Iu
bmV3TGFiZWwoKTsKICAgICBSZWZQdHI8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFz
ZSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3Qo
KSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQoKSwg
c3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNz
aW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmlu
YWxEZXN0aW5hdGlvbk9ySWdub3JlZCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90RnVu
Y3Rpb25DYWxsKGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7CkBAIC01MDAsNyArNTAx
LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShn
ZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAg
Q2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRM
aXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGlu
YXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5k
T2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cChlbmQuZ2V0KCkpOwogCiAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRMaXN0
OwpAQCAtNTA4LDcgKzUwOSw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbWkKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5l
cmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgp
KTsKICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1f
YXJncyk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENh
bGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQu
Z2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MTYsNyAr
NTE3LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgIHsK
ICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGJhc2UuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlv
bk9ySWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgp
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIH0KICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAg
ICAgcmV0dXJuIGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCk7CkBAIC01MzgsNyArNTM5
LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgIFJlZlB0
cjxMYWJlbD4gcmVhbENhbGwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBSZWZQdHI8TGFi
ZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBi
YXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0
KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhw
cmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1
YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVu
ZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBtX2lkZW50
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZCA9IGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90RnVuY3Rpb25BcHBseShmdW5jdGlvbi5nZXQoKSwg
cmVhbENhbGwuZ2V0KCkpOwpAQCAtNTUzLDIwICs1NTQsMjAgQEAgUmVnaXN0ZXJJRCogQXBwbHlG
dW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1
bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRM
aXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmlu
YWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwg
ZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3Jl
ZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1
bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0gbV9h
cmdzLT5tX2xpc3ROb2RlLT5tX25leHQ7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEFy
Z3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9s
ZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChm
aW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhw
ZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgp
LCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0gb2xkTGlzdDsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
YWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFy
Z3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVk
LmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZv
dExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgQVNTRVJUKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1f
bmV4dCk7CkBAIC01ODcsNyArNTg4LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxE
b3ROb2RlOjplbQogICAgICAgICAgICAgd2hpbGUgKChhcmdzID0gYXJncy0+bV9uZXh0KSkKICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYXJncy0+bV9leHByKTsKIAotICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJncyhmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVk
LmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJnc1JlZ2lz
dGVyLmdldCgpLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb2ZpbGVIb29rUmVnaXN0ZXIu
Z2V0KCksIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2
b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRD
YWxsVmFyYXJncyhmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24u
Z2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJnc1JlZ2lzdGVyLmdldCgpLCBnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHByb2ZpbGVIb29rUmVnaXN0ZXIuZ2V0KCksIGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7CiAgICAgfQpAQCAtNTk1LDcgKzU5Niw3IEBAIFJlZ2lzdGVySUQqIEFw
cGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICB7CiAgICAgICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0
TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0
aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRp
dm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGlu
ZVN0YXJ0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIHJldHVybiBmaW5hbERlc3RpbmF0
aW9uT3JJZ25vcmVkLmdldCgpOwpAQCAtNjQzLDcgKzY0NCw3IEBAIFJlZ2lzdGVySUQqIFBvc3Rm
aXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmdldCgpOwog
ICAgIH0KIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3Rh
cnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICBOb25sb2NhbFJlc29sdmVJbmZvIHJlc29sdmVJbmZv
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0
aEJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgcmVzb2x2
ZVJlc3VsdCwgaWRlbnQsIHJlc29sdmVJbmZvKTsKQEAgLTY2NSwxMCArNjY2LDEwIEBAIFJlZ2lz
dGVySUQqIFBvc3RmaXhOb2RlOjplbWl0QnJhY2tldChCeXQKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShiYXNlTm9kZSwgYnJh
Y2tldEFjY2Vzc29yLT5zdWJzY3JpcHRIYXNBc3NpZ25tZW50cygpLCBzdWJzY3JpcHQtPmlzUHVy
ZShnZW5lcmF0b3IpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0
b3IuZW1pdE5vZGUoc3Vic2NyaXB0KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oYnJhY2tldEFjY2Vzc29yLT5kaXZvdCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90U3RhcnRP
ZmZzZXQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdEVuZE9mZnNldCgpLCBicmFja2V0QWNjZXNz
b3ItPmRpdm90TGluZSgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90TGluZVN0YXJ0KCkpOworICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYnJhY2tldEFjY2Vzc29yLT5kaXZvdCgpLCBi
cmFja2V0QWNjZXNzb3ItPmRpdm90U3RhcnQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdEVuZCgp
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwog
ICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOwot
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNl
dCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVy
dHkuZ2V0KCksIHZhbHVlLmdldCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1ZSk7CiB9CkBAIC02ODUsMTAgKzY4NiwxMCBAQCBS
ZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdERvdChCeXRlY29kCiAKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlTm9kZSk7CiAKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBkb3RBY2Nlc3Nv
ci0+ZGl2b3RTdGFydE9mZnNldCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RFbmRPZmZzZXQoKSwgZG90
QWNjZXNzb3ItPmRpdm90TGluZSgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkb3RBY2Nlc3Nvci0+ZGl2b3QoKSwgZG90
QWNjZXNzb3ItPmRpdm90U3RhcnQoKSwgZG90QWNjZXNzb3ItPmRpdm90RW5kKCkpOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGlkZW50KTsKICAgICBSZWdpc3RlcklEKiBvbGRW
YWx1ZSA9IGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCksIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQo
KSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpKTsKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1ZSk7
CiB9CkBAIC03MTcsNyArNzE4LDcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlUmVzb2x2ZU5vZGU6OmVt
aXRCeXRlYwogICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzUmVnaXN0ZXIoKSkKICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBm
YWxzZSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90
U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlQmFzZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1
bHQsIG1faWRlbnQpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlKSwgYmFzZSwgbV9pZGVudCk7CiB9CkBAIC03
MjksNyArNzMwLDcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlYwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgIFJlZ2lzdGVySUQqIHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKIAot
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNl
dCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMSk7CiB9CiAKQEAgLTczOSw3ICs3
NDAsNyBAQCBSZWdpc3RlcklEKiBEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoCiB7CiAgICAg
UmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKIAotICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZv
dEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgcjAsIG1faWRlbnQpOwogfQogCkBAIC04MjUsNyArODI2LDcgQEAgUmVn
aXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdFJlc29sdmUoQnl0ZQogICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKICAg
ICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3Rh
cnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBOb25sb2NhbFJlc29sdmVJbmZvIHJlc29s
dmVWZXJpZmllcjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZVdpdGhCYXNlRm9yUHV0KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcERzdC5n
ZXQoKSwgcmVzb2x2ZVJlc3VsdCwgaWRlbnQsIHJlc29sdmVWZXJpZmllcik7CkBAIC04NDUsMTAg
Kzg0NiwxMCBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0QnJhY2tldChCeXRlCiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKHN1YnNjcmlw
dCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGJyYWNrZXRB
Y2Nlc3Nvci0+ZGl2b3QoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGJy
YWNrZXRBY2Nlc3Nvci0+ZGl2b3RFbmRPZmZzZXQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdExp
bmUoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3QoKSwgYnJhY2tldEFjY2Vz
c29yLT5kaXZvdFN0YXJ0KCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKHByb3BEc3QuZ2V0KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB2
YWx1ZSwgbV9vcGVyYXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBk
aXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZh
bChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUpOwogICAgIHJldHVybiBnZW5lcmF0
b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQpAQCAt
ODYzLDEwICs4NjQsMTAgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdERvdChCeXRlY29k
ZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2VO
b2RlKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZG90QWNj
ZXNzb3ItPmRpdm90KCksIGRvdEFjY2Vzc29yLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGRvdEFjY2Vz
c29yLT5kaXZvdEVuZE9mZnNldCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RMaW5lKCksIGRvdEFjY2Vz
c29yLT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RTdGFydCgpLCBkb3RBY2Nl
c3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQocHJvcERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgaWRlbnQpOwogICAgIGVtaXRJbmNP
ckRlYyhnZW5lcmF0b3IsIHZhbHVlLCBtX29wZXJhdG9yKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQo
KSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVlKTsKICAgICByZXR1cm4g
Z2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsK
IH0KQEAgLTg5Miw3ICs4OTMsNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0CiBSZWdpc3RlcklEKiBVbmFyeU9wTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWdpc3RlcklEKiBz
cmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKHN0YXJ0T2Zmc2V0KCksIDAsIDAsIGxpbmVObygpLCBsaW5lU3RhcnRPZmZzZXQo
KSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhwb3NpdGlvbigpLCBwb3NpdGlv
bigpLCBwb3NpdGlvbigpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wY29k
ZUlEKCksIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHNyYyk7CiB9CiAKQEAgLTEw
MjQsOCArMTAyNSw3IEBAIFJlZ2lzdGVySUQqIEJpbmFyeU9wTm9kZTo6ZW1pdFN0cmNhdChCeXQK
ICAgICAvLyBDZXJ0YWluIHJlYWQtbW9kaWZ5IG5vZGVzIHJlcXVpcmUgZXhwcmVzc2lvbiBpbmZv
IHRvIGJlIGVtaXR0ZWQgKmFmdGVyKiBtX3JpZ2h0IGhhcyBiZWVuIGdlbmVyYXRlZC4KICAgICAv
LyBJZiB0aGlzIGlzIHJlcXVpcmVkIHRoZSBub2RlIGlzIHBhc3NlZCBhcyAnZW1pdEV4cHJlc3Np
b25JbmZvRm9yTWUnOyBkbyBzbyBub3cuCiAgICAgaWYgKGVtaXRFeHByZXNzaW9uSW5mb0Zvck1l
KQotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGVtaXRFeHByZXNzaW9uSW5m
b0Zvck1lLT5kaXZvdCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RTdGFydE9mZnNl
dCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RFbmRPZmZzZXQoKSwgZW1pdEV4cHJl
c3Npb25JbmZvRm9yTWUtPmRpdm90TGluZSgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2
b3RMaW5lU3RhcnQoKSk7Ci0KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhl
bWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3QoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUt
PmRpdm90U3RhcnQoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90RW5kKCkpOwogICAg
IC8vIElmIHRoZXJlIGlzIGFuIGFzc2lnbm1lbnQgY29udmVydCB0aGUgbGhzIG5vdy4gIFRoaXMg
d2lsbCBhbHNvIGNvcHkgbGhzIHRvCiAgICAgLy8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB3ZSBh
bGxvY2F0ZWQgZm9yIGl0LgogICAgIGlmIChsaHMpCkBAIC0xMTY0LDcgKzExNjQsNyBAQCBSZWdp
c3RlcklEKiBUaHJvd2FibGVCaW5hcnlPcE5vZGU6OmVtaXRCCiB7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9leHByMSwg
bV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAg
UmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyKTsKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChvcGNvZGVJRCgpLCBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyLCBP
cGVyYW5kVHlwZXMobV9leHByMS0+cmVzdWx0RGVzY3JpcHRvcigpLCBtX2V4cHIyLT5yZXN1bHRE
ZXNjcmlwdG9yKCkpKTsKIH0KIApAQCAtMTE3NiwxMyArMTE3NiwxMyBAQCBSZWdpc3RlcklEKiBJ
bnN0YW5jZU9mTm9kZTo6ZW1pdEJ5dGVjb2RlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRzdFJl
ZyA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSk7CiAgICAgUmVm
UHRyPExhYmVsPiB0YXJnZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVu
ZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0Q2hlY2tIYXNJbnN0YW5jZShkc3RSZWcuZ2V0KCksIHNyYzEuZ2V0
KCksIHNyYzIuZ2V0KCksIHRhcmdldC5nZXQoKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwg
ZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQocHJvdG90eXBlLmdldCgpLCBzcmMyLmdldCgpLCBnZW5lcmF0b3Iudm0o
KS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBk
aXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lzdGVy
SUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SW5zdGFuY2VPZihkc3RSZWcuZ2V0KCksIHNyYzEu
Z2V0KCksIHByb3RvdHlwZS5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0YXJnZXQu
Z2V0KCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMjkzLDggKzEyOTMsNyBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBSZWdpc3RlcklEKiBlbWl0UmVhCiAgICAgLy8gQ2VydGFpbiByZWFkLW1v
ZGlmeSBub2RlcyByZXF1aXJlIGV4cHJlc3Npb24gaW5mbyB0byBiZSBlbWl0dGVkICphZnRlciog
bV9yaWdodCBoYXMgYmVlbiBnZW5lcmF0ZWQuCiAgICAgLy8gSWYgdGhpcyBpcyByZXF1aXJlZCB0
aGUgbm9kZSBpcyBwYXNzZWQgYXMgJ2VtaXRFeHByZXNzaW9uSW5mb0Zvck1lJzsgZG8gc28gbm93
LgogICAgIGlmIChlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZSkKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3QoKSwgZW1pdEV4
cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90U3RhcnRPZmZzZXQoKSwgZW1pdEV4cHJlc3Npb25JbmZv
Rm9yTWUtPmRpdm90RW5kT2Zmc2V0KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdExp
bmUoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90TGluZVN0YXJ0KCkpOwotCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUt
PmRpdm90KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdFN0YXJ0KCksIGVtaXRFeHBy
ZXNzaW9uSW5mb0Zvck1lLT5kaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRC
aW5hcnlPcChvcGNvZGVJRCwgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CiB9CiAKQEAgLTEzMjgs
NyArMTMyNyw4IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKICAg
ICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBk
aXZvdFN0YXJ0T2Zmc2V0KCkgKyBtX2lkZW50Lmxlbmd0aCgpLCBtX2lkZW50Lmxlbmd0aCgpLCAw
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgSlNUZXh0UG9zaXRpb24gbmV3
RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50Lmxlbmd0aCgpOworICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwogICAg
IE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBzcmMxLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50LCByZXNv
bHZlVmVyaWZpZXIpOwogICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNz
aWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5n
ZXQoKSksIHNyYzEuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1
bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0aGlz
KTsKQEAgLTEzNjMsNyArMTM2Myw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjpl
bWl0Qnl0ZWMKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAg
ICAgIGRzdCA9IDA7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
ZHN0LCBtX3JpZ2h0KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCks
IGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90
TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRU
b0Jhc2UoYmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUsIHJlc29sdmVWZXJpZmllcik7CiB9CiAK
QEAgLTEzNzQsNyArMTM3NCw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkRvdE5vZGU6OmVtaXRCeXRl
Y29kZSgKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZv
ckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQ
dXJlKGdlbmVyYXRvcikpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRv
ci5kZXN0aW5hdGlvbkZvckFzc2lnblJlc3VsdChkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJlc3Vs
dCA9IGdlbmVyYXRvci5lbWl0Tm9kZSh2YWx1ZS5nZXQoKSwgbV9yaWdodCk7Ci0gICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90
RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9y
ZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIGZvcndhcmRSZXN1bHQpOwogICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZvcndhcmRS
ZXN1bHQpOwpAQCAtMTM4NiwxMSArMTM4NiwxMSBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5RG90
Tm9kZTo6ZW1pdEJ5dGVjCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMs
IG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgp
LCBzdWJleHByZXNzaW9uRW5kT2Zmc2V0KCksIHN1YmV4cHJlc3Npb25MaW5lKCksIHN1YmV4cHJl
c3Npb25MaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJl
eHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQo
KSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CiAg
ICAgUmVnaXN0ZXJJRCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdl
bmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZh
bHVlLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6
dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQs
IHVwZGF0ZWRWYWx1ZSk7CiB9CiAKQEAgLTE0MTAsNyArMTQxMCw3IEBAIFJlZ2lzdGVySUQqIEFz
c2lnbkJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUg
PSBnZW5lcmF0b3IuZGVzdGluYXRpb25Gb3JBc3NpZ25SZXN1bHQoZHN0KTsKICAgICBSZWdpc3Rl
cklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUodmFsdWUuZ2V0KCksIG1fcmlnaHQpOwog
Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zm
c2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2Vu
ZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGlu
YXRpb25JZk5lZWRlZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwg
Zm9yd2FyZFJlc3VsdCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgZm9yd2FyZFJlc3VsdCk7CkBAIC0xNDIzLDExICsxNDIzLDExIEBAIFJlZ2lz
dGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vi
c2NyaXB0SGFzQXNzaWdubWVudHMgfHwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlw
dC0+aXNQdXJlKGdlbmVyYXRvcikgJiYgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRI
YW5kU2lkZShtX3N1YnNjcmlwdCwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5pc1B1
cmUoZ2VuZXJhdG9yKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4
cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVzc2lv
bkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0YXJ0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90
KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRv
ciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdl
dCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93
blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAKLSAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRP
ZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB1cGRh
dGVkVmFsdWUpOwogCiAgICAgcmV0dXJuIHVwZGF0ZWRWYWx1ZTsKQEAgLTE3MzksNyArMTczOSw3
IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICAgICAgICAg
IE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAgICAgICAgICAgUmVnaXN0
ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCwgcmVzb2x2ZVZlcmlmaWVyKTsKIAot
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFy
dCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0
VG9CYXNlKGJhc2UsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIHJlc29sdmVWZXJpZmllcik7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleHBlY3RlZFN1YnNjcmlwdCA9IGdlbmVyYXRvci5l
bWl0TW92ZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzUz
LDcgKzE3NTMsNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwogICAgICAg
ICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2Uo
KSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5k
aXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGFzc2lnbk5vZGUtPmRpdm90
RW5kT2Zmc2V0KCksIGFzc2lnbk5vZGUtPmRpdm90TGluZSgpLCBhc3NpZ25Ob2RlLT5kaXZvdExp
bmVTdGFydCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25O
b2RlLT5kaXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90
RW5kKCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHByb3Bl
cnR5TmFtZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fbGV4cHItPmlzQnJhY2tl
dEFjY2Vzc29yTm9kZSgpKTsKQEAgLTE3NjMsNyArMTc2Myw3IEBAIHZvaWQgRm9ySW5Ob2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+YmFzZSgpKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogc3Vic2NyaXB0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPnN1YnNjcmlw
dCgpKTsKICAgICAgICAgCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYXNz
aWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydE9mZnNldCgpLCBhc3NpZ25O
b2RlLT5kaXZvdEVuZE9mZnNldCgpLCBhc3NpZ25Ob2RlLT5kaXZvdExpbmUoKSwgYXNzaWduTm9k
ZS0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgpLCBhc3NpZ25O
b2RlLT5kaXZvdEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdl
dCgpLCBzdWJzY3JpcHQsIHByb3BlcnR5TmFtZSk7CiAgICAgfSAgIAogCkBAIC0xODU5LDcgKzE4
NTksNyBAQCB2b2lkIFdpdGhOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lCiAgICAgZ2Vu
ZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fZXhwcmVzc2lvbkxlbmd0aCwg
MCwgbV9kaXZvdExpbmUsIG1fZGl2b3RMaW5lU3RhcnQpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8obV9kaXZvdCwgbV9kaXZvdCAtIG1fZXhwcmVzc2lvbkxlbmd0aCwgbV9kaXZv
dCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXNoV2l0aFNjb3BlKHNjb3BlLmdldCgpKTsKICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQ
b3BTY29wZSgpOwpAQCAtMjA2Myw3ICsyMDYzLDcgQEAgdm9pZCBUaHJvd05vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbgogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQo
KSkKICAgICAgICAgZHN0ID0gMDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhwciA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUo
KSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0VGhy
b3coZXhwci5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCShyZXZpc2lvbiAxNTI1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjAgKzMzLDEyIEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQVNUQnVpbGRlciB7Ci0gICAgc3RydWN0IFBvc2l0aW9u
SW5mbyB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zOwotICAgICAgICB1bnNpZ25lZCBsaW5l
OwotICAgICAgICB1bnNpZ25lZCBsaW5lU3RhcnRQb3M7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBC
aW5hcnlPcEluZm8gewogICAgICAgICBCaW5hcnlPcEluZm8oKSB7fQotICAgICAgICBCaW5hcnlP
cEluZm8oaW50IG90aGVyU3RhcnQsIGludCBvdGhlckRpdm90LCBpbnQgb3RoZXJFbmQsIHVuc2ln
bmVkIG90aGVyRGl2b3RMaW5lLCB1bnNpZ25lZCBvdGhlckRpdm90TGluZVN0YXJ0LCBib29sIHJo
c0hhc0Fzc2lnbm1lbnQpCisgICAgICAgIEJpbmFyeU9wSW5mbyhjb25zdCBKU1RleHRQb3NpdGlv
biYgb3RoZXJTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIG90aGVyRGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBvdGhlckVuZCwgYm9vbCByaHNIYXNBc3NpZ25tZW50KQogICAgICAgICAg
ICAgOiBzdGFydChvdGhlclN0YXJ0KQogICAgICAgICAgICAgLCBkaXZvdChvdGhlckRpdm90KQog
ICAgICAgICAgICAgLCBlbmQob3RoZXJFbmQpCi0gICAgICAgICAgICAsIGRpdm90TGluZShvdGhl
ckRpdm90TGluZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQob3RoZXJEaXZvdExpbmVT
dGFydCkKICAgICAgICAgICAgICwgaGFzQXNzaWdubWVudChyaHNIYXNBc3NpZ25tZW50KQogICAg
ICAgICB7CiAgICAgICAgIH0KQEAgLTU0LDM5ICs0NiwzMSBAQCBjbGFzcyBBU1RCdWlsZGVyIHsK
ICAgICAgICAgICAgIDogc3RhcnQobGhzLnN0YXJ0KQogICAgICAgICAgICAgLCBkaXZvdChyaHMu
c3RhcnQpCiAgICAgICAgICAgICAsIGVuZChyaHMuZW5kKQotICAgICAgICAgICAgLCBkaXZvdExp
bmUocmhzLmRpdm90TGluZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQocmhzLmRpdm90
TGluZVN0YXJ0KQogICAgICAgICAgICAgLCBoYXNBc3NpZ25tZW50KGxocy5oYXNBc3NpZ25tZW50
IHx8IHJocy5oYXNBc3NpZ25tZW50KQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgaW50
IHN0YXJ0OwotICAgICAgICBpbnQgZGl2b3Q7Ci0gICAgICAgIGludCBlbmQ7Ci0gICAgICAgIHVu
c2lnbmVkIGRpdm90TGluZTsKLSAgICAgICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQ7CisgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBkaXZvdDsK
KyAgICAgICAgSlNUZXh0UG9zaXRpb24gZW5kOwogICAgICAgICBib29sIGhhc0Fzc2lnbm1lbnQ7
CiAgICAgfTsKICAgICAKICAgICAKICAgICBzdHJ1Y3QgQXNzaWdubWVudEluZm8gewogICAgICAg
ICBBc3NpZ25tZW50SW5mbygpIHt9Ci0gICAgICAgIEFzc2lnbm1lbnRJbmZvKEV4cHJlc3Npb25O
b2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQsIGludCBpbml0QXNzaWdubWVudHMsIE9wZXJh
dG9yIG9wKQorICAgICAgICBBc3NpZ25tZW50SW5mbyhFeHByZXNzaW9uTm9kZSogbm9kZSwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGlu
dCBpbml0QXNzaWdubWVudHMsIE9wZXJhdG9yIG9wKQogICAgICAgICAgICAgOiBtX25vZGUobm9k
ZSkKICAgICAgICAgICAgICwgbV9zdGFydChzdGFydCkKICAgICAgICAgICAgICwgbV9kaXZvdChk
aXZvdCkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmUoZGl2b3RMaW5lKQotICAgICAgICAgICAg
LCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0YXJ0KQogICAgICAgICAgICAgLCBtX2luaXRB
c3NpZ25tZW50cyhpbml0QXNzaWdubWVudHMpCiAgICAgICAgICAgICAsIG1fb3Aob3ApCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90ID49IG1fZGl2b3RMaW5lU3RhcnQpOwot
ICAgICAgICAgICAgQVNTRVJUKG1fc3RhcnQgPj0gbV9kaXZvdExpbmVTdGFydCk7CisgICAgICAg
ICAgICBBU1NFUlQobV9kaXZvdC5vZmZzZXQgPj0gbV9kaXZvdC5saW5lU3RhcnRPZmZzZXQpOwor
ICAgICAgICAgICAgQVNTRVJUKG1fc3RhcnQub2Zmc2V0ID49IG1fc3RhcnQubGluZVN0YXJ0T2Zm
c2V0KTsKICAgICAgICAgfQogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9ub2RlOwotICAgICAg
ICB1bnNpZ25lZCBtX3N0YXJ0OwotICAgICAgICB1bnNpZ25lZCBtX2Rpdm90OwotICAgICAgICB1
bnNpZ25lZCBtX2Rpdm90TGluZTsKLSAgICAgICAgdW5zaWduZWQgbV9kaXZvdExpbmVTdGFydDsK
KyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9zdGFydDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24g
bV9kaXZvdDsKICAgICAgICAgaW50IG1faW5pdEFzc2lnbm1lbnRzOwogICAgICAgICBPcGVyYXRv
ciBtX29wOwogICAgIH07CkBAIC0xMzEsNyArMTE1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdCBpbnQgIERvbnRCdWlsZFN0cmluZ3MgPSAwOwogCiAgICAgRXhwcmVzc2lvbk5vZGUqIG1h
a2VCaW5hcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCB0b2tlbiwgc3RkOjpwYWly
PEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2Rl
KiwgQmluYXJ5T3BJbmZvPik7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVu
dHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIHVuc2lnbmVkIGRpdm90LCBpbnQgZW5kLCB1bnNpZ25l
ZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICBFeHByZXNzaW9uTm9k
ZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
bk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdEVuZCk7CiAKICAgICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VF
bGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV92bSkgSlNDOjpTb3VyY2VFbGVtZW50cygpOyB9CiAK
QEAgLTE0NCwxMSArMTI4LDExIEBAIHB1YmxpYzoKIAogICAgIENvbW1hTm9kZSogY3JlYXRlQ29t
bWFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBs
aHMsIEV4cHJlc3Npb25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV92bSkgQ29tbWFOb2RlKGxv
Y2F0aW9uLCBsaHMsIHJocyk7IH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3Is
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOwotICAgIEV4cHJlc3Npb25Ob2Rl
KiBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSos
IE9wZXJhdG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VQ
b3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJh
dG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1
bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25O
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBPcGVyYXRv
ciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIGxlZnRIYXNBc3NpZ25tZW50cywgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CisgICAgRXhw
cmVzc2lvbk5vZGUqIG1ha2VQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKKyAgICBF
eHByZXNzaW9uTm9kZSogbWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKICAg
ICBFeHByZXNzaW9uTm9kZSogbWFrZVR5cGVPZk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqKTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZURlbGV0ZU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBpbnQgc3RhcnQsIGludCBkaXZv
dCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7
IAorICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKICAgICBF
eHByZXNzaW9uTm9kZSogbWFrZU5lZ2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqKTsKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdHdpc2VOb3ROb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VNdWx0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSog
bGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwpA
QCAtMTgxLDExICsxNjUsMTEgQEAgcHVibGljOgogICAgICAgICB1c2VzVGhpcygpOwogICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBUaGlzTm9kZShsb2NhdGlvbik7CiAgICAgfQotICAgIEV4cHJl
c3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRl
UmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYg
KG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCiAgICAgICAgICAgICB1
c2VzQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFJlc29sdmVOb2RlKGxv
Y2F0aW9uLCAqaWRlbnQsIHN0YXJ0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgcmV0dXJuIG5ldyAobV92bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sICppZGVudCwgc3RhcnQp
OwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKSB7IHJldHVybiBuZXcgKG1fdm0pIE9iamVjdExpdGVy
YWxOb2RlKGxvY2F0aW9uKTsgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRl
cmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5TGlzdE5vZGUqIHBy
b3BlcnRpZXMpIHsgcmV0dXJuIG5ldyAobV92bSkgT2JqZWN0TGl0ZXJhbE5vZGUobG9jYXRpb24s
IHByb3BlcnRpZXMpOyB9CkBAIC0yMjgsNDEgKzIxMiw0MiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIE51bGxOb2RlKGxvY2F0aW9uKTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlQnJhY2tldEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5LCBib29s
IHByb3BlcnR5SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogcHJvcGVydHksIGJvb2wg
cHJvcGVydHlIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAg
ewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBCcmFja2V0
QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlIYXNBc3NpZ25t
ZW50cyk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwg
ZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG90QWNjZXNzKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVy
KiBwcm9wZXJ0eSwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0
ZURvdEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciogcHJvcGVydHksIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZW5kKQogICAgIHsKICAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX3Zt
KSBEb3RBY2Nlc3Nvck5vZGUobG9jYXRpb24sIGJhc2UsICpwcm9wZXJ0eSk7Ci0gICAgICAgIHNl
dEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQs
IGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlUmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdzLCBpbnQgc3Rh
cnQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncywgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYgKFlhcnI6OmNoZWNr
U3ludGF4KHBhdHRlcm4uc3RyaW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IFJlZ0V4cE5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIFJlZ0V4cE5vZGUobG9jYXRpb24sIHBhdHRl
cm4sIGZsYWdzKTsKICAgICAgICAgaW50IHNpemUgPSBwYXR0ZXJuLmxlbmd0aCgpICsgMjsgLy8g
KyAyIGZvciB0aGUgdHdvIC8ncwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBz
dGFydCwgc3RhcnQgKyBzaXplLCBzdGFydCArIHNpemUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3Rh
cnQpOworICAgICAgICBKU1RleHRQb3NpdGlvbiBlbmQgPSBzdGFydCArIHNpemU7CisgICAgICAg
IHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAgIHJl
dHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1
bWVudHNOb2RlKiBhcmd1bWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNp
Z25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1f
dm0pIE5ld0V4cHJOb2RlKGxvY2F0aW9uLCBleHByLCBhcmd1bWVudHMpOwotICAgICAgICBzZXRF
eGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZv
dExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBk
aXZvdCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lv
bk5vZGUqIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3
RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
KQogICAgIHsKICAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIE5ld0V4cHJO
b2RlKGxvY2F0aW9uLCBleHByKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwg
c3RhcnQsIGVuZCwgZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0
RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogCkBAIC0yNzEsMTIgKzI1NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBsaHMs
IHJocyk7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29sdmUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNp
Z25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmhzLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIGlmIChyaHMtPmlzRnVuY0V4cHJOb2Rl
KCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihyaHMpLT5ib2R5KCkt
PnNldEluZmVycmVkTmFtZShpZGVudCk7CiAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBub2Rl
ID0gbmV3IChtX3ZtKSBBc3NpZ25SZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIHJocyk7Ci0g
ICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKQEAg
LTM1NSwxMCArMzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0K
IAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUV4cHJTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVu
ZCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFeHByU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGludCBlbmQpCiAgICAgewogICAgICAgICBFeHByU3RhdGVtZW50Tm9kZSog
cmVzdWx0ID0gbmV3IChtX3ZtKSBFeHByU3RhdGVtZW50Tm9kZShsb2NhdGlvbiwgZXhwcik7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBs
b2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5s
aW5lLCBlbmQsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTM3NiwxOSArMzYxLDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVG
b3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGl0
ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQg
ZW5kLCBpbnQgaW5pdFN0YXJ0LCBpbnQgaW5pdEVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3Rh
dGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIs
IEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGVuZCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQog
ICAgIHsKLSAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZSht
X3ZtLCBsb2NhdGlvbiwgKmlkZW50LCBpbml0aWFsaXplciwgaXRlciwgc3RhdGVtZW50cywgaW5p
dFN0YXJ0LCBpbml0U3RhcnQgLSBzdGFydCwgaW5pdEVuZCAtIGluaXRTdGFydCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX3Zt
KSBGb3JJbk5vZGUobV92bSwgbG9jYXRpb24sICppZGVudCwgaW5pdGlhbGl6ZXIsIGl0ZXIsIHN0
YXRlbWVudHMsIGluaXRTdGFydCwgc3RhcnQsIGluaXRFbmQpOwogICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5s
aW5lU3RhcnRPZmZzZXQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0
YXJ0LCBkaXZvdCArIDEsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAg
IHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGRpdm90ICsgMSwgZW5kKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVG
b3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGxocywgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGlu
dCBlU3RhcnQsIGludCBlRGl2b3QsIGludCBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0
ZW1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZURpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5k
KQogICAgIHsKICAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9k
ZShsb2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9m
ZnNldCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRGl2
b3QsIGVFbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzZXRFeGNlcHRp
b25Mb2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZURpdm90LCBlRW5kKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKQEAgLTQwNSw0MyArMzkwLDQzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5T
dGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHJlc3Npb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5k
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBT
dGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb24sIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIFJl
dHVybk5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgUmV0dXJuTm9kZShsb2NhdGlvbiwgZXhwcmVz
c2lvbik7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5k
LCBlRW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFy
dCwgZW5kLCBlbmQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5lLCBlbmQubGlu
ZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBp
bnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSwgdW5zaWduZWQgZW5kTGluZVN0YXJ0KQorICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKICAgICB7CiAgICAgICAgIEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBC
cmVha05vZGUobV92bSwgbG9jYXRpb24pOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihy
ZXN1bHQsIGVTdGFydCwgZUVuZCwgZUVuZCwgZW5kTGluZSwgZW5kTGluZVN0YXJ0KTsKLSAgICAg
ICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNl
dCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRp
b24ocmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFy
dC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50
IGVuZExpbmUsIHVuc2lnbmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcg
KG1fdm0pIEJyZWFrTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKLSAgICAgICAgc2V0RXhjZXB0aW9u
TG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQsIGVuZExpbmUsIGVuZExpbmVTdGFy
dCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24u
c3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIHVu
c2lnbmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBD
b250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQ29udGludWVOb2RlKG1fdm0sIGxvY2F0
aW9uKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQs
IGVFbmQsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFy
dE9mZnNldCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVu
ZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0
YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwg
aW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25l
ZCBlbmRMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRl
bnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVu
ZCkKICAgICB7CiAgICAgICAgIENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBDb250
aW51ZU5vZGUobG9jYXRpb24sICppZGVudCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9u
KHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kLCBlbmRMaW5lLCBlbmRMaW5lU3RhcnQpOwotICAg
ICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zm
c2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2Nh
dGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0LmxpbmUsIGVuZC5saW5lLCBzdGFydC5vZmZzZXQsIHN0YXJ0LmxpbmVTdGFydE9mZnNldCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00NzYsMjYgKzQ2MSwyNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlTGFiZWxTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZv
dExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVMYWJlbFN0YXRlbWVudChjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgU3Rh
dGVtZW50Tm9kZSogc3RhdGVtZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBMYWJlbE5vZGUqIHJlc3VsdCA9
IG5ldyAobV92bSkgTGFiZWxOb2RlKGxvY2F0aW9uLCAqaWRlbnQsIHN0YXRlbWVudCk7Ci0gICAg
ICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kLCBkaXZvdExp
bmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0
LCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVu
dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgc3RhcnRMaW5lLCB1bnNp
Z25lZCBlbmRMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0
YXRlbWVudCwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQsIHVuc2ln
bmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgZW5kTGluZSkKICAgICB7CiAgICAgICAgIHVzZXNXaXRo
KCk7Ci0gICAgICAgIFdpdGhOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFdpdGhOb2RlKGxvY2F0
aW9uLCBleHByLCBzdGF0ZW1lbnQsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCwgZW5k
IC0gc3RhcnQpOworICAgICAgICBXaXRoTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBXaXRoTm9k
ZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAg
cmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwg
bG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
ICAgIAogICAgIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRocm93U3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3Rh
cnQsIGludCBlbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRo
cm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBleHByLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBlbmQpCiAgICAgewogICAgICAgICBUaHJvd05vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkg
VGhyb3dOb2RlKGxvY2F0aW9uLCBleHByKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRM
aW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zm
c2V0KTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBl
bmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQp
OworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtNTQ2LDEwICs1MzEsMTAg
QEAgcHVibGljOgogCiAgICAgaW50IGV2YWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENv
dW50OyB9CiAKLSAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKGludCYgb3BlcmFu
ZFN0YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiBjdXJyZW50LCBpbnQgZXhwclN0YXJ0LCBpbnQg
bGhzLCBpbnQgcmhzLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
LCBib29sIGhhc0Fzc2lnbm1lbnRzKQorICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lvbklu
Zm8oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIGN1cnJlbnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBleHByU3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBsaHMsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiByaHMsIGJvb2wgaGFzQXNzaWdubWVudHMpCiAgICAgewogICAg
ICAgICBvcGVyYW5kU3RhY2tEZXB0aCsrOwotICAgICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoY3VycmVudCwgQmluYXJ5T3BJbmZvKGV4cHJTdGFydCwgbGhz
LCByaHMsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQsIGhhc0Fzc2lnbm1lbnRzKSkpOworICAg
ICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VycmVudCwg
QmluYXJ5T3BJbmZvKGV4cHJTdGFydCwgbGhzLCByaHMsIGhhc0Fzc2lnbm1lbnRzKSkpOwogICAg
IH0KIAogICAgIC8vIExvZ2ljIHRvIGhhbmRsZSBkYXRhc3RydWN0dXJlcyB1c2VkIGR1cmluZyBw
YXJzaW5nIG9mIGJpbmFyeSBleHByZXNzaW9ucwpAQCAtNTg2LDExICs1NzEsMTAgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIGFwcGVuZFVu
YXJ5VG9rZW4oaW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0eXBlLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICB2b2lkIGFw
cGVuZFVuYXJ5VG9rZW4oaW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0eXBlLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgewogICAgICAgICB0b2tlblN0YWNrRGVwdGgrKzsKLSAg
ICAgICAgUG9zaXRpb25JbmZvIHBvc2l0aW9uID0geyBzdGFydCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCB9OwotICAgICAgICBtX3VuYXJ5VG9rZW5TdGFjay5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIodHlwZSwgcG9zaXRpb24pKTsKKyAgICAgICAgbV91bmFyeVRva2VuU3RhY2suYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHR5cGUsIHN0YXJ0KSk7CiAgICAgfQogCiAgICAgaW50IHVuYXJ5VG9rZW5T
dGFja0xhc3RUeXBlKGludCYpCkBAIC01OTgsMzQgKzU4MiwyOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3VuYXJ5VG9rZW5TdGFjay5sYXN0KCkuZmlyc3Q7CiAgICAgfQogICAgIAotICAg
IHVuc2lnbmVkIHVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydChpbnQmKQorICAgIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiB1bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQoaW50JikKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX3VuYXJ5VG9rZW5TdGFjay5sYXN0KCkuc2Vjb25kLnN0YXJ0UG9zOworICAgICAg
ICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgpLnNlY29uZDsKICAgICB9CiAgICAgCi0g
ICAgdW5zaWduZWQgdW5hcnlUb2tlblN0YWNrTGFzdExpbmVTdGFydFBvc2l0aW9uKGludCYpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgpLnNlY29uZC5saW5l
U3RhcnRQb3M7Ci0gICAgfQotCiAgICAgdm9pZCB1bmFyeVRva2VuU3RhY2tSZW1vdmVMYXN0KGlu
dCYgdG9rZW5TdGFja0RlcHRoKQogICAgIHsKICAgICAgICAgdG9rZW5TdGFja0RlcHRoLS07CiAg
ICAgICAgIG1fdW5hcnlUb2tlblN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBhc3NpZ25tZW50U3RhY2tBcHBlbmQoaW50JiBhc3NpZ25tZW50U3RhY2tEZXB0aCwgRXhw
cmVzc2lvbk5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCwgaW50IGFzc2lnbm1lbnRDb3Vu
dCwgT3BlcmF0b3Igb3ApCisgICAgdm9pZCBhc3NpZ25tZW50U3RhY2tBcHBlbmQoaW50JiBhc3Np
Z25tZW50U3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBpbnQgYXNzaWdubWVudENv
dW50LCBPcGVyYXRvciBvcCkKICAgICB7CiAgICAgICAgIGFzc2lnbm1lbnRTdGFja0RlcHRoKys7
Ci0gICAgICAgIEFTU0VSVChzdGFydCA+PSBkaXZvdExpbmVTdGFydCk7Ci0gICAgICAgIEFTU0VS
VChkaXZvdCA+PSBkaXZvdExpbmVTdGFydCk7Ci0gICAgICAgIG1fYXNzaWdubWVudEluZm9TdGFj
ay5hcHBlbmQoQXNzaWdubWVudEluZm8obm9kZSwgc3RhcnQsIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0LCBhc3NpZ25tZW50Q291bnQsIG9wKSk7CisgICAgICAgIEFTU0VSVChzdGFy
dC5vZmZzZXQgPj0gc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKGRpdm90
Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBtX2Fzc2lnbm1lbnRJ
bmZvU3RhY2suYXBwZW5kKEFzc2lnbm1lbnRJbmZvKG5vZGUsIHN0YXJ0LCBkaXZvdCwgYXNzaWdu
bWVudENvdW50LCBvcCkpOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBc3Np
Z25tZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCYgYXNzaWdubWVudFN0
YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBpbml0aWFsQXNzaWdubWVudENvdW50
LCBpbnQgY3VycmVudEFzc2lnbm1lbnRDb3VudCwgaW50IGxhc3RUb2tlbkVuZCkKKyAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlQXNzaWdubWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBpbnQmIGFzc2lnbm1lbnRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogcmhzLCBpbnQg
aW5pdGlhbEFzc2lnbm1lbnRDb3VudCwgaW50IGN1cnJlbnRBc3NpZ25tZW50Q291bnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBsYXN0VG9rZW5FbmQpCiAgICAgewogICAgICAgICBBc3NpZ25tZW50
SW5mbyYgaW5mbyA9IG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCk7Ci0gICAgICAgIEV4cHJl
c3Npb25Ob2RlKiByZXN1bHQgPSBtYWtlQXNzaWduTm9kZShsb2NhdGlvbiwgaW5mby5tX25vZGUs
IGluZm8ubV9vcCwgcmhzLCBpbmZvLm1faW5pdEFzc2lnbm1lbnRzICE9IGluaXRpYWxBc3NpZ25t
ZW50Q291bnQsIGluZm8ubV9pbml0QXNzaWdubWVudHMgIT0gY3VycmVudEFzc2lnbm1lbnRDb3Vu
dCwgaW5mby5tX3N0YXJ0LCBpbmZvLm1fZGl2b3QgKyAxLCBsYXN0VG9rZW5FbmQsIGluZm8ubV9k
aXZvdExpbmUsIGluZm8ubV9kaXZvdExpbmVTdGFydCk7CisgICAgICAgIEV4cHJlc3Npb25Ob2Rl
KiByZXN1bHQgPSBtYWtlQXNzaWduTm9kZShsb2NhdGlvbiwgaW5mby5tX25vZGUsIGluZm8ubV9v
cCwgcmhzLCBpbmZvLm1faW5pdEFzc2lnbm1lbnRzICE9IGluaXRpYWxBc3NpZ25tZW50Q291bnQs
IGluZm8ubV9pbml0QXNzaWdubWVudHMgIT0gY3VycmVudEFzc2lnbm1lbnRDb3VudCwgaW5mby5t
X3N0YXJ0LCBpbmZvLm1fZGl2b3QgKyAxLCBsYXN0VG9rZW5FbmQpOwogICAgICAgICBtX2Fzc2ln
bm1lbnRJbmZvU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICBhc3NpZ25tZW50U3RhY2tEZXB0
aC0tOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjUxLDEwICs2MzAsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgIH07CiAKLSAgICBzdGF0aWMgdm9p
ZCBzZXRFeGNlcHRpb25Mb2NhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgc3RhdGljIHZvaWQgc2V0RXhjZXB0
aW9uTG9jYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChkaXZvdCA+PSBk
aXZvdExpbmVTdGFydCk7Ci0gICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQp
OworICAgICAgICBub2RlLT5zZXRFeGNlcHRpb25Tb3VyY2VDb2RlKGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCk7CiAgICAgfQogCiAgICAgdm9pZCBpbmNDb25zdGFudHMoKSB7IG1fc2NvcGUu
bV9udW1Db25zdGFudHMrKzsgfQpAQCAtNjc4LDcgKzY1Nyw3IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPEJpbmFyeU9wZXJhbmQsIDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVy
YW5kU3RhY2s7CiAgICAgVmVjdG9yPEFzc2lnbm1lbnRJbmZvLCAxMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fYXNzaWdubWVudEluZm9TdGFjazsKICAgICBWZWN0b3I8cGFpcjxpbnQsIGludD4s
IDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVyYXRvclN0YWNrOwotICAgIFZl
Y3RvcjxwYWlyPGludCwgUG9zaXRpb25JbmZvPiwgMTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X3VuYXJ5VG9rZW5TdGFjazsKKyAgICBWZWN0b3I8cGFpcjxpbnQsIEpTVGV4dFBvc2l0aW9uPiwg
MTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3VuYXJ5VG9rZW5TdGFjazsKICAgICBpbnQgbV9l
dmFsQ291bnQ7CiB9OwogCkBAIC02OTEsMjEgKzY3MCwyMSBAQCBFeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZVR5cGVPZk5vCiAgICAgcmV0dXJuIG5ldyAobV92bSkgVHlwZU9mVmFsdWVO
b2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKCFl
eHByLT5pc0xvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVZhbHVl
Tm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgaWYgKGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewog
ICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4o
ZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0
aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBk
aXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRp
dm90LCBzdGFydCwgZW5kKTsKICAgICB9CiAgICAgaWYgKGV4cHItPmlzQnJhY2tldEFjY2Vzc29y
Tm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBzdGF0aWNf
Y2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIERlbGV0ZUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQt
PnN1YnNjcmlwdCgpLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGlu
ZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVCcmFj
a2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwg
ZGl2b3QsIHN0YXJ0LCBlbmQpOwogICAgIH0KICAgICBBU1NFUlQoZXhwci0+aXNEb3RBY2Nlc3Nv
ck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nl
c3Nvck5vZGUqPihleHByKTsKLSAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVEb3ROb2RlKGxv
Y2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0
YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgcmV0dXJu
IG5ldyAobV92bSkgRGVsZXRlRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRl
bnRpZmllcigpLCBkaXZvdCwgc3RhcnQsIGVuZCk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlTmVnYXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbikKQEAgLTgyMiwzNiArODAxLDM2IEBAIEV4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlQml0WE9yTm8KICAgICByZXR1cm4gbmV3IChtX3ZtKSBCaXRYT3JOb2Rl
KGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUq
IGFyZ3MsIGludCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKIHsKLSAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5l
U3RhcnQpOworICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0
KTsKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV92
bSkgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGxvY2F0aW9uLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2
b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAg
ICAgICByZXR1cm4gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1
bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMtPmlz
UmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19j
YXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIgPSByZXNvbHZlLT5pZGVudGlmaWVyKCk7CiAgICAgICAgIGlmIChpZGVudGlmaWVyID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwpIHsKICAgICAgICAgICAgIHVzZXNFdmFsKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlv
biwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEV2YWxGdW5jdGlv
bkNhbGxOb2RlKGxvY2F0aW9uLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbFJlc29sdmVO
b2RlKGxvY2F0aW9uLCBpZGVudGlmaWVyLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5k
IC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3
IChtX3ZtKSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnRpZmllciwgYXJn
cywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICB9CiAgICAgaWYgKGZ1bmMtPmlz
QnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJy
YWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4oZnVuYyk7Ci0gICAgICAg
IEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQo
KSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKLSAgICAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tl
dC0+ZGl2b3QoKSwgYnJhY2tldC0+ZGl2b3RFbmRPZmZzZXQoKSwgYnJhY2tldC0+ZGl2b3RMaW5l
KCksIGJyYWNrZXQtPmRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICBGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUobG9jYXRp
b24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCk7CisgICAgICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZv
KGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90RW5kKCkub2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgfQogICAgIEFTU0VSVChmdW5jLT5pc0RvdEFjY2Vzc29yTm9kZSgp
KTsKICAgICBEb3RBY2Nlc3Nvck5vZGUqIGRvdCA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9k
ZSo+KGZ1bmMpOwogICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUqIG5vZGU7CiAgICAgaWYgKGRvdC0+
aWRlbnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmNhbGwpCi0gICAgICAgIG5vZGUg
PSBuZXcgKG1fdm0pIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2Uo
KSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBk
aXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIG5vZGUgPSBuZXcgKG1f
dm0pIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5p
ZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgZWxz
ZSBpZiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXBwbHkpCi0g
ICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlv
biwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBz
dGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBu
b2RlID0gbmV3IChtX3ZtKSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+
YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKTsKICAgICBlbHNlCi0gICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbERv
dE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KTsKLSAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZGl2
b3RFbmRPZmZzZXQoKSwgZG90LT5kaXZvdExpbmUoKSwgZG90LT5kaXZvdExpbmVTdGFydCgpKTsK
KyAgICAgICAgbm9kZSA9IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwg
ZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwg
ZGl2b3RFbmQpOworICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwg
ZG90LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTg5OSwx
MyArODc4LDEzIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQmluYXJ5Tm8KIAog
ICAgIGNhc2UgSU5TVEFOQ0VPRjogewogICAgICAgICBJbnN0YW5jZU9mTm9kZSogbm9kZSA9IG5l
dyAobV92bSkgSW5zdGFuY2VPZk5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCBy
aHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihu
b2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLmVuZCwg
cmhzLnNlY29uZC5kaXZvdExpbmUsIHJocy5zZWNvbmQuZGl2b3RMaW5lU3RhcnQpOworICAgICAg
ICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25k
LnN0YXJ0LCByaHMuc2Vjb25kLmVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAog
ICAgIGNhc2UgSU5UT0tFTjogewogICAgICAgICBJbk5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIElu
Tm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdu
bWVudCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3Rh
cnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuZW5kLCByaHMuc2Vjb25kLmRpdm90TGlu
ZSwgcmhzLnNlY29uZC5kaXZvdExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKG5vZGUsIGxocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQu
ZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC05MzcsMTAgKzkxNiwxMCBA
QCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciBv
cCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJvb2wgbG9jSGFzQXNzaWdubWVudHMsIGJvb2wgZXhw
ckhhc0Fzc2lnbm1lbnRzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciBvcCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJv
b2wgbG9jSGFzQXNzaWdubWVudHMsIGJvb2wgZXhwckhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCkKIHsKICAgICBpZiAoIWxvYy0+aXNMb2NhdGlvbigpKQotICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25FcnJvck5vZGUobG9jYXRpb24sIGRpdm90LCBkaXZv
dCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkVycm9yTm9kZShsb2NhdGlvbiwgZGl2b3QsIHN0
YXJ0LCBlbmQpOwogCiAgICAgaWYgKGxvYy0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJl
c29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihsb2MpOwpAQCAt
OTQ4LDE3ICs5MjcsMTcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25O
bwogICAgICAgICAgICAgaWYgKGV4cHItPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZXhwciktPmJvZHkoKS0+c2V0SW5mZXJyZWRO
YW1lKHJlc29sdmUtPmlkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9k
ZSogbm9kZSA9IG5ldyAobV92bSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUt
PmlkZW50aWZpZXIoKSwgZXhwcik7Ci0gICAgICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihu
b2RlLCBzdGFydCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIo
KSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVu
ZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIG5l
dyAobV92bSkgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlm
aWVyKCksIG9wLCBleHByLCBleHBySGFzQXNzaWdubWVudHMsIGRpdm90LCBzdGFydCwgZW5kKTsK
ICAgICB9CiAgICAgaWYgKGxvYy0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAg
QnJhY2tldEFjY2Vzc29yTm9kZSogYnJhY2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nv
ck5vZGUqPihsb2MpOwogICAgICAgICBpZiAob3AgPT0gT3BFcXVhbCkKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIEFzc2lnbkJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNl
KCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhh
c0Fzc2lnbm1lbnRzLCBicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdCgpIC0gc3RhcnQs
IGVuZCAtIGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90TGluZSgpLCBicmFja2V0LT5k
aXZvdExpbmVTdGFydCgpKTsKLSAgICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKiBub2RlID0g
bmV3IChtX3ZtKSBSZWFkTW9kaWZ5QnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2Uo
KSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIG9wLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhw
ckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90
TGluZSwgZGl2b3RMaW5lU3RhcnQpOwotICAgICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5m
byhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdEVuZE9mZnNldCgpLCBicmFja2V0LT5k
aXZvdExpbmUoKSwgYnJhY2tldC0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChtX3ZtKSBBc3NpZ25CcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgp
LCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNB
c3NpZ25tZW50cywgYnJhY2tldC0+ZGl2b3QoKSwgc3RhcnQsIGVuZCk7CisgICAgICAgIFJlYWRN
b2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgUmVhZE1vZGlmeUJyYWNrZXROb2Rl
KGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhw
ciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIHN0YXJ0LCBl
bmQpOworICAgICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgp
LCBicmFja2V0LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAg
IH0KICAgICBBU1NFUlQobG9jLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKQEAgLTk2NiwyMiArOTQ1
LDIyIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm8KICAgICBpZiAo
b3AgPT0gT3BFcXVhbCkgewogICAgICAgICBpZiAoZXhwci0+aXNGdW5jRXhwck5vZGUoKSkKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGV4cHIpLT5ib2R5KCktPnNldElu
ZmVycmVkTmFtZShkb3QtPmlkZW50aWZpZXIoKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0p
IEFzc2lnbkRvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwg
ZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3QoKSAtIHN0
YXJ0LCBlbmQgLSBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3RMaW5lKCksIGRvdC0+ZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkRvdE5vZGUobG9jYXRp
b24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZXhwciwgZXhwckhhc0Fzc2lnbm1l
bnRzLCBkb3QtPmRpdm90KCksIHN0YXJ0LCBlbmQpOwogICAgIH0KIAotICAgIFJlYWRNb2RpZnlE
b3ROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90
LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRz
LCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5l
U3RhcnQpOwotICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90
LT5kaXZvdEVuZE9mZnNldCgpLCBkb3QtPmRpdm90TGluZSgpLCBkb3QtPmRpdm90TGluZVN0YXJ0
KCkpOworICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5
RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhw
ciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgc3RhcnQsIGVuZCk7CisgICAgbm9kZS0+c2V0
U3ViZXhwcmVzc2lvbkluZm8oZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90RW5kKCkub2Zmc2V0KTsK
ICAgICByZXR1cm4gbm9kZTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQ
cmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKIHsKLSAgICByZXR1cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9uLCBl
eHByLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9u
LCBleHByLCBvcCwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3Qs
IGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgcmV0dXJuIG5ldyAobV92bSkgUG9zdGZp
eE5vZGUobG9jYXRpb24sIGV4cHIsIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2
b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBuZXcgKG1fdm0pIFBv
c3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcCwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gMTUy
NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMDYsOCArMTMwNiwxMCBAQCBib29sIExleGVyPFQ+OjpuZXh0VG9rZW5Jc0Nv
bG9uKCkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1KU1Rva2VuVHlwZSBMZXhlcjxUPjo6
bGV4KEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5Mb2NhdGlvbiogdG9rZW5Mb2NhdGlv
biwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9vbCBzdHJpY3RNb2RlKQorSlNUb2tlblR5cGUgTGV4
ZXI8VD46OmxleChKU1Rva2VuKiB0b2tlblJlY29yZCwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9v
bCBzdHJpY3RNb2RlKQogeworICAgIEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEgPSAmdG9rZW5SZWNv
cmQtPm1fZGF0YTsKKyAgICBKU1Rva2VuTG9jYXRpb24qIHRva2VuTG9jYXRpb24gPSAmdG9rZW5S
ZWNvcmQtPm1fbG9jYXRpb247CiAgICAgQVNTRVJUKCFtX2Vycm9yKTsKICAgICBBU1NFUlQobV9i
dWZmZXI4LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKG1fYnVmZmVyMTYuaXNFbXB0eSgpKTsKQEAg
LTEzMjUsNiArMTMyNyw3IEBAIHN0YXJ0OgogICAgIHRva2VuTG9jYXRpb24tPnN0YXJ0T2Zmc2V0
ID0gY3VycmVudE9mZnNldCgpOwogICAgIHRva2VuTG9jYXRpb24tPnNvdXJjZU9mZnNldCA9IG1f
c291cmNlT2Zmc2V0OwogICAgIEFTU0VSVChjdXJyZW50T2Zmc2V0KCkgPj0gY3VycmVudExpbmVT
dGFydE9mZnNldCgpKTsKKyAgICB0b2tlblJlY29yZC0+bV9zdGFydFBvc2l0aW9uID0gY3VycmVu
dFBvc2l0aW9uKCk7CiAKICAgICBDaGFyYWN0ZXJUeXBlIHR5cGU7CiAgICAgaWYgKExJS0VMWShp
c0xhdGluMShtX2N1cnJlbnQpKSkKQEAgLTE3MDAsNiArMTcwMyw3IEBAIHJldHVyblRva2VuOgog
ICAgIHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICB0b2tl
bkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAg
ICAgQVNTRVJUKHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5l
U3RhcnRPZmZzZXQpOworICAgIHRva2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBv
c2l0aW9uKCk7CiAgICAgbV9sYXN0VG9rZW4gPSB0b2tlbjsKICAgICByZXR1cm4gdG9rZW47CiAK
QEAgLTE3MDksNiArMTcxMyw3IEBAIHJldHVybkVycm9yOgogICAgIHRva2VuTG9jYXRpb24tPmVu
ZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRP
ZmZzZXQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAgICAgQVNTRVJUKHRva2VuTG9jYXRp
b24tPmVuZE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOworICAgIHRv
a2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgUkVMRUFT
RV9BU1NFUlQodG9rZW4gJiBFcnJvclRva2VuRmxhZyk7CiAgICAgcmV0dXJuIHRva2VuOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMTUyNTgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NiwxMSArODYsMTUgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNSZXBhcnNpbmcoKSB7IG1f
aXNSZXBhcnNpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBpc1JlcGFyc2luZygpIGNvbnN0IHsgcmV0
dXJuIG1faXNSZXBhcnNpbmc7IH0KIAotICAgIEpTVG9rZW5UeXBlIGxleChKU1Rva2VuRGF0YSos
IEpTVG9rZW5Mb2NhdGlvbiosIHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOworICAgIEpTVG9r
ZW5UeXBlIGxleChKU1Rva2VuKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgYm9v
bCBuZXh0VG9rZW5Jc0NvbG9uKCk7CiAgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVy
biBtX2xpbmVOdW1iZXI7IH0KICAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gb2Zmc2V0RnJvbVNvdXJjZVB0cihtX2NvZGUpOyB9CiAgICAgQUxXQVlT
X0lOTElORSBpbnQgY3VycmVudExpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNl
dEZyb21Tb3VyY2VQdHIobV9saW5lU3RhcnQpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1RleHRQ
b3NpdGlvbiBjdXJyZW50UG9zaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
VGV4dFBvc2l0aW9uKG1fbGluZU51bWJlciwgY3VycmVudE9mZnNldCgpLCBjdXJyZW50TGluZVN0
YXJ0T2Zmc2V0KCkpOworICAgIH0KICAgICB2b2lkIHNldExhc3RMaW5lTnVtYmVyKGludCBsYXN0
TGluZU51bWJlcikgeyBtX2xhc3RMaW5lTnVtYmVyID0gbGFzdExpbmVOdW1iZXI7IH0KICAgICBp
bnQgbGFzdExpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xhc3RMaW5lTnVtYmVyOyB9CiAg
ICAgYm9vbCBwcmV2VGVybWluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGVybWluYXRvcjsgfQpA
QCAtMTI1LDcgKzEyOSw3IEBAIHB1YmxpYzoKIAogICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQ
cm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5wcm92aWRlcigpOyB9CiAKLSAgICBK
U1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNUb2tlbkxvY2F0
aW9uKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CisgICAgSlNUb2tlblR5cGUgbGV4RXhw
ZWN0SWRlbnRpZmllcihKU1Rva2VuKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCByZWNvcmQ4KGludCk7CkBAIC0zMzEsMTIgKzMzNSwxNSBAQCBBTFdB
WVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4RXhwZWN0SWRl
bnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuTG9jYXRpb24qIHRva2VuTG9j
YXRpb24sIHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3RyaWN0TW9kZSkKK0FMV0FZU19JTkxJ
TkUgSlNUb2tlblR5cGUgTGV4ZXI8VD46OmxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbiogdG9r
ZW5SZWNvcmQsIHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3RyaWN0TW9kZSkKIHsKKyAgICBK
U1Rva2VuRGF0YSogdG9rZW5EYXRhID0gJnRva2VuUmVjb3JkLT5tX2RhdGE7CisgICAgSlNUb2tl
bkxvY2F0aW9uKiB0b2tlbkxvY2F0aW9uID0gJnRva2VuUmVjb3JkLT5tX2xvY2F0aW9uOwogICAg
IEFTU0VSVCgobGV4ZXJGbGFncyAmIExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzKSk7CiAg
ICAgY29uc3QgVCogc3RhcnQgPSBtX2NvZGU7CiAgICAgY29uc3QgVCogcHRyID0gc3RhcnQ7CiAg
ICAgY29uc3QgVCogZW5kID0gbV9jb2RlRW5kOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24gPSBjdXJyZW50UG9zaXRpb24oKTsKICAgICBpZiAocHRyID49IGVuZCkgewogICAgICAg
ICBBU1NFUlQocHRyID09IGVuZCk7CiAgICAgICAgIGdvdG8gc2xvd0Nhc2U7CkBAIC0zNzIsMTEg
KzM3OSwxMyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFCiAgICAg
dG9rZW5Mb2NhdGlvbi0+ZW5kT2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwogICAgIHRva2VuTG9j
YXRpb24tPnNvdXJjZU9mZnNldCA9IG1fc291cmNlT2Zmc2V0OwogICAgIEFTU0VSVCh0b2tlbkxv
Y2F0aW9uLT5zdGFydE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOwor
ICAgIHRva2VuUmVjb3JkLT5tX3N0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIHRv
a2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgbV9sYXN0
VG9rZW4gPSBJREVOVDsKICAgICByZXR1cm4gSURFTlQ7CiAgICAgCiBzbG93Q2FzZToKLSAgICBy
ZXR1cm4gbGV4KHRva2VuRGF0YSwgdG9rZW5Mb2NhdGlvbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9k
ZSk7CisgICAgcmV0dXJuIGxleCh0b2tlblJlY29yZCwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE1MjU4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw5ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBO
b2RlOjpOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCi0gICAgICAgIDogbV9s
aW5lTnVtYmVyKGxvY2F0aW9uLmxpbmUpCi0gICAgICAgICwgbV9zdGFydE9mZnNldChsb2NhdGlv
bi5zdGFydE9mZnNldCkKLSAgICAgICAgLCBtX2xpbmVTdGFydE9mZnNldChsb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQpCisgICAgICAgIDogbV9wb3NpdGlvbihsb2NhdGlvbi5saW5lLCBsb2NhdGlv
bi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KQogICAgIHsKICAgICAgICAg
QVNTRVJUKGxvY2F0aW9uLnN0YXJ0T2Zmc2V0ID49IGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7
CiAgICAgfQpAQCAtMTAyLDE0ICsxMDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAg
IH0KIAotaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitpbmxpbmUg
UmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9pZGVudChpZGVu
dCkKLSAgICAgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQotICAgICAgICAsIG1fZGl2
b3RMaW5lKGRpdm90TGluZSkKLSAgICAgICAgLCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0
YXJ0KQorICAgICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgewotICAgICAgICBBU1NFUlQobV9z
dGFydE9mZnNldCA+PSBtX2Rpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQVNTRVJUKG1fc3RhcnQu
b2Zmc2V0ID49IG1fc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICB9CiAKICAgICBpbmxpbmUg
RWxlbWVudE5vZGU6OkVsZW1lbnROb2RlKGludCBlbGlzaW9uLCBFeHByZXNzaW9uTm9kZSogbm9k
ZSkKQEAgLTI0Niw4MSArMjQyLDgxIEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUo
Y29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEV2YWxGdW5jdGlvbkNhbGxOb2Rl
OjpFdmFsRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBB
cmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OkV2YWxGdW5jdGlvbkNh
bGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50c05vZGUqIGFy
Z3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHBy
ZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShk
aXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkK
KyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpCiAgICAgICAgICwgbV9hcmdzKGFyZ3MpCiAgICAgewotICAgICAgICBBU1NFUlQoZGl2
b3QgPj0gZGl2b3RMaW5lU3RhcnQpOwogICAgIH0KIAotICAgIGlubGluZSBGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZ1bmN0
aW9uQ2FsbFZhbHVlTm9kZTo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmdz
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisg
ICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAg
IHsKKyAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdFN0YXJ0Lm9mZnNldCk7CiAg
ICAgfQogCi0gICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxv
Y2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAg
ICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKICAgICB9
CiAKLSAgICBpbmxpbmUgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNr
ZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBi
YXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNp
Z25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5z
aWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9k
ZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAg
ICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxlU3Vi
RXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1f
YmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKICAgICAgICAgLCBt
X2FyZ3MoYXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNO
b2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkK
KyAgICBpbmxpbmUgRnVuY3Rpb25DYWxsRG90Tm9kZTo6RnVuY3Rpb25DYWxsRG90Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikK
LSAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2Fi
bGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAg
ICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX2Fy
Z3MoYXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENhbGxGdW5jdGlvbkNhbGxEb3RO
b2RlOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3Vt
ZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0
YXJ0KQotICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50
LCBhcmdzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OkNhbGxGdW5jdGlv
bkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICA6IEZ1bmN0aW9u
Q2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50LCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFy
dCwgZGl2b3RFbmQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBcHBseUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90
TGluZVN0YXJ0KQotICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2Us
IGlkZW50LCBhcmdzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBk
aXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpBcHBs
eUZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2Rl
KiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCisgICAgICAgIDog
RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFBvc3RmaXhO
b2RlOjpQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQpCi0gICAgICAgIDogUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwg
b3BlciwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5l
U3RhcnQpCisgICAgaW5saW5lIFBvc3RmaXhOb2RlOjpQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3Blciwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICA6IFByZWZpeE5v
ZGUobG9jYXRpb24sIGV4cHIsIG9wZXIsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAg
ICB7CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZl
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAg
aW5saW5lIERlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0
aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93
YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAg
LCBtX2lkZW50KGlkZW50KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRGVsZXRlQnJhY2tl
dE5vZGU6OkRlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRGVsZXRl
QnJhY2tldE5vZGU6OkRlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0
YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lv
bk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3Qs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAg
ICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5k
KQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlw
dCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2Us
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBk
aXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRGVsZXRlRG90Tm9kZTo6RGVsZXRlRG90Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVu
ZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZv
dCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAg
ICwgbV9pZGVudChpZGVudCkKICAgICB7CkBAIC0zNTAsOSArMzQ2LDkgQEAgaW5saW5lIFJlc29s
dmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
UHJlZml4Tm9kZTo6UHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwg
dW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIFByZWZpeE5vZGU6OlByZWZpeE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIs
IE9wZXJhdG9yIG9wZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAg
ICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVQcmVm
aXhlZFN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZVByZWZpeGVkU3ViRXhw
cmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fZXhw
cihleHByKQogICAgICAgICAsIG1fb3BlcmF0b3Iob3BlcikKICAgICB7CkBAIC01MzYsMTYgKzUz
MiwxNCBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewog
ICAgIH0KIAotICAgIGlubGluZSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OlJlYWRNb2RpZnlSZXNv
bHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCkKKyAgICBpbmxpbmUgUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90
TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZv
dFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1f
cmlnaHQocmlnaHQpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcGVyKQogICAgICAgICAsIG1fcmln
aHRIYXNBc3NpZ25tZW50cyhyaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgQVNTRVJUKGRpdm90IC0gc3Rh
cnRPZmZzZXQgPj0gZGl2b3RMaW5lU3RhcnQpOwogICAgIH0KIAogICAgIGlubGluZSBBc3NpZ25S
ZXNvbHZlTm9kZTo6QXNzaWduUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCkKQEAg
LTU1NSw5ICs1NDksMTAgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBK
UwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmVhZE1vZGlmeUJyYWNrZXROb2RlOjpSZWFk
TW9kaWZ5QnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9wZXIs
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZv
dExpbmVTdGFydCkKKworICAgIGlubGluZSBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OlJlYWRNb2Rp
ZnlCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3Igb3BlciwgRXhw
cmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkK
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVT
dWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShk
aXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAg
ICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQpCkBA
IC01NjcsOSArNTYyLDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBK
UwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduQnJhY2tldE5vZGU6OkFzc2lnbkJy
YWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5l
IEFzc2lnbkJyYWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNj
cmlwdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRz
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2
b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0
YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAg
ICAgICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQp
CkBAIC01NzgsOSArNTczLDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25z
dCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduRG90Tm9kZTo6QXNzaWduRG90
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgQXNzaWduRG90Tm9kZTo6QXNzaWduRG90Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDog
RXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3Rh
cnQpCisgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kKQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1faWRlbnQoaWRl
bnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKQEAgLTU4OCw5ICs1ODMsOSBAQCBpbmxpbmUg
UmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlu
bGluZSBSZWFkTW9kaWZ5RG90Tm9kZTo6UmVhZE1vZGlmeURvdE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQpCisgICAgaW5saW5lIFJlYWRNb2RpZnlEb3ROb2RlOjpSZWFkTW9kaWZ5RG90Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhy
b3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lv
bkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fYmFzZShiYXNl
KQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKQEAg
LTU5OSw5ICs1OTQsOSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpT
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBc3NpZ25FcnJvck5vZGU6OkFzc2lnbkVycm9y
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgQXNzaWduRXJyb3JOb2RlOjpB
c3NpZ25FcnJvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxv
Y2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICB7
CiAgICAgfQogCkBAIC03MDYsMTMgKzcwMSwxMSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29s
dmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBXaXRoTm9kZTo6V2l0
aE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdWludDMyX3QgZGl2b3QsIHVuc2lnbmVkIGRp
dm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5n
dGgpCisgICAgaW5saW5lIFdpdGhOb2RlOjpXaXRoTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgp
CiAgICAgICAgIDogU3RhdGVtZW50Tm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2V4cHIoZXhw
cikKICAgICAgICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgICAgICwgbV9kaXZvdChk
aXZvdCkKLSAgICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExpbmUpCi0gICAgICAgICwgbV9kaXZv
dExpbmVTdGFydChkaXZvdExpbmVTdGFydCkKICAgICAgICAgLCBtX2V4cHJlc3Npb25MZW5ndGgo
ZXhwcmVzc2lvbkxlbmd0aCkKICAgICB7CiAgICAgfQpAQCAtODIyLDE3ICs4MTUsMTcgQEAgaW5s
aW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgRm9ySW5Ob2RlOjpGb3JJbk5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGlu
LCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCB1bnNpZ25l
ZCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBGb3JJbk5vZGU6OkZvcklu
Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBT
dGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCkKICAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1faW5p
dCgwKQotICAgICAgICAsIG1fbGV4cHIobmV3ICh2bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlk
ZW50LCBkaXZvdCAtIHN0YXJ0T2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KSkKKyAg
ICAgICAgLCBtX2xleHByKG5ldyAodm0pIFJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwgZGl2
b3RTdGFydCkpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9zdGF0ZW1lbnQo
c3RhdGVtZW50KQogICAgIHsKICAgICAgICAgaWYgKGluKSB7CiAgICAgICAgICAgICBBc3NpZ25S
ZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAodm0pIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCBp
ZGVudCwgaW4pOwotICAgICAgICAgICAgQVNTRVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsK
LSAgICAgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90IC0g
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zm
c2V0KTsKKyAgICAgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRp
dm90U3RhcnQsIGRpdm90RW5kKTsKICAgICAgICAgICAgIG1faW5pdCA9IG5vZGU7CiAgICAgICAg
IH0KICAgICAgICAgLy8gZm9yKCB2YXIgZm9vID0gYmFyIGluIGJheiApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEx
ICs1NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIFN0YXRlbWVudE5vZGU6OnNldExvYyh1
bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCBsaW5lU3RhcnRPZmZzZXQpCiB7Ci0gICAgbV9saW5lTnVtYmVyID0gZmlyc3RMaW5lOwogICAg
IG1fbGFzdExpbmUgPSBsYXN0TGluZTsKLSAgICBtX3N0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7
Ci0gICAgbV9saW5lU3RhcnRPZmZzZXQgPSBsaW5lU3RhcnRPZmZzZXQ7Ci0gICAgQVNTRVJUKG1f
c3RhcnRPZmZzZXQgPj0gbV9saW5lU3RhcnRPZmZzZXQpOworICAgIG1fcG9zaXRpb24gPSBKU1Rl
eHRQb3NpdGlvbihmaXJzdExpbmUsIHN0YXJ0T2Zmc2V0LCBsaW5lU3RhcnRPZmZzZXQpOworICAg
IEFTU0VSVChtX3Bvc2l0aW9uLm9mZnNldCA+PSBtX3Bvc2l0aW9uLmxpbmVTdGFydE9mZnNldCk7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTb3VyY2VFbGVtZW50cyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTQgKzEyOSwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGUoKSB7IH0KIAot
ICAgICAgICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Ci0gICAg
ICAgIGludCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KLSAg
ICAgICAgaW50IGxpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVN0YXJ0T2Zm
c2V0OyB9CisgICAgICAgIGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLmxp
bmU7IH0KKyAgICAgICAgaW50IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bi5vZmZzZXQ7IH0KKyAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb24ubGluZVN0YXJ0T2Zmc2V0OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgaW50IG1fbGluZU51bWJlcjsKLSAgICAgICAgaW50IG1fc3RhcnRPZmZz
ZXQ7Ci0gICAgICAgIGludCBtX2xpbmVTdGFydE9mZnNldDsKKyAgICAgICAgSlNUZXh0UG9zaXRp
b24gbV9wb3NpdGlvbjsKICAgICB9OwogCiAgICAgY2xhc3MgRXhwcmVzc2lvbk5vZGUgOiBwdWJs
aWMgTm9kZSB7CkBAIC0yNTQsNDkgKzI1Myw0MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgogICAgICAgICBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YSgpCi0gICAgICAgICAgICA6IG1fZGl2b3Qoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdFN0YXJ0T2Zmc2V0KHN0YXRpY19jYXN0
PHVpbnQxNl90PigtMSkpCi0gICAgICAgICAgICAsIG1fZGl2b3RFbmRPZmZzZXQoc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmUoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmVTdGFydChzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oLTEpKQorICAgICAgICAgICAgOiBtX2Rpdm90KC0xLCAtMSwgLTEpCisgICAg
ICAgICAgICAsIG1fZGl2b3RTdGFydCgtMSwgLTEsIC0xKQorICAgICAgICAgICAgLCBtX2Rpdm90
RW5kKC0xLCAtMSwgLTEpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEodW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpCisgICAgICAgIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZW5kKQogICAgICAgICAgICAgOiBtX2Rpdm90KGRpdm90KQotICAgICAgICAg
ICAgLCBtX2Rpdm90U3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1fZGl2
b3RFbmRPZmZzZXQoZW5kT2Zmc2V0KQotICAgICAgICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExp
bmUpCi0gICAgICAgICAgICAsIG1fZGl2b3RMaW5lU3RhcnQoZGl2b3RMaW5lU3RhcnQpCisgICAg
ICAgICAgICAsIG1fZGl2b3RTdGFydChzdGFydCkKKyAgICAgICAgICAgICwgbV9kaXZvdEVuZChl
bmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90ID49IG1fZGl2b3RMaW5l
U3RhcnQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3Qub2Zmc2V0ID49IG1fZGl2b3QubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90U3RhcnQub2Zmc2V0ID49
IG1fZGl2b3RTdGFydC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2
b3RFbmQub2Zmc2V0ID49IG1fZGl2b3RFbmQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb25Tb3VyY2VDb2RlKHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBk
aXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorCisgICAgICAgIHZvaWQgc2V0RXhj
ZXB0aW9uU291cmNlQ29kZShjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChkaXZvdCA+PSBkaXZvdExpbmVTdGFydCk7Cisg
ICAgICAgICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90LmxpbmVTdGFydE9mZnNldCk7
CisgICAgICAgICAgICBBU1NFUlQoZGl2b3RTdGFydC5vZmZzZXQgPj0gZGl2b3RTdGFydC5saW5l
U3RhcnRPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKGRpdm90RW5kLm9mZnNldCA+PSBkaXZv
dEVuZC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgbV9kaXZvdCA9IGRpdm90OwotICAg
ICAgICAgICAgbV9kaXZvdFN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICBt
X2Rpdm90RW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotICAgICAgICAgICAgbV9kaXZvdExpbmUgPSBk
aXZvdExpbmU7Ci0gICAgICAgICAgICBtX2Rpdm90TGluZVN0YXJ0ID0gZGl2b3RMaW5lU3RhcnQ7
CisgICAgICAgICAgICBtX2Rpdm90U3RhcnQgPSBkaXZvdFN0YXJ0OworICAgICAgICAgICAgbV9k
aXZvdEVuZCA9IGRpdm90RW5kOwogICAgICAgICB9CiAKLSAgICAgICAgdWludDMyX3QgZGl2b3Qo
KSBjb25zdCB7IHJldHVybiBtX2Rpdm90OyB9Ci0gICAgICAgIHVpbnQxNl90IGRpdm90U3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90U3RhcnRPZmZzZXQ7IH0KLSAgICAgICAgdWlu
dDE2X3QgZGl2b3RFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90RW5kT2Zmc2V0OyB9
Ci0gICAgICAgIHVpbnQzMl90IGRpdm90TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RMaW5l
OyB9Ci0gICAgICAgIHVpbnQzMl90IGRpdm90TGluZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9k
aXZvdExpbmVTdGFydDsgfQorICAgICAgICBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QoKSBj
b25zdCB7IHJldHVybiBtX2Rpdm90OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9kaXZvdFN0YXJ0OyB9CisgICAgICAgIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RFbmQ7IH0K
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93UmVmZXJlbmNl
RXJyb3IoQnl0ZWNvZGVHZW5lcmF0b3ImLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdDsKLSAgICAgICAgdWludDE2X3QgbV9k
aXZvdFN0YXJ0T2Zmc2V0OwotICAgICAgICB1aW50MTZfdCBtX2Rpdm90RW5kT2Zmc2V0OwotICAg
ICAgICB1aW50MzJfdCBtX2Rpdm90TGluZTsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdExpbmVT
dGFydDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdDsKKyAgICAgICAgSlNUZXh0UG9z
aXRpb24gbV9kaXZvdFN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBtX2Rpdm90RW5kOwog
ICAgIH07CiAKICAgICBjbGFzcyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSA6IHB1YmxpYyBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CkBAIC0zMDksOCArMzAyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFRocm93YWJsZVN1YkV4cHJlc3Np
b25EYXRhKHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQotICAg
ICAgICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgVGhyb3dhYmxlU3Vi
RXhwcmVzc2lvbkRhdGEoY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAg
ICAgICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpCiAgICAgICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0KDApCiAgICAg
ICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgwKQogICAgICAgICAgICAgLCBtX3N1
YmV4cHJlc3Npb25MaW5lT2Zmc2V0KDApCkBAIC0zMTgsMjggKzMxMSwzNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRTdWJleHByZXNz
aW9uSW5mbyh1aW50MzJfdCBzdWJleHByZXNzaW9uRGl2b3QsIHVpbnQxNl90IHN1YmV4cHJlc3Np
b25PZmZzZXQsIHVpbnQzMl90IHN1YmV4cHJlc3Npb25MaW5lLCB1aW50MzJfdCBzdWJleHByZXNz
aW9uTGluZVN0YXJ0KQorICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25JbmZvKGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdWJleHByZXNzaW9uRGl2b3QsIGludCBzdWJleHByZXNzaW9uT2Zmc2V0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRpdm90IDw9IGRp
dm90KCkpOworICAgICAgICAgICAgQVNTRVJUKHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQgPD0g
ZGl2b3QoKS5vZmZzZXQpOwogICAgICAgICAgICAgLy8gT3ZlcmZsb3cgbWVhbnMgd2UgY2FuJ3Qg
ZG8gdGhpcyBzYWZlbHksIHNvIGp1c3QgcG9pbnQgYXQgdGhlIHByaW1hcnkgZGl2b3QsCiAgICAg
ICAgICAgICAvLyBkaXZvdExpbmUsIG9yIGRpdm90TGluZVN0YXJ0LgotICAgICAgICAgICAgaWYg
KChkaXZvdCgpIC0gc3ViZXhwcmVzc2lvbkRpdm90KSAmIH4weEZGRkYpCisgICAgICAgICAgICBp
ZiAoKGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0KSAmIH4weEZGRkYpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKChkaXZvdExpbmUoKSAtIHN1YmV4
cHJlc3Npb25MaW5lKSAmIH4weEZGRkYpCisgICAgICAgICAgICBpZiAoKGRpdm90KCkubGluZSAt
IHN1YmV4cHJlc3Npb25EaXZvdC5saW5lKSAmIH4weEZGRkYpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgaWYgKChkaXZvdExpbmVTdGFydCgpIC0gc3ViZXhwcmVzc2lvbkxp
bmVTdGFydCkgJiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChkaXZvdCgpLmxpbmVTdGFydE9m
ZnNldCAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5lU3RhcnRPZmZzZXQpICYgfjB4RkZGRikKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9m
ZnNldCA9IGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Q7Ci0gICAgICAgICAgICBtX3N1YmV4
cHJlc3Npb25FbmRPZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0OwotICAgICAgICAgICAgbV9z
dWJleHByZXNzaW9uTGluZU9mZnNldCA9IGRpdm90TGluZSgpIC0gc3ViZXhwcmVzc2lvbkxpbmU7
Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQgPSBkaXZvdExpbmVT
dGFydCgpIC0gc3ViZXhwcmVzc2lvbkxpbmVTdGFydDsKKyAgICAgICAgICAgIGlmICgoZGl2b3RF
bmQoKSAtIHN1YmV4cHJlc3Npb25PZmZzZXQpICYgfjB4RkZGRikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9IGRpdm90KCkg
LSBzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0OworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9u
RW5kT2Zmc2V0ID0gZGl2b3RFbmQoKSAtIHN1YmV4cHJlc3Npb25PZmZzZXQ7CisgICAgICAgICAg
ICBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0ID0gZGl2b3QoKS5saW5lIC0gc3ViZXhwcmVzc2lv
bkRpdm90LmxpbmU7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQg
PSBkaXZvdCgpLmxpbmVTdGFydE9mZnNldCAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5lU3RhcnRP
ZmZzZXQ7CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uRGl2b3Qo
KSB7IHJldHVybiBkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAg
ICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gZGl2b3RTdGFy
dE9mZnNldCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWdu
ZWQgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpIHsgcmV0dXJuIG1fc3ViZXhwcmVzc2lvbkVuZE9m
ZnNldDsgfQotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uTGluZSgpIHsgcmV0dXJuIGRp
dm90TGluZSgpIC0gbV9zdWJleHByZXNzaW9uTGluZU9mZnNldDsgfQotICAgICAgICB1bnNpZ25l
ZCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkgeyByZXR1cm4gZGl2b3RMaW5lU3RhcnQoKSAtIG1f
c3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNldDsgfQorICAgICAgICBKU1RleHRQb3NpdGlvbiBz
dWJleHByZXNzaW9uRGl2b3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbmV3TGluZSA9
IGRpdm90KCkubGluZSAtIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQ7CisgICAgICAgICAgICBp
bnQgbmV3T2Zmc2V0ID0gZGl2b3QoKS5vZmZzZXQgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNl
dDsKKyAgICAgICAgICAgIGludCBuZXdMaW5lU3RhcnRPZmZzZXQgPSBkaXZvdCgpLmxpbmVTdGFy
dE9mZnNldCAtIG1fc3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNldDsKKyAgICAgICAgICAgIHJl
dHVybiBKU1RleHRQb3NpdGlvbihuZXdMaW5lLCBuZXdPZmZzZXQsIG5ld0xpbmVTdGFydE9mZnNl
dCk7CisgICAgICAgIH0KKyAgICAgICAgSlNUZXh0UG9zaXRpb24gc3ViZXhwcmVzc2lvblN0YXJ0
KCkgeyByZXR1cm4gZGl2b3RTdGFydCgpOyB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN1YmV4
cHJlc3Npb25FbmQoKSB7IHJldHVybiBkaXZvdEVuZCgpIC0gbV9zdWJleHByZXNzaW9uRW5kT2Zm
c2V0OyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHVpbnQxNl90IG1fc3ViZXhwcmVzc2lv
bkRpdm90T2Zmc2V0OwpAQCAtMzU4LDggKzM1Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgIH0KIAotICAgICAgICBUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25E
YXRhKHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQotICAgICAg
ICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgVGhyb3dhYmxlUHJlZml4
ZWRTdWJFeHByZXNzaW9uRGF0YShjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKKyAgICAgICAg
ICAgIDogVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0LCBlbmQpCiAgICAgICAg
ICAgICAsIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0KDApCiAgICAgICAgICAgICAsIG1fc3Vi
ZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KDApCiAgICAgICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkxp
bmVPZmZzZXQoMCkKQEAgLTM2NywyOCArMzY2LDM0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25JbmZvKHVpbnQz
Ml90IHN1YmV4cHJlc3Npb25EaXZvdCwgdWludDE2X3Qgc3ViZXhwcmVzc2lvbk9mZnNldCwgdWlu
dDMyX3Qgc3ViZXhwcmVzc2lvbkxpbmUsIHVpbnQzMl90IHN1YmV4cHJlc3Npb25MaW5lU3RhcnQp
CisgICAgICAgIHZvaWQgc2V0U3ViZXhwcmVzc2lvbkluZm8oY29uc3QgSlNUZXh0UG9zaXRpb24m
IHN1YmV4cHJlc3Npb25EaXZvdCwgaW50IHN1YmV4cHJlc3Npb25PZmZzZXQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChzdWJleHByZXNzaW9uRGl2b3QgPj0gZGl2b3QoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRpdm90Lm9mZnNldCA+PSBkaXZvdCgpLm9mZnNl
dCk7CiAgICAgICAgICAgICAvLyBPdmVyZmxvdyBtZWFucyB3ZSBjYW4ndCBkbyB0aGlzIHNhZmVs
eSwgc28ganVzdCBwb2ludCBhdCB0aGUgcHJpbWFyeSBkaXZvdCwKICAgICAgICAgICAgIC8vIGRp
dm90TGluZSwgb3IgZGl2b3RMaW5lU3RhcnQuCi0gICAgICAgICAgICBpZiAoKHN1YmV4cHJlc3Np
b25EaXZvdCAtIGRpdm90KCkpICYgfjB4RkZGRikgCisgICAgICAgICAgICBpZiAoKHN1YmV4cHJl
c3Npb25EaXZvdC5vZmZzZXQgLSBkaXZvdCgpKSAmIH4weEZGRkYpIAorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90LmxpbmUgLSBkaXZv
dCgpLmxpbmUpICYgfjB4RkZGRikKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBpZiAoKHN1YmV4cHJlc3Npb25MaW5lIC0gZGl2b3RMaW5lKCkpICYgfjB4RkZGRikKKyAgICAg
ICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90LmxpbmVTdGFydE9mZnNldCAtIGRpdm90KCku
bGluZVN0YXJ0T2Zmc2V0KSAmIH4weEZGRkYpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uTGluZVN0YXJ0IC0gZGl2b3RMaW5lU3RhcnQoKSkg
JiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uT2Zmc2V0IC0gZGl2b3RT
dGFydCgpKSAmIH4weEZGRkYpIAogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkRpdm90IC0gZGl2b3Qo
KTsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0ID0gc3ViZXhwcmVzc2lv
bk9mZnNldDsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQgPSBzdWJleHBy
ZXNzaW9uTGluZSAtIGRpdm90TGluZSgpOwotICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uTGlu
ZVN0YXJ0T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkxpbmVTdGFydCAtIGRpdm90TGluZVN0YXJ0KCk7
CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9IHN1YmV4cHJlc3Npb25E
aXZvdC5vZmZzZXQgLSBkaXZvdCgpOworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uU3RhcnRP
ZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0IC0gZGl2b3RTdGFydCgpOworICAgICAgICAgICAg
bV9zdWJleHByZXNzaW9uTGluZU9mZnNldCA9IHN1YmV4cHJlc3Npb25EaXZvdC5saW5lIC0gZGl2
b3QoKS5saW5lOworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uTGluZVN0YXJ0T2Zmc2V0ID0g
c3ViZXhwcmVzc2lvbkRpdm90LmxpbmVTdGFydE9mZnNldCAtIGRpdm90KCkubGluZVN0YXJ0T2Zm
c2V0OwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvbkRpdm90KCkg
eyByZXR1cm4gZGl2b3QoKSArIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0OyB9Ci0gICAgICAg
IHVuc2lnbmVkIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgpIHsgcmV0dXJuIG1fc3ViZXhwcmVz
c2lvblN0YXJ0T2Zmc2V0OyB9Ci0gICAgICAgIHVuc2lnbmVkIHN1YmV4cHJlc3Npb25FbmRPZmZz
ZXQoKSB7IHJldHVybiBkaXZvdEVuZE9mZnNldCgpICsgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZz
ZXQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvbkxpbmUoKSB7IHJldHVybiBkaXZv
dExpbmUoKSArIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWduZWQg
c3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpIHsgcmV0dXJuIGRpdm90TGluZVN0YXJ0KCkgKyBtX3N1
YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7IH0KKyAgICAgICAgSlNUZXh0UG9zaXRpb24gc3Vi
ZXhwcmVzc2lvbkRpdm90KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IG5ld0xpbmUgPSBk
aXZvdCgpLmxpbmUgKyBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0OworICAgICAgICAgICAgaW50
IG5ld09mZnNldCA9IGRpdm90KCkub2Zmc2V0ICsgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7
CisgICAgICAgICAgICBpbnQgbmV3TGluZVN0YXJ0T2Zmc2V0ID0gZGl2b3QoKS5saW5lU3RhcnRP
ZmZzZXQgKyBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7CisgICAgICAgICAgICByZXR1
cm4gSlNUZXh0UG9zaXRpb24obmV3TGluZSwgbmV3T2Zmc2V0LCBuZXdMaW5lU3RhcnRPZmZzZXQp
OworICAgICAgICB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN1YmV4cHJlc3Npb25TdGFydCgp
IHsgcmV0dXJuIGRpdm90U3RhcnQoKSArIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0OzsgfQor
ICAgICAgICBKU1RleHRQb3NpdGlvbiBzdWJleHByZXNzaW9uRW5kKCkgeyByZXR1cm4gZGl2b3RF
bmQoKTsgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB1aW50MTZfdCBtX3N1YmV4cHJlc3Np
b25EaXZvdE9mZnNldDsKQEAgLTQxOCw3ICs0MjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50
aWZpZXImLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25l
ZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpOwog
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50OyB9CiAKQEAgLTQzMCw5ICs0MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dmlydHVhbCBib29sIGlzUmVzb2x2ZU5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciYgbV9pZGVudDsKLSAgICAgICAgdWludDMyX3QgbV9zdGFy
dE9mZnNldDsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdExpbmU7Ci0gICAgICAgIHVpbnQzMl90
IG1fZGl2b3RMaW5lU3RhcnQ7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG1fc3RhcnQ7CiAgICAg
fTsKIAogICAgIGNsYXNzIEVsZW1lbnROb2RlIDogcHVibGljIFBhcnNlckFyZW5hRnJlZWFibGUg
ewpAQCAtNTc5LDcgKzU4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXZhbEZ1
bmN0aW9uQ2FsbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBFdmFsRnVuY3Rpb25DYWxsTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBFdmFsRnVuY3Rpb25DYWxs
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKTsKQEAgLTU4OSw3ICs1OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIEFyZ3Vt
ZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7
CisgICAgICAgIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSosIEFyZ3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAt
NjAwLDcgKzYwMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxs
UmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHBy
ZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9k
ZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjEx
LDcgKzYxNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNsYXNzIEZ1bmN0aW9uQ2Fs
bEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlU3Vi
RXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tl
dE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJl
c3Npb25Ob2RlKiBzdWJzY3JpcHQsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXRO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNz
aW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
QEAgLTYyMyw3ICs2MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0aW9u
Q2FsbERvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJF
eHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jdGlvbkNhbGxEb3ROb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgRnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEFyZ3Vt
ZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjM2LDcgKzYzOSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUgOiBwdWJsaWMg
RnVuY3Rpb25DYWxsRG90Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBDYWxsRnVuY3Rpb25D
YWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwg
Y29uc3QgSWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1
bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIENhbGxGdW5jdGlvbkNhbGxEb3ROb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02NDQsNyAr
NjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3MgQXBwbHlGdW5jdGlvbkNh
bGxEb3ROb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbERvdE5vZGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQXBw
bHlGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC02NTIsNyArNjU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBEZWxldGVSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93
YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlbGV0ZVJlc29sdmVO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIERlbGV0ZVJlc29s
dmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApOwpAQCAtNjYyLDcgKzY2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgRGVsZXRlQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBEZWxldGVCcmFj
a2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhw
cmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpOworICAgICAgICBEZWxldGVCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY3Myw3ICs2NzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIERlbGV0ZURvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1Ymxp
YyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBEZWxldGVE
b3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25z
dCBJZGVudGlmaWVyJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQpOworICAgICAgICBEZWxldGVEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
QEAgLTcyNiw3ICs3MjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFByZWZpeE5v
ZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVQcmVmaXhlZFN1YkV4
cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFByZWZpeE5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBQcmVmaXhOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKTsKQEAgLTc0MCw3ICs3NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFBvc3RmaXhOb2RlIDogcHVibGljIFByZWZpeE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgUG9zdGZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBP
cGVyYXRvciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOwor
ICAgICAgICBQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9k
ZSosIE9wZXJhdG9yLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtOTgzLDcgKzk4Niw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVhZE1vZGlmeVJlc29sdmVOb2RlIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0
YXJ0KTsKKyAgICAgICAgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTAwNyw3
ICsxMDEwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWFkTW9kaWZ5QnJhY2tl
dE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNz
aW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBSZWFkTW9kaWZ5QnJhY2tldE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2Rl
KiBzdWJzY3JpcHQsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2Ny
aXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2
b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRp
dm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBSZWFkTW9kaWZ5QnJh
Y2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4
cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwMjIsNyArMTAyNSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgQXNzaWduQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUs
IHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBB
c3NpZ25CcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSog
YmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBi
b29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQXNz
aWduQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJh
c2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9v
bCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApOwpAQCAtMTAzNiw3ICsxMDM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBBc3NpZ25Eb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgQXNzaWduRG90
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgIEFzc2lnbkRvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUq
IGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwNDksNyArMTA1Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVhZE1vZGlmeURvdE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAg
ICAgcHVibGljOgotICAgICAgICBSZWFkTW9kaWZ5RG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCBF
eHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQg
ZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBSZWFkTW9kaWZ5
RG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwNjMsNyArMTA2Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXNzaWduRXJyb3JOb2RlIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgQXNzaWduRXJyb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQXNz
aWduRXJyb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7
CkBAIC0xMjM5LDcgKzEyNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGb3JJbk5v
ZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRh
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEZvckluTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSopOwotICAg
ICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCB1
bnNpZ25lZCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBk
aXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgRm9ySW5Ob2RlKFZN
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25O
b2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAt
MTI5MiwxNiArMTI5NSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFdpdGhOb2Rl
IDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgV2l0aE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwg
dWludDMyX3QgZGl2b3QsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgpOworICAgICAgICBXaXRoTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhw
cjsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV9zdGF0ZW1lbnQ7Ci0gICAgICAgIHVpbnQzMl90
IG1fZGl2b3Q7Ci0gICAgICAgIHVpbnQzMl90IG1fZGl2b3RMaW5lOwotICAgICAgICB1aW50MzJf
dCBtX2Rpdm90TGluZVN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBtX2Rpdm90OwogICAg
ICAgICB1aW50MzJfdCBtX2V4cHJlc3Npb25MZW5ndGg7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTUyNTgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw4ICs2OSw2IEBAIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoVk0qIHZtLCBjb25zdCAKICAg
ICAsIG1fc3RhY2soKnZtLCB3dGZUaHJlYWREYXRhKCkuc3RhY2soKSkKICAgICAsIG1faGFzU3Rh
Y2tPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1fYWxsb3dzSW4odHJ1ZSkKLSAgICAsIG1fbGFzdExp
bmUoMCkKLSAgICAsIG1fbGFzdFRva2VuRW5kKDApCiAgICAgLCBtX2Fzc2lnbm1lbnRDb3VudCgw
KQogICAgICwgbV9ub25MSFNDb3VudCgwKQogICAgICwgbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVk
KHNvdXJjZS5wcm92aWRlcigpLT5pc1ZhbGlkKCkpCkBAIC0xMzIsMjEgKzEzMCwyMCBAQCBTdHJp
bmcgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoKQogICAgICAgICBmZWF0dXJlcyB8PSBT
aGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKIAogICAgIGRpZEZpbmlzaFBhcnNpbmcoc291cmNlRWxl
bWVudHMsIGNvbnRleHQudmFyRGVjbGFyYXRpb25zKCksIGNvbnRleHQuZnVuY0RlY2xhcmF0aW9u
cygpLCBmZWF0dXJlcywKLSAgICAgICAgICAgICAgICAgICAgIG1fbGFzdExpbmUsIGNvbnRleHQu
bnVtQ29uc3RhbnRzKCksIGNhcHR1cmVkVmFyaWFibGVzKTsKKyAgICAgICAgY29udGV4dC5udW1D
b25zdGFudHMoKSwgY2FwdHVyZWRWYXJpYWJsZXMpOwogCiAgICAgcmV0dXJuIHBhcnNlRXJyb3I7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB2b2lkIFBhcnNlcjxMZXhlclR5
cGU+OjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cywgUGFy
c2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZhclN0YWNrLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFjaywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbGFzdExpbmUsIGludCBudW1Db25zdGFudHMsIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFy
cykKKyAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+
KiBmdW5jU3RhY2ssIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgSWRl
bnRpZmllclNldCYgY2FwdHVyZWRWYXJzKQogewogICAgIG1fc291cmNlRWxlbWVudHMgPSBzb3Vy
Y2VFbGVtZW50czsKICAgICBtX3ZhckRlY2xhcmF0aW9ucyA9IHZhclN0YWNrOwogICAgIG1fZnVu
Y0RlY2xhcmF0aW9ucyA9IGZ1bmNTdGFjazsKICAgICBtX2NhcHR1cmVkVmFyaWFibGVzLnN3YXAo
Y2FwdHVyZWRWYXJzKTsKICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0gICAgbV9sYXN0TGlu
ZSA9IGxhc3RMaW5lOwogICAgIG1fbnVtQ29uc3RhbnRzID0gbnVtQ29uc3RhbnRzOwogfQogCkBA
IC0yMDQsNyArMjAxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZQogICAgIGludCBzY3JhdGNoOwogICAgIGNvbnN0IElkZW50aWZpZXIqIHNjcmF0Y2gxID0gMDsK
ICAgICBUcmVlRXhwcmVzc2lvbiBzY3JhdGNoMiA9IDA7Ci0gICAgaW50IHNjcmF0Y2gzID0gMDsK
KyAgICBKU1RleHRQb3NpdGlvbiBzY3JhdGNoMzsKICAgICBUcmVlRXhwcmVzc2lvbiB2YXJEZWNs
cyA9IHBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KGNvbnRleHQsIHNjcmF0Y2gsIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgc2NyYXRjaDMsIHNjcmF0Y2gzLCBzY3JhdGNoMyk7CiAgICAgZmFpbElmVHJ1ZSho
YXNFcnJvcigpKTsKICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwpAQCAtMjcwLDcg
KzI2Nyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlVmFyRGVjbGFyYXRpb25M
aXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBpbnQmIGRlY2xhcmF0aW9ucywgY29uc3QgSWRlbnRp
ZmllciomIGxhc3RJZGVudCwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwgaW50JiBp
ZGVudFN0YXJ0LCBpbnQmIGluaXRTdGFydCwgaW50JiBpbml0RW5kKQordGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VWYXJE
ZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGludCYgZGVjbGFyYXRpb25zLCBj
b25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxp
emVyLCBKU1RleHRQb3NpdGlvbiYgaWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFy
dCwgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQpCiB7CiAgICAgVHJlZUV4cHJlc3Npb24gdmFyRGVj
bHMgPSAwOwogICAgIGRvIHsKQEAgLTI3OSw3ICsyNzYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIG5leHQoKTsKICAgICAgICAgbWF0Y2hPckZh
aWwoSURFTlQpOwogICAgICAgICAKLSAgICAgICAgaW50IHZhclN0YXJ0ID0gdG9rZW5TdGFydCgp
OworICAgICAgICBKU1RleHRQb3NpdGlvbiB2YXJTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigp
OwogICAgICAgICBpZGVudFN0YXJ0ID0gdmFyU3RhcnQ7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXIqIG5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICAgICAgbGFzdElkZW50ID0gbmFt
ZTsKQEAgLTI4OCwxNyArMjg1LDE1IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3MKICAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShk
ZWNsYXJlVmFyaWFibGUobmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVkIiwg
bmFtZS0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUuIik7CiAgICAgICAgIGNvbnRleHQuYWRkVmFy
KG5hbWUsIChoYXNJbml0aWFsaXplciB8fCAoIW1fYWxsb3dzSW4gJiYgbWF0Y2goSU5UT0tFTikp
KSA/IERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJbml0aWFsaXplciA6IDApOwogICAgICAgICBpZiAo
aGFzSW5pdGlhbGl6ZXIpIHsKLSAgICAgICAgICAgIGludCB2YXJEaXZvdCA9IHRva2VuU3RhcnQo
KSArIDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCB2YXJMaW5lID0gdG9rZW5MaW5lKCk7IAotICAg
ICAgICAgICAgdW5zaWduZWQgdmFyTGluZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKLSAgICAg
ICAgICAgIGluaXRTdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICAgICAgICAgIEpTVGV4dFBvc2l0
aW9uIHZhckRpdm90ID0gdG9rZW5TdGFydFBvc2l0aW9uKCkgKyAxOworICAgICAgICAgICAgaW5p
dFN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBuZXh0KFRyZWVCdWls
ZGVyOjpEb250QnVpbGRTdHJpbmdzKTsgLy8gY29uc3VtZSAnPScKICAgICAgICAgICAgIFRyZWVF
eHByZXNzaW9uIGluaXRpYWxpemVyID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0
KTsKLSAgICAgICAgICAgIGluaXRFbmQgPSBsYXN0VG9rZW5FbmQoKTsKKyAgICAgICAgICAgIGlu
aXRFbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgbGFzdEluaXRpYWxp
emVyID0gaW5pdGlhbGl6ZXI7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShpbml0aWFsaXplcik7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIG5vZGUgPSBjb250ZXh0
LmNyZWF0ZUFzc2lnblJlc29sdmUobG9jYXRpb24sICpuYW1lLCBpbml0aWFsaXplciwgdmFyU3Rh
cnQsIHZhckRpdm90LCBsYXN0VG9rZW5FbmQoKSwgdmFyTGluZSwgdmFyTGluZVN0YXJ0KTsKKyAg
ICAgICAgICAgIFRyZWVFeHByZXNzaW9uIG5vZGUgPSBjb250ZXh0LmNyZWF0ZUFzc2lnblJlc29s
dmUobG9jYXRpb24sICpuYW1lLCBpbml0aWFsaXplciwgdmFyU3RhcnQsIHZhckRpdm90LCBsYXN0
VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIGlmICghdmFyRGVjbHMpCiAgICAgICAg
ICAgICAgICAgdmFyRGVjbHMgPSBub2RlOwogICAgICAgICAgICAgZWxzZQpAQCAtMzQ2LDEwICsz
NDEsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgY29u
c3VtZU9yRmFpbChPUEVOUEFSRU4pOwogICAgIGludCBub25MSFNDb3VudCA9IG1fbm9uTEhTQ291
bnQ7CiAgICAgaW50IGRlY2xhcmF0aW9ucyA9IDA7Ci0gICAgaW50IGRlY2xzU3RhcnQgPSAwOwot
ICAgIGludCBkZWNsc0VuZCA9IDA7Ci0gICAgdW5zaWduZWQgZGVjbHNMaW5lID0gMDsKLSAgICB1
bnNpZ25lZCBkZWNsc0xpbmVTdGFydCA9IDA7CisgICAgSlNUZXh0UG9zaXRpb24gZGVjbHNTdGFy
dDsKKyAgICBKU1RleHRQb3NpdGlvbiBkZWNsc0VuZDsKICAgICBUcmVlRXhwcmVzc2lvbiBkZWNs
cyA9IDA7CiAgICAgaWYgKG1hdGNoKFZBUikpIHsKICAgICAgICAgLyoKQEAgLTM2MCw4ICszNTMs
OCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXIqIGZvckluVGFyZ2V0ID0gMDsKICAgICAgICAgVHJlZUV4cHJlc3Npb24g
Zm9ySW5Jbml0aWFsaXplciA9IDA7CiAgICAgICAgIG1fYWxsb3dzSW4gPSBmYWxzZTsKLSAgICAg
ICAgaW50IGluaXRTdGFydCA9IDA7Ci0gICAgICAgIGludCBpbml0RW5kID0gMDsKKyAgICAgICAg
SlNUZXh0UG9zaXRpb24gaW5pdFN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBpbml0RW5k
OwogICAgICAgICBkZWNscyA9IHBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KGNvbnRleHQsIGRlY2xh
cmF0aW9ucywgZm9ySW5UYXJnZXQsIGZvckluSW5pdGlhbGl6ZXIsIGRlY2xzU3RhcnQsIGluaXRT
dGFydCwgaW5pdEVuZCk7CiAgICAgICAgIG1fYWxsb3dzSW4gPSB0cnVlOwogICAgICAgICBmYWls
SWZUcnVlKGhhc0Vycm9yKCkpOwpAQCAtMzczLDE0ICszNjYsMTIgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICBmYWlsSWZGYWxzZShkZWNsYXJhdGlv
bnMgPT0gMSk7CiAgICAgICAgIAogICAgICAgICAvLyBIYW5kbGUgZm9yLWluIHdpdGggdmFyIGRl
Y2xhcmF0aW9uCi0gICAgICAgIGludCBpbkxvY2F0aW9uID0gdG9rZW5TdGFydCgpOwotICAgICAg
ICB1bnNpZ25lZCBpbkxpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICAgICAgdW5zaWduZWQgaW5MaW5l
U3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgICAgICBKU1RleHRQb3NpdGlvbiBpbkxvY2F0
aW9uID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGNvbnN1bWVPckZhaWwoSU5UT0tF
Tik7CiAgICAgICAgIAogICAgICAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNz
aW9uKGNvbnRleHQpOwogICAgICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICAgICAgaW50IGV4
cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwckVuZCA9
IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBpbnQgZW5kTGluZSA9
IHRva2VuTGluZSgpOwogICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOwpAQCAtMzkx
LDE2ICszODIsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQog
ICAgICAgICBlbmRMb29wKCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGb3JJbkxvb3AobG9jYXRpb24sIGZv
ckluVGFyZ2V0LCBmb3JJbkluaXRpYWxpemVyLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQs
IGluTG9jYXRpb24sIGV4cHJFbmQsIGluaXRTdGFydCwgaW5pdEVuZCwgc3RhcnRMaW5lLCBlbmRM
aW5lLCBpbkxpbmUsIGluTGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
Rm9ySW5Mb29wKGxvY2F0aW9uLCBmb3JJblRhcmdldCwgZm9ySW5Jbml0aWFsaXplciwgZXhwciwg
c3RhdGVtZW50LCBkZWNsc1N0YXJ0LCBpbkxvY2F0aW9uLCBleHByRW5kLCBpbml0U3RhcnQsIGlu
aXRFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7CiAgICAgfQogICAgIAogICAgIGlmICghbWF0Y2go
U0VNSUNPTE9OKSkgewogICAgICAgICBtX2FsbG93c0luID0gZmFsc2U7Ci0gICAgICAgIGRlY2xz
U3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIGRlY2xzU3RhcnQgPSB0b2tlblN0YXJ0UG9z
aXRpb24oKTsKICAgICAgICAgZGVjbHMgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAg
ICAgIGRlY2xzRW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgICAgIGRlY2xzTGluZSA9IGxhc3RU
b2tlbkxpbmUoKTsKLSAgICAgICAgZGVjbHNMaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQo
KTsKKyAgICAgICAgZGVjbHNFbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICBt
X2FsbG93c0luID0gdHJ1ZTsKICAgICAgICAgZmFpbElmRmFsc2UoZGVjbHMpOwogICAgIH0KQEAg
LTQzNyw3ICs0MjYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
CiAgICAgY29uc3VtZU9yRmFpbChJTlRPS0VOKTsKICAgICBUcmVlRXhwcmVzc2lvbiBleHByID0g
cGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGlu
dCBleHByRW5kID0gbGFzdFRva2VuRW5kKCk7CisgICAgSlNUZXh0UG9zaXRpb24gZXhwckVuZCA9
IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsK
ICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOwogICAgIGNvbnN0IElkZW50aWZpZXIqIHVu
dXNlZCA9IDA7CkBAIC00NDYsNyArNDM1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZQogICAgIGVuZExvb3AoKTsKICAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQp
OwogICAgIAotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZvckluTG9vcChsb2NhdGlvbiwgZGVj
bHMsIGV4cHIsIHN0YXRlbWVudCwgZGVjbHNTdGFydCwgZGVjbHNFbmQsIGV4cHJFbmQsIHN0YXJ0
TGluZSwgZW5kTGluZSwgZGVjbHNMaW5lLCBkZWNsc0xpbmVTdGFydCk7CisgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBkZWNscywgZXhwciwgc3RhdGVtZW50LCBk
ZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTQ1NCwyNiArNDQzLDIxIEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHsKICAgICBBU1NFUlQobWF0Y2go
QlJFQUspKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsK
LSAgICBpbnQgc3RhcnRDb2wgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGVuZENvbCA9IHRva2Vu
RW5kKCk7Ci0gICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBlbmRMaW5l
ID0gdG9rZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZW5kTGluZVN0YXJ0ID0gdG9rZW5MaW5lU3Rh
cnQoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwor
ICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBuZXh0KCk7
CiAgICAgCiAgICAgaWYgKGF1dG9TZW1pQ29sb24oKSkgewogICAgICAgICBmYWlsSWZGYWxzZVdp
dGhNZXNzYWdlKGJyZWFrSXNWYWxpZCgpLCAiJ2JyZWFrJyBpcyBvbmx5IHZhbGlkIGluc2lkZSBh
IHN3aXRjaCBvciBsb29wIHN0YXRlbWVudCIpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVCcmVha1N0YXRlbWVudChsb2NhdGlvbiwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBl
bmRMaW5lLCBlbmRMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVh
a1N0YXRlbWVudChsb2NhdGlvbiwgc3RhcnQsIGVuZCk7CiAgICAgfQogICAgIG1hdGNoT3JGYWls
KElERU5UKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlk
ZW50OwogICAgIGZhaWxJZkZhbHNlV2l0aE5hbWVBbmRNZXNzYWdlKGdldExhYmVsKGlkZW50KSwg
IkxhYmVsIiwgaWRlbnQtPmltcGwoKSwgImlzIG5vdCBkZWZpbmVkIik7Ci0gICAgZW5kQ29sID0g
dG9rZW5FbmQoKTsKLSAgICBlbmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgZW5kTGluZVN0YXJ0
ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAg
bmV4dCgpOwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobG9jYXRpb24sIGlkZW50LCBzdGFydENvbCwgZW5k
Q29sLCBzdGFydExpbmUsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7CisgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobG9jYXRpb24sIGlkZW50LCBzdGFydCwgZW5kKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTQ4MSwyOCArNDY1LDIzIEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHsKICAgICBBU1NFUlQobWF0
Y2goQ09OVElOVUUpKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlv
bigpKTsKLSAgICBpbnQgc3RhcnRDb2wgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGVuZENvbCA9
IHRva2VuRW5kKCk7Ci0gICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBl
bmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZW5kTGluZVN0YXJ0ID0gdG9rZW5M
aW5lU3RhcnQoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlv
bigpOworICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBu
ZXh0KCk7CiAgICAgCiAgICAgaWYgKGF1dG9TZW1pQ29sb24oKSkgewogICAgICAgICBmYWlsSWZG
YWxzZVdpdGhNZXNzYWdlKGNvbnRpbnVlSXNWYWxpZCgpLCAiJ2NvbnRpbnVlJyBpcyBvbmx5IHZh
bGlkIGluc2lkZSBhIGxvb3Agc3RhdGVtZW50Iik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxvY2F0aW9uLCBzdGFydENvbCwgZW5kQ29sLCBzdGFydExp
bmUsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUNvbnRpbnVlU3RhdGVtZW50KGxvY2F0aW9uLCBzdGFydCwgZW5kKTsKICAgICB9CiAgICAgbWF0
Y2hPckZhaWwoSURFTlQpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5t
X2RhdGEuaWRlbnQ7CiAgICAgU2NvcGVMYWJlbEluZm8qIGxhYmVsID0gZ2V0TGFiZWwoaWRlbnQp
OwogICAgIGZhaWxJZkZhbHNlV2l0aE5hbWVBbmRNZXNzYWdlKGxhYmVsLCAiTGFiZWwiLCBpZGVu
dC0+aW1wbCgpLCAiaXMgbm90IGRlZmluZWQiKTsKICAgICBmYWlsSWZGYWxzZVdpdGhNZXNzYWdl
KGxhYmVsLT5tX2lzTG9vcCwgIidjb250aW51ZScgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBsb29w
IHN0YXRlbWVudCIpOwotICAgIGVuZENvbCA9IHRva2VuRW5kKCk7Ci0gICAgZW5kTGluZSA9IHRv
a2VuTGluZSgpOwotICAgIGVuZExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgZW5k
ID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQoKTsKICAgICBmYWlsSWZGYWxzZShhdXRv
U2VtaUNvbG9uKCkpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50
KGxvY2F0aW9uLCBpZGVudCwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBl
bmRMaW5lU3RhcnQpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50
KGxvY2F0aW9uLCBpZGVudCwgc3RhcnQsIGVuZCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBM
ZXhlclR5cGU+CkBAIC01MTEsMjkgKzQ5MCwyNCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lCiAgICAgQVNTRVJUKG1hdGNoKFJFVFVSTikpOwogICAgIEpTVG9rZW5M
b2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIGZhaWxJZkZhbHNlKGN1cnJl
bnRTY29wZSgpLT5pc0Z1bmN0aW9uKCkpOwotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUo
KTsKLSAgICBpbnQgZW5kTGluZSA9IHN0YXJ0TGluZTsKLSAgICBpbnQgc3RhcnQgPSB0b2tlblN0
YXJ0KCk7Ci0gICAgaW50IGVuZCA9IHRva2VuRW5kKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5l
ID0gdG9rZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQgPSB0b2tlbkxpbmVT
dGFydCgpOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7
CisgICAgSlNUZXh0UG9zaXRpb24gZW5kID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQo
KTsKICAgICAvLyBXZSBkbyB0aGUgYXV0byBzZW1pY29sb24gY2hlY2sgYmVmb3JlIGF0dGVtcHRp
bmcgdG8gcGFyc2UgYW4gZXhwcmVzc2lvbgogICAgIC8vIGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRo
ZSBhIGxpbmUgYnJlYWsgYWZ0ZXIgdGhlIHJldHVybiBjb3JyZWN0bHkgdGVybWluYXRlcwogICAg
IC8vIHRoZSBzdGF0ZW1lbnQKICAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkKLSAgICAgICAgZW5k
TGluZSAgPSB0b2tlbkxpbmUoKTsKKyAgICAgICAgZW5kID0gdG9rZW5FbmRQb3NpdGlvbigpOwor
CiAgICAgaWYgKGF1dG9TZW1pQ29sb24oKSkKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
UmV0dXJuU3RhdGVtZW50KGxvY2F0aW9uLCAwLCBzdGFydCwgZW5kLCBzdGFydExpbmUsIGVuZExp
bmUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVSZXR1cm5TdGF0ZW1lbnQobG9jYXRpb24sIDAsIHN0YXJ0LCBlbmQpOwogICAgIFRyZWVF
eHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgZmFpbElmRmFs
c2UoZXhwcik7Ci0gICAgZW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgZGl2b3RMaW5lID0gbGFz
dFRva2VuTGluZSgpOwotICAgIGRpdm90TGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7
CisgICAgZW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICBpZiAobWF0Y2goU0VNSUNP
TE9OKSkKLSAgICAgICAgZW5kTGluZSAgPSB0b2tlbkxpbmUoKTsKKyAgICAgICAgZW5kICA9IHRv
a2VuRW5kUG9zaXRpb24oKTsKICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZVJldHVyblN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgc3Rh
cnQsIGVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsK
KyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQobG9jYXRpb24sIGV4cHIs
IHN0YXJ0LCBlbmQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAtNTQx
LDIxICs1MTUsMTcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQog
ewogICAgIEFTU0VSVChtYXRjaChUSFJPVykpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlv
bih0b2tlbkxvY2F0aW9uKCkpOwotICAgIGludCBlU3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAg
aW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0g
dG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwogICAgIAogICAgIGZhaWxJZlRydWUo
YXV0b1NlbWlDb2xvbigpKTsKICAgICAKICAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VF
eHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGludCBlRW5k
ID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lID0gbGFzdFRva2VuTGlu
ZSgpOwotICAgIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7
Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBlbmQg
PSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24o
KSk7CiAgICAgCi0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlVGhyb3dTdGF0ZW1lbnQobG9jYXRp
b24sIGV4cHIsIGVTdGFydCwgZUVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUaHJvd1N0YXRlbWVudChs
b2NhdGlvbiwgZXhwciwgc3RhcnQsIGVuZCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhl
clR5cGU+CkBAIC01NzEsMTYgKzU0MSwxNCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lCiAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIFRyZWVFeHBy
ZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgZmFpbElmRmFsc2Uo
ZXhwcik7Ci0gICAgaW50IGVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgIHVuc2lnbmVkIGRpdm90
TGluZSA9IGxhc3RUb2tlbkxpbmUoKTsKLSAgICB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCA9IGxh
c3RUb2tlbkxpbmVTdGFydCgpOworICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IGxhc3RUb2tlbkVu
ZFBvc2l0aW9uKCk7CiAgICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKICAgICBjb25zdW1l
T3JGYWlsKENMT1NFUEFSRU4pOwogICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7CiAg
ICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0LCB1bnVz
ZWQpOwogICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CiAgICAgCi0gICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlV2l0aFN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBzdGFydCwg
ZW5kLCBzdGFydExpbmUsIGVuZExpbmUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZVdpdGhTdGF0ZW1lbnQobG9jYXRpb24sIGV4cHIsIHN0YXRl
bWVudCwgc3RhcnQsIGVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIExleGVyVHlwZT4KQEAgLTY2Nyw3ICs2MzUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgCiAgICAgdHJ5QmxvY2sgPSBwYXJzZUJsb2NrU3Rh
dGVtZW50KGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKHRyeUJsb2NrKTsKLSAgICBpbnQgbGFz
dExpbmUgPSBtX2xhc3RMaW5lOworICAgIGludCBsYXN0TGluZSA9IG1fbGFzdFRva2VuRW5kUG9z
aXRpb24ubGluZTsKICAgICAKICAgICBpZiAobWF0Y2goQ0FUQ0gpKSB7CiAgICAgICAgIGN1cnJl
bnRTY29wZSgpLT5zZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCk7CkBAIC03MTksMTMgKzY4NywxMyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgbmV4dCgpOwog
ICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkgewogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxvY2F0aW9uLCAwLCBzdGFydCwgbV9s
YXN0TGluZSk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxv
Y2F0aW9uLCAwLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lKTsKICAgICB9CiAg
ICAgVHJlZVNvdXJjZUVsZW1lbnRzIHN1YnRyZWUgPSBwYXJzZVNvdXJjZUVsZW1lbnRzPERvbnRD
aGVja0ZvclN0cmljdE1vZGU+KGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKHN1YnRyZWUpOwog
ICAgIG1hdGNoT3JGYWlsKENMT1NFQlJBQ0UpOwogICAgIG5leHQoKTsKLSAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVCbG9ja1N0YXRlbWVudChsb2NhdGlvbiwgc3VidHJlZSwgc3RhcnQsIG1fbGFz
dExpbmUpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxvY2F0aW9u
LCBzdWJ0cmVlLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lKTsKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTkzOCwyNCArOTA2LDIwIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBmYWlsSWZGYWxzZSgocGFyc2VG
dW5jdGlvbkluZm88RnVuY3Rpb25OZWVkc05hbWUsIHRydWU+KGNvbnRleHQsIG5hbWUsIHBhcmFt
ZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0
TGluZSwgYm9keVN0YXJ0Q29sdW1uKSkpOwogICAgIGZhaWxJZkZhbHNlKG5hbWUpOwogICAgIGZh
aWxJZkZhbHNlSWZTdHJpY3QoZGVjbGFyZVZhcmlhYmxlKG5hbWUpKTsKLSAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVGdW5jRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgbmFtZSwgYm9keSwgcGFyYW1l
dGVycywgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBt
X2xhc3RMaW5lLCBib2R5U3RhcnRDb2x1bW4pOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1
bmNEZWNsU3RhdGVtZW50KGxvY2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJh
Y2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5k
UG9zaXRpb24ubGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKIH0KIAogc3RydWN0IExhYmVsSW5mbyB7
Ci0gICAgTGFiZWxJbmZvKGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KQorICAgIExhYmVsSW5mbyhjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogICAgIDogbV9pZGVudChp
ZGVudCkKICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX2VuZChlbmQpCi0gICAgLCBtX2Rp
dm90TGluZShkaXZvdExpbmUpCi0gICAgLCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0YXJ0
KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgY29uc3QgSWRlbnRpZmllciogbV9pZGVudDsKLSAg
ICB1bnNpZ25lZCBtX3N0YXJ0OwotICAgIHVuc2lnbmVkIG1fZW5kOwotICAgIHVuc2lnbmVkIG1f
ZGl2b3RMaW5lOwotICAgIHVuc2lnbmVkIG1fZGl2b3RMaW5lU3RhcnQ7CisgICAgSlNUZXh0UG9z
aXRpb24gbV9zdGFydDsKKyAgICBKU1RleHRQb3NpdGlvbiBtX2VuZDsKIH07CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC05NjgsOCArOTMyLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIFZlY3RvcjxMYWJlbEluZm8+IGxhYmVsczsK
ICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24obV9zb3VyY2UtPnN0YXJ0T2Zmc2V0KCkpOwog
ICAgIGRvIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgICAgICBpbnQg
c3RhcnRpbmdMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0
ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlv
bigpOwogICAgICAgICBpZiAoIW5leHRUb2tlbklzQ29sb24oKSkgewogICAgICAgICAgICAgLy8g
SWYgd2UgaGl0IHRoaXMgcGF0aCB3ZSdyZSBtYWtpbmcgYSBleHByZXNzaW9uIHN0YXRlbWVudCwg
d2hpY2gKQEAgLTk3OCwxMiArOTQxLDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWUKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJz
ZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShleHByZXNzaW9u
KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHByU3RhdGVtZW50KGxvY2F0aW9uLCBleHByZXNzaW9u
LCBzdGFydGluZ0xpbmUsIG1fbGFzdExpbmUpOworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlRXhwclN0YXRlbWVudChsb2NhdGlvbiwgZXhwcmVzc2lvbiwgc3RhcnQsIG1fbGFzdFRv
a2VuRW5kUG9zaXRpb24ubGluZSk7CiAgICAgICAgIH0KICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICAgICAgaW50IGVuZCA9IHRva2Vu
RW5kKCk7Ci0gICAgICAgIHVuc2lnbmVkIGRpdm90TGluZSA9IHRva2VuTGluZSgpOwotICAgICAg
ICB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgIEpT
VGV4dFBvc2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgbmV4dCgpOwog
ICAgICAgICBjb25zdW1lT3JGYWlsKENPTE9OKTsKICAgICAgICAgaWYgKCFtX3N5bnRheEFscmVh
ZHlWYWxpZGF0ZWQpIHsKQEAgLTk5Miw3ICs5NTMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
YmVscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGlkZW50LT5pbXBs
KCkgPT0gbGFiZWxzW2ldLm1faWRlbnQtPmltcGwoKSk7CiAgICAgICAgICAgICBmYWlsSWZUcnVl
KGdldExhYmVsKGlkZW50KSk7Ci0gICAgICAgICAgICBsYWJlbHMuYXBwZW5kKExhYmVsSW5mbyhp
ZGVudCwgc3RhcnQsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkpOworICAgICAgICAg
ICAgbGFiZWxzLmFwcGVuZChMYWJlbEluZm8oaWRlbnQsIHN0YXJ0LCBlbmQpKTsKICAgICAgICAg
fQogICAgIH0gd2hpbGUgKG1hdGNoKElERU5UKSk7CiAgICAgYm9vbCBpc0xvb3AgPSBmYWxzZTsK
QEAgLTEwMTksNyArOTgwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZQogICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsYWJlbHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgY29uc3QgTGFiZWxJbmZvJiBpbmZv
ID0gbGFiZWxzW2xhYmVscy5zaXplKCkgLSBpIC0gMV07Ci0gICAgICAgIHN0YXRlbWVudCA9IGNv
bnRleHQuY3JlYXRlTGFiZWxTdGF0ZW1lbnQobG9jYXRpb24sIGluZm8ubV9pZGVudCwgc3RhdGVt
ZW50LCBpbmZvLm1fc3RhcnQsIGluZm8ubV9lbmQsIGluZm8ubV9kaXZvdExpbmUsIGluZm8ubV9k
aXZvdExpbmVTdGFydCk7CisgICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuY3JlYXRlTGFiZWxT
dGF0ZW1lbnQobG9jYXRpb24sIGluZm8ubV9pZGVudCwgc3RhdGVtZW50LCBpbmZvLm1fc3RhcnQs
IGluZm8ubV9lbmQpOwogICAgIH0KICAgICByZXR1cm4gc3RhdGVtZW50OwogfQpAQCAtMTAyNywx
MiArOTg4LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHRl
bXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRXhwcmVzc2lvblN0YXRlbWVu
dChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5l
KCk7CisgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAg
ICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICBUcmVlRXhw
cmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJ
ZkZhbHNlKGV4cHJlc3Npb24pOwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0g
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVudChsb2NhdGlvbiwgZXhwcmVzc2lv
biwgc3RhcnRMaW5lLCBtX2xhc3RMaW5lKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHBy
U3RhdGVtZW50KGxvY2F0aW9uLCBleHByZXNzaW9uLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3Np
dGlvbi5saW5lKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTExNDgs
OSArMTEwOSw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGZhaWxJ
ZlN0YWNrT3ZlcmZsb3coKTsKLSAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgdW5z
aWduZWQgbGluZSA9IHRva2VuTGluZSgpOwotICAgIHVuc2lnbmVkIGxpbmVTdGFydCA9IHRva2Vu
TGluZVN0YXJ0KCk7CisgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRp
b24oKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAg
ICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCA9IG1fYXNzaWdubWVudENvdW50OwogICAgIGlu
dCBpbml0aWFsTm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwpAQCAtMTE4MSwxMCArMTE0MCw4
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHIKICAgICAgICAgfQog
ICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgaGFkQXNzaWdu
bWVudCA9IHRydWU7Ci0gICAgICAgIGNvbnRleHQuYXNzaWdubWVudFN0YWNrQXBwZW5kKGFzc2ln
bm1lbnRTdGFjaywgbGhzLCBzdGFydCwgdG9rZW5TdGFydCgpLCBsaW5lLCBsaW5lU3RhcnQsIG1f
YXNzaWdubWVudENvdW50LCBvcCk7Ci0gICAgICAgIHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAg
ICAgICBsaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgICAgIGxpbmVTdGFydCA9IHRva2VuTGluZVN0
YXJ0KCk7CisgICAgICAgIGNvbnRleHQuYXNzaWdubWVudFN0YWNrQXBwZW5kKGFzc2lnbm1lbnRT
dGFjaywgbGhzLCBzdGFydCwgdG9rZW5TdGFydFBvc2l0aW9uKCksIG1fYXNzaWdubWVudENvdW50
LCBvcCk7CisgICAgICAgIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIG1f
YXNzaWdubWVudENvdW50Kys7CiAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0
cmluZ3MpOwogICAgICAgICBpZiAoc3RyaWN0TW9kZSgpICYmIG1fbGFzdElkZW50aWZpZXIgJiYg
Y29udGV4dC5pc1Jlc29sdmUobGhzKSkgewpAQCAtMTIwNiw3ICsxMTYzLDcgQEAgZW5kOgogICAg
ICAgICByZXR1cm4gbGhzOwogICAgIAogICAgIHdoaWxlIChhc3NpZ25tZW50U3RhY2spCi0gICAg
ICAgIGxocyA9IGNvbnRleHQuY3JlYXRlQXNzaWdubWVudChsb2NhdGlvbiwgYXNzaWdubWVudFN0
YWNrLCBsaHMsIGluaXRpYWxBc3NpZ25tZW50Q291bnQsIG1fYXNzaWdubWVudENvdW50LCBsYXN0
VG9rZW5FbmQoKSk7CisgICAgICAgIGxocyA9IGNvbnRleHQuY3JlYXRlQXNzaWdubWVudChsb2Nh
dGlvbiwgYXNzaWdubWVudFN0YWNrLCBsaHMsIGluaXRpYWxBc3NpZ25tZW50Q291bnQsIG1fYXNz
aWdubWVudENvdW50LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAKICAgICByZXR1cm4g
bGhzOwogfQpAQCAtMTI1MiwxMiArMTIwOSwxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVFeHByZXNzCiAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkJpbmFyeUV4cHJDb250
ZXh0IGJpbmFyeUV4cHJDb250ZXh0KGNvbnRleHQpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2Nh
dGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGludCBl
eHByU3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJTdGFy
dCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRz
ID0gbV9hc3NpZ25tZW50Q291bnQ7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGN1cnJlbnQgPSBw
YXJzZVVuYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2UoY3VycmVu
dCk7CiAgICAgICAgIAotICAgICAgICBjb250ZXh0LmFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZv
KG9wZXJhbmRTdGFja0RlcHRoLCBjdXJyZW50LCBleHByU3RhcnQsIGxhc3RUb2tlbkVuZCgpLCBs
YXN0VG9rZW5FbmQoKSwgbGFzdFRva2VuTGluZSgpLCBsYXN0VG9rZW5MaW5lU3RhcnQoKSwgaW5p
dGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50KTsKKyAgICAgICAgY29udGV4dC5h
cHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhvcGVyYW5kU3RhY2tEZXB0aCwgY3VycmVudCwgZXhw
clN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCBp
bml0aWFsQXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQpOwogICAgICAgICBpbnQgcHJl
Y2VkZW5jZSA9IGlzQmluYXJ5T3BlcmF0b3IobV90b2tlbi5tX3R5cGUpOwogICAgICAgICBpZiAo
IXByZWNlZGVuY2UpCiAgICAgICAgICAgICBicmVhazsKQEAgLTEzMzcsOCArMTI5NCw4IEBAIHRl
bXBsYXRlIDxib29sIGNvbXBsZXRlLCBjbGFzcyBUcmVlQnVpbGQKICAgICAgICAgbmV4dCgpOwog
ICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm88RnVuY3Rpb25Ob1JlcXVpcmVt
ZW50cywgZmFsc2U+KGNvbnRleHQsIGFjY2Vzc29yTmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3Bl
bkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRD
b2x1bW4pKSk7CiAgICAgICAgIGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICBy
ZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBs
ZXRlPihsb2NhdGlvbiwgdHlwZSwgc3RyaW5nUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5
LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFz
dExpbmUsIGJvZHlTdGFydENvbHVtbik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRl
IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHk8Y29tcGxldGU+KGNvbnN0X2Nhc3Q8Vk0qPiht
X3ZtKSwgbG9jYXRpb24sIHR5cGUsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJv
ZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9s
YXN0TGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnRl
bXBsYXRlIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHk8Y29tcGxldGU+KGxvY2F0aW9uLCB0
eXBlLCBzdHJpbmdQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNl
dCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlv
bi5saW5lLCBib2R5U3RhcnRDb2x1bW4pOworICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0
ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PFZNKj4o
bV92bSksIGxvY2F0aW9uLCB0eXBlLCBudW1lcmljUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBi
b2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1f
bGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKICAgICB9CiAgICAg
Y2FzZSBOVU1CRVI6IHsKICAgICAgICAgZG91YmxlIHByb3BlcnR5TmFtZSA9IG1fdG9rZW4ubV9k
YXRhLmRvdWJsZVZhbHVlOwpAQCAtMTUzNiwxNSArMTQ5MywxMyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIHJldHVybiBjb250ZXh0LnRoaXNFeHBy
KGxvY2F0aW9uKTsKICAgICB9CiAgICAgY2FzZSBJREVOVDogewotICAgICAgICBpbnQgc3RhcnQg
PSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIGludCBsaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgICAg
IGludCBsaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgICAgICBKU1RleHRQb3NpdGlv
biBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwogICAgICAgICBKU1Rva2VuTG9jYXRpb24g
bG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBjdXJy
ZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQsIG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwg
PT0gKmlkZW50KTsKICAgICAgICAgbV9sYXN0SWRlbnRpZmllciA9IGlkZW50OwotICAgICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVSZXNvbHZlKGxvY2F0aW9uLCBpZGVudCwgc3RhcnQsIGxpbmUs
IGxpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJlc29sdmUobG9jYXRp
b24sIGlkZW50LCBzdGFydCk7CiAgICAgfQogICAgIGNhc2UgU1RSSU5HOiB7CiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CkBAIC0xNTgzLDEy
ICsxNTM4LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgZmFpbElmRmFsc2UobV9sZXhlci0+c2NhblJlZ0V4cChw
YXR0ZXJuLCBmbGFncykpOwogICAgICAgICAKLSAgICAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFy
dCgpOwotICAgICAgICBpbnQgbGluZSA9IHRva2VuTGluZSgpOwotICAgICAgICBpbnQgbGluZVN0
YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0
b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRv
a2VuTG9jYXRpb24oKSk7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAgVHJlZUV4cHJlc3Npb24g
cmUgPSBjb250ZXh0LmNyZWF0ZVJlZ0V4cChsb2NhdGlvbiwgKnBhdHRlcm4sICpmbGFncywgc3Rh
cnQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIHJlID0gY29udGV4
dC5jcmVhdGVSZWdFeHAobG9jYXRpb24sICpwYXR0ZXJuLCAqZmxhZ3MsIHN0YXJ0KTsKICAgICAg
ICAgaWYgKCFyZSkgewogICAgICAgICAgICAgY29uc3QgY2hhciogeWFyckVycm9yTXNnID0gWWFy
cjo6Y2hlY2tTeW50YXgocGF0dGVybi0+c3RyaW5nKCkpOwogICAgICAgICAgICAgZmFpbFdpdGhN
ZXNzYWdlKHlhcnJFcnJvck1zZyk7CkBAIC0xNjI5LDEwICsxNTgyLDcgQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzc2lvbihUcmVlQnVpbGRl
ciYgY29udGV4dCkKIHsKICAgICBUcmVlRXhwcmVzc2lvbiBiYXNlID0gMDsKLSAgICBpbnQgc3Rh
cnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGV4cHJlc3Npb25TdGFydCA9IHN0YXJ0OwotICAg
IGludCBleHByZXNzaW9uTGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBleHByZXNzaW9uTGlu
ZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9u
U3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICBpbnQgbmV3Q291bnQgPSAwOwogICAg
IEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbihtX3NvdXJjZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAg
d2hpbGUgKG1hdGNoKE5FVykpIHsKQEAgLTE2NTEsNyArMTYwMSw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0
aW9uKCk7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rp
b25JbmZvPEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIGZhbHNlPihjb250ZXh0LCBuYW1lLCBwYXJh
bWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFy
dExpbmUsIGJvZHlTdGFydENvbHVtbikpKTsKLSAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRl
RnVuY3Rpb25FeHByKGxvY2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VP
ZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUsIGJvZHlT
dGFydENvbHVtbik7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihs
b2NhdGlvbiwgbmFtZSwgYm9keSwgcGFyYW1ldGVycywgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJy
YWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIGJv
ZHlTdGFydENvbHVtbik7CiAgICAgfSBlbHNlCiAgICAgICAgIGJhc2UgPSBwYXJzZVByaW1hcnlF
eHByZXNzaW9uKGNvbnRleHQpOwogICAgIApAQCAtMTY2MSwxNSArMTYxMSwxMyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIHN3aXRjaCAobV90b2tl
bi5tX3R5cGUpIHsKICAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogewogICAgICAgICAgICAgbV9u
b25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVu
ZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICAgICAgaW50IGV4cHJlc3Npb25MaW5lID0gbGFz
dFRva2VuTGluZSgpOwotICAgICAgICAgICAgaW50IGV4cHJlc3Npb25MaW5lU3RhcnQgPSBsYXN0
VG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25F
bmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAg
ICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKICAgICAgICAgICAgIGludCBp
bml0aWFsQXNzaWdubWVudHMgPSBtX2Fzc2lnbm1lbnRDb3VudDsKICAgICAgICAgICAgIFRyZWVF
eHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAg
ICAgZmFpbElmRmFsc2UocHJvcGVydHkpOwotICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlQnJhY2tldEFjY2Vzcyhsb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25t
ZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5k
LCB0b2tlbkVuZCgpLCBleHByZXNzaW9uTGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAg
ICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKGxvY2F0aW9uLCBiYXNl
LCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50LCBleHBy
ZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAg
ICAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0tFVCk7CiAgICAgICAgICAgICBtX25vbkxIU0Nv
dW50ID0gbm9uTEhTQ291bnQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2NzksMzAgKzE2Mjcs
MjUgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAg
ICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKICAgICAgICAgICAgIGlmIChuZXdD
b3VudCkgewogICAgICAgICAgICAgICAgIG5ld0NvdW50LS07Ci0gICAgICAgICAgICAgICAgaW50
IGV4cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleHBy
ZXNzaW9uTGluZSA9IGxhc3RUb2tlbkxpbmUoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBl
eHByZXNzaW9uTGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgICAgICAg
ICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7
CiAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50
cyhjb250ZXh0KTsKICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMpOwotICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2Us
IGFyZ3VtZW50cywgc3RhcnQsIGV4cHJFbmQsIGxhc3RUb2tlbkVuZCgpLCBleHByZXNzaW9uTGlu
ZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQu
Y3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQs
IGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4cHJlc3Npb25MaW5lID0gbGFzdFRva2VuTGlu
ZSgpOwotICAgICAgICAgICAgICAgIGludCBleHByZXNzaW9uTGluZVN0YXJ0ID0gbGFzdFRva2Vu
TGluZVN0YXJ0KCk7CisgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVu
ZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50
cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKICAgICAgICAgICAgICAgICBm
YWlsSWZGYWxzZShhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1h
a2VGdW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25T
dGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kKCksIGV4cHJlc3Npb25MaW5lLCBleHBy
ZXNzaW9uTGluZVN0YXJ0KTsKKyAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5tYWtlRnVu
Y3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQs
IGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBET1Q6IHsKICAgICAgICAgICAgIG1fbm9uVHJp
dmlhbEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBs
YXN0VG9rZW5FbmQoKTsKLSAgICAgICAgICAgIGV4cHJlc3Npb25MaW5lU3RhcnQgPSBsYXN0VG9r
ZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQg
PSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZp
ZXIoTGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxk
S2V5d29yZHMpOwogICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwotICAgICAgICAgICAg
YmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKGxvY2F0aW9uLCBiYXNlLCBtX3Rva2VuLm1f
ZGF0YS5pZGVudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZCgpLCBl
eHByZXNzaW9uTGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAgICAgICAgICBiYXNlID0g
Y29udGV4dC5jcmVhdGVEb3RBY2Nlc3MobG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlk
ZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7
CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTcxMiw3ICsxNjU1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
cwogICAgIH0KIGVuZE1lbWJlckV4cHJlc3Npb246CiAgICAgd2hpbGUgKG5ld0NvdW50LS0pCi0g
ICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIHN0YXJ0
LCBsYXN0VG9rZW5FbmQoKSwgZXhwcmVzc2lvbkxpbmUsIGV4cHJlc3Npb25MaW5lU3RhcnQpOwor
ICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBleHBy
ZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgIHJldHVybiBiYXNlOwog
fQogCkBAIC0xNzQ1LDE0ICsxNjg4LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3MKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtX25vbkxIU0Nv
dW50Kys7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kVW5hcnlUb2tlbih0b2tlblN0YWNrRGVwdGgs
IG1fdG9rZW4ubV90eXBlLCB0b2tlblN0YXJ0KCksIHRva2VuTGluZSgpLCB0b2tlbkxpbmVTdGFy
dCgpKTsKKyAgICAgICAgY29udGV4dC5hcHBlbmRVbmFyeVRva2VuKHRva2VuU3RhY2tEZXB0aCwg
bV90b2tlbi5tX3R5cGUsIHRva2VuU3RhcnRQb3NpdGlvbigpKTsKICAgICAgICAgbmV4dCgpOwog
ICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICB9Ci0gICAgaW50IHN1
YkV4cHJTdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgc3ViRXhwckxpbmUgPSB0b2tlbkxp
bmUoKTsKLSAgICBpbnQgc3ViRXhwckxpbmVTdGFydFBvc2l0aW9uID0gdG9rZW5MaW5lU3RhcnQo
KTsKLSAgICBBU1NFUlQoc3ViRXhwclN0YXJ0ID49IHN1YkV4cHJMaW5lU3RhcnRQb3NpdGlvbik7
CisgICAgSlNUZXh0UG9zaXRpb24gc3ViRXhwclN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7
CisgICAgQVNTRVJUKHN1YkV4cHJTdGFydC5vZmZzZXQgPj0gc3ViRXhwclN0YXJ0LmxpbmVTdGFy
dE9mZnNldCk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7
CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlTWVtYmVyRXhwcmVzc2lvbihjb250ZXh0
KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKQEAgLTE3NjYsNyArMTcwNyw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBjYXNlIFBMVVNQTFVTOgogICAg
ICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgbV9ub25MSFNDb3Vu
dCsrOwotICAgICAgICBleHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4
cHIsIE9wUGx1c1BsdXMsIHN1YkV4cHJTdGFydCwgbGFzdFRva2VuRW5kKCksIHRva2VuRW5kKCks
IHRva2VuTGluZSgpLCB0b2tlbkxpbmVTdGFydCgpKTsKKyAgICAgICAgZXhwciA9IGNvbnRleHQu
bWFrZVBvc3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBPcFBsdXNQbHVzLCBzdWJFeHByU3RhcnQs
IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgIG1f
YXNzaWdubWVudENvdW50Kys7CiAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdFdpdGhOYW1lQW5k
TWVzc2FnZShpc0V2YWxPckFyZ3VtZW50cywgIiciLCBtX2xhc3RJZGVudGlmaWVyLT5pbXBsKCks
ICInIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICBmYWlsSWZU
cnVlSWZTdHJpY3QocmVxdWlyZXNMRXhwcik7CkBAIC0xNzc1LDcgKzE3MTYsNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgY2FzZSBNSU5VU01JTlVTOgog
ICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgbV9ub25MSFND
b3VudCsrOwotICAgICAgICBleHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24s
IGV4cHIsIE9wTWludXNNaW51cywgc3ViRXhwclN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwgdG9rZW5F
bmQoKSwgdG9rZW5MaW5lKCksIHRva2VuTGluZVN0YXJ0KCkpOworICAgICAgICBleHByID0gY29u
dGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wTWludXNNaW51cywgc3ViRXhw
clN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogICAg
ICAgICBtX2Fzc2lnbm1lbnRDb3VudCsrOwogICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRo
TmFtZUFuZE1lc3NhZ2UoaXNFdmFsT3JBcmd1bWVudHMsICInIiwgbV9sYXN0SWRlbnRpZmllci0+
aW1wbCgpLCAiJyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAg
ZmFpbElmVHJ1ZUlmU3RyaWN0KHJlcXVpcmVzTEV4cHIpOwpAQCAtMTc4NSw5ICsxNzI2LDcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgCi0gICAgaW50IGVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgIGludCBlbmRM
aW5lID0gbGFzdFRva2VuTGluZSgpOwotICAgIGludCBlbmRMaW5lU3RhcnRQb3NpdGlvbiA9IGxh
c3RUb2tlbkxpbmVTdGFydCgpOworICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IGxhc3RUb2tlbkVu
ZFBvc2l0aW9uKCk7CiAKICAgICBpZiAoIVRyZWVCdWlsZGVyOjpDcmVhdGVzQVNUICYmIChtX3N5
bnRheEFscmVhZHlWYWxpZGF0ZWQgfHwgIXN0cmljdE1vZGUoKSkpCiAgICAgICAgIHJldHVybiBl
eHByOwpAQCAtMTgxMCwxMiArMTc0OSwxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQTFVTUExVUzoK
ICAgICAgICAgY2FzZSBBVVRPUExVU1BMVVM6Ci0gICAgICAgICAgICBleHByID0gY29udGV4dC5t
YWtlUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BQbHVzUGx1cywgY29udGV4dC51bmFyeVRv
a2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0ICsgMSwgZW5k
LCBzdWJFeHByTGluZSwgc3ViRXhwckxpbmVTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGV4
cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBPcFBsdXNQbHVzLCBj
b250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHBy
U3RhcnQgKyAxLCBlbmQpOwogICAgICAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1JTlVTTUlOVVM6CiAgICAgICAgIGNhc2UgQVVU
T01JTlVTTUlOVVM6Ci0gICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlUHJlZml4Tm9kZShs
b2NhdGlvbiwgZXhwciwgT3BNaW51c01pbnVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RT
dGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQsIHN1YkV4cHJMaW5l
LCBzdWJFeHByTGluZVN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgZXhwciA9IGNvbnRleHQu
bWFrZVByZWZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wTWludXNNaW51cywgY29udGV4dC51bmFy
eVRva2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0ICsgMSwg
ZW5kKTsKICAgICAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBUWVBFT0Y6CkBAIC0xODI2LDE0ICsxNzY1LDEzIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIERFTEVURVRPS0VOOgogICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0
aE5hbWVBbmRNZXNzYWdlKGNvbnRleHQuaXNSZXNvbHZlKGV4cHIpLCAiQ2Fubm90IGRlbGV0ZSB1
bnF1YWxpZmllZCBwcm9wZXJ0eSIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgImluIHN0cmlj
dCBtb2RlIik7Ci0gICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlRGVsZXRlTm9kZShsb2Nh
dGlvbiwgZXhwciwgY29udGV4dC51bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0Rl
cHRoKSwgZW5kLCBlbmQsIGVuZExpbmUsIGVuZExpbmVTdGFydFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VEZWxldGVOb2RlKGxvY2F0aW9uLCBleHByLCBjb250ZXh0
LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBlbmQsIGVuZCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIElmIHdl
IGdldCBoZXJlIHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSBob3JyaWJseSB3cm9uZwogICAg
ICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogICAgICAgICBzdWJFeHByU3RhcnQgPSBjb250
ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpOwotICAgICAgICBz
dWJFeHByTGluZVN0YXJ0UG9zaXRpb24gPSBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RMaW5l
U3RhcnRQb3NpdGlvbih0b2tlblN0YWNrRGVwdGgpOwogICAgICAgICBjb250ZXh0LnVuYXJ5VG9r
ZW5TdGFja1JlbW92ZUxhc3QodG9rZW5TdGFja0RlcHRoKTsKICAgICB9CiAgICAgcmV0dXJuIGV4
cHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDE1
MjU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NSw4ICs0NzUsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBwYXJzZUlubmVy
KCk7CiAKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqLCBQYXJzZXJB
cmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiosIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3Rh
Y2s+KiwgQ29kZUZlYXR1cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwg
SWRlbnRpZmllclNldCYpOworICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFj
a3M6OkZ1bmN0aW9uU3RhY2s+KiwgQ29kZUZlYXR1cmVzLCBpbnQsIElkZW50aWZpZXJTZXQmKTsK
IAogICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIHR5cGUgb2YgZXJyb3IgdG8gcmVwb3J0LgogICAg
IGJvb2wgaXNGdW5jdGlvbkJvZHlOb2RlKFNjb3BlTm9kZSopIHsgcmV0dXJuIGZhbHNlOyB9CkBA
IC00ODQsMjAgKzQ4MywyMiBAQCBwcml2YXRlOgogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIG5l
eHQodW5zaWduZWQgbGV4ZXJGbGFncyA9IDApCiAgICAgewotICAgICAgICBtX2xhc3RMaW5lID0g
bV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7Ci0gICAgICAgIG1fbGFzdFRva2VuRW5kID0gbV90b2tl
bi5tX2xvY2F0aW9uLmVuZE9mZnNldDsKLSAgICAgICAgbV9sYXN0VG9rZW5MaW5lU3RhcnQgPSBt
X3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwotICAgICAgICBtX2xleGVyLT5zZXRM
YXN0TGluZU51bWJlcihtX2xhc3RMaW5lKTsKLSAgICAgICAgbV90b2tlbi5tX3R5cGUgPSBtX2xl
eGVyLT5sZXgoJm1fdG9rZW4ubV9kYXRhLCAmbV90b2tlbi5tX2xvY2F0aW9uLCBsZXhlckZsYWdz
LCBzdHJpY3RNb2RlKCkpOworICAgICAgICBpbnQgbGFzdExpbmUgPSBtX3Rva2VuLm1fbG9jYXRp
b24ubGluZTsKKyAgICAgICAgaW50IGxhc3RUb2tlbkVuZCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5l
bmRPZmZzZXQ7CisgICAgICAgIGludCBsYXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9j
YXRpb24ubGluZVN0YXJ0T2Zmc2V0OworICAgICAgICBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uID0g
SlNUZXh0UG9zaXRpb24obGFzdExpbmUsIGxhc3RUb2tlbkVuZCwgbGFzdFRva2VuTGluZVN0YXJ0
KTsKKyAgICAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIobGFzdExpbmUpOworICAgICAg
ICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleCgmbV90b2tlbiwgbGV4ZXJGbGFncywgc3Ry
aWN0TW9kZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbmV4dEV4cGVjdElk
ZW50aWZpZXIodW5zaWduZWQgbGV4ZXJGbGFncyA9IDApCiAgICAgewotICAgICAgICBtX2xhc3RM
aW5lID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7Ci0gICAgICAgIG1fbGFzdFRva2VuRW5kID0g
bV90b2tlbi5tX2xvY2F0aW9uLmVuZE9mZnNldDsKLSAgICAgICAgbV9sYXN0VG9rZW5MaW5lU3Rh
cnQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwotICAgICAgICBtX2xleGVy
LT5zZXRMYXN0TGluZU51bWJlcihtX2xhc3RMaW5lKTsKLSAgICAgICAgbV90b2tlbi5tX3R5cGUg
PSBtX2xleGVyLT5sZXhFeHBlY3RJZGVudGlmaWVyKCZtX3Rva2VuLm1fZGF0YSwgJm1fdG9rZW4u
bV9sb2NhdGlvbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSgpKTsKKyAgICAgICAgaW50IGxhc3RM
aW5lID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7CisgICAgICAgIGludCBsYXN0VG9rZW5FbmQg
PSBtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0OworICAgICAgICBpbnQgbGFzdFRva2VuTGlu
ZVN0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKKyAgICAgICAgbV9s
YXN0VG9rZW5FbmRQb3NpdGlvbiA9IEpTVGV4dFBvc2l0aW9uKGxhc3RMaW5lLCBsYXN0VG9rZW5F
bmQsIGxhc3RUb2tlbkxpbmVTdGFydCk7CisgICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVt
YmVyKGxhc3RMaW5lKTsKKyAgICAgICAgbV90b2tlbi5tX3R5cGUgPSBtX2xleGVyLT5sZXhFeHBl
Y3RJZGVudGlmaWVyKCZtX3Rva2VuLCBsZXhlckZsYWdzLCBzdHJpY3RNb2RlKCkpOwogICAgIH0K
IAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBuZXh0VG9rZW5Jc0NvbG9uKCkKQEAgLTUxNSw3ICs1
MTYsNyBAQCBwcml2YXRlOgogICAgIAogICAgIEFMV0FZU19JTkxJTkUgU3RyaW5nIGdldFRva2Vu
KCkgewogICAgICAgICBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIgPSBtX3NvdXJjZS0+
cHJvdmlkZXIoKTsKLSAgICAgICAgcmV0dXJuIHNvdXJjZVByb3ZpZGVyLT5nZXRSYW5nZSh0b2tl
blN0YXJ0KCksIHRva2VuRW5kKCkpOworICAgICAgICByZXR1cm4gc291cmNlUHJvdmlkZXItPmdl
dFJhbmdlKHRva2VuU3RhcnQoKSwgdG9rZW5FbmRQb3NpdGlvbigpLm9mZnNldCk7CiAgICAgfQog
ICAgIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBtYXRjaChKU1Rva2VuVHlwZSBleHBlY3RlZCkK
QEAgLTUyOCw2ICs1MjksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9s
b2NhdGlvbi5zdGFydE9mZnNldDsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSBjb25z
dCBKU1RleHRQb3NpdGlvbiYgdG9rZW5TdGFydFBvc2l0aW9uKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3Rva2VuLm1fc3RhcnRQb3NpdGlvbjsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5F
IGludCB0b2tlbkxpbmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9sb2NhdGlv
bi5saW5lOwpAQCAtNTM4LDkgKzU0NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0b2tl
blN0YXJ0KCkgLSB0b2tlbkxpbmVTdGFydCgpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgdG9rZW5FbmQoKQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSlNUZXh0UG9zaXRp
b24mIHRva2VuRW5kUG9zaXRpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9s
b2NhdGlvbi5lbmRPZmZzZXQ7CisgICAgICAgIHJldHVybiBtX3Rva2VuLm1fZW5kUG9zaXRpb247
CiAgICAgfQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgdG9rZW5MaW5lU3RhcnQo
KQpAQCAtOTE1LDcgKzkyMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGJvb2wgc3RyaWN0
LCBjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlUHJvcGVydHkgcGFyc2VQcm9w
ZXJ0eShUcmVlQnVpbGRlciYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxX
QVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVy
Jik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVG
b3JtYWxQYXJhbWV0ZXJMaXN0IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYpOwot
ICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVz
c2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRp
b25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdElu
aXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGluaXRFbmQp
OworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhw
cmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFy
YXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFz
dEluaXRpYWxpemVyLCBKU1RleHRQb3NpdGlvbiYgaWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24m
IGluaXRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQpOwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlQ29uc3REZWNsTGlzdCBwYXJzZUNvbnN0
RGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0KTsKICAgICB0ZW1wbGF0ZSA8RnVu
Y3Rpb25SZXF1aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzIFRy
ZWVCdWlsZGVyPiBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgY29uc3QgSWRl
bnRpZmllciomLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYsIFRyZWVGdW5jdGlvbkJvZHkmLCB1
bnNpZ25lZCYgb3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25lZCYgY2xvc2VCcmFjZU9mZnNldCwgaW50
JiBib2R5U3RhcnRMaW5lLCB1bnNpZ25lZCYgYm9keVN0YXJ0Q29sdW1uKTsKICAgICBBTFdBWVNf
SU5MSU5FIGludCBpc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5UeXBlKTsKQEAgLTkzNSwxOSArOTQx
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fc3RhY2suaXNTYWZlVG9SZWN1cnNlKCk7
CiAgICAgfQogICAgIAotICAgIGludCBsYXN0VG9rZW5FbmQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbGFzdFRva2VuRW5kOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGxhc3RUb2tl
bkxpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGFzdExpbmU7Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgbGFzdFRva2VuTGluZVN0YXJ0KCkgY29uc3QKKyAgICBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgbGFzdFRva2VuRW5kUG9zaXRpb24oKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fbGFzdFRva2VuTGluZVN0YXJ0OworICAgICAgICByZXR1cm4gbV9sYXN0VG9rZW5F
bmRQb3NpdGlvbjsKICAgICB9CiAKICAgICBib29sIGhhc0Vycm9yKCkgY29uc3QKQEAgLTk2NSwx
MCArOTYxLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgSlNU
b2tlbiBtX3Rva2VuOwogICAgIGJvb2wgbV9hbGxvd3NJbjsKLSAgICB1bnNpZ25lZCBtX2xhc3RM
aW5lOwotICAgIGludCBtX2xhc3RUb2tlbkVuZDsKLSAgICB1bnNpZ25lZCBtX2xhc3RUb2tlbkxp
bmU7Ci0gICAgdW5zaWduZWQgbV9sYXN0VG9rZW5MaW5lU3RhcnQ7CisgICAgSlNUZXh0UG9zaXRp
b24gbV9sYXN0VG9rZW5FbmRQb3NpdGlvbjsKICAgICBpbnQgbV9hc3NpZ25tZW50Q291bnQ7CiAg
ICAgaW50IG1fbm9uTEhTQ291bnQ7CiAgICAgYm9vbCBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQ7
CkBAIC0xMDUxLDcgKzEwNDQsNyBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhl
clR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1Db25zdGFudHMpOwotICAgICAgICByZXN1
bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdExpbmUsIG1fbGV4ZXItPmN1
cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGluZSgpLCBtX2xhc3RUb2tlbkVuZFBv
c2l0aW9uLmxpbmUsIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+Y3VycmVudExp
bmVTdGFydE9mZnNldCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBjYW4gbmV2ZXIg
c2VlIGEgc3ludGF4IGVycm9yIHdoZW4gcmVwYXJzaW5nIGEgZnVuY3Rpb24sIHNpbmNlIHdlIHNo
b3VsZCBoYXZlCiAgICAgICAgIC8vIHJlcG9ydGVkIHRoZSBlcnJvciB3aGVuIHBhcnNpbmcgdGhl
IGNvbnRhaW5pbmcgcHJvZ3JhbSBvciBldmFsIGNvZGUuIFNvIGlmIHdlJ3JlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgJKHJldmlzaW9uIDE1MjU4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1MCw2ICsxNTAsMjQgQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAgICAgSU5W
QUxJRF9TVFJJTkdfTElURVJBTF9FUlJPUlRPSyA9IDkgfCBFcnJvclRva2VuRmxhZywKIH07CiAK
K3N0cnVjdCBKU1RleHRQb3NpdGlvbiB7CisgICAgSlNUZXh0UG9zaXRpb24oKSA6IGxpbmUoMCks
IG9mZnNldCgwKSwgbGluZVN0YXJ0T2Zmc2V0KDApIHsgfQorICAgIEpTVGV4dFBvc2l0aW9uKGlu
dCBfbGluZSwgaW50IF9vZmZzZXQsIGludCBfbGluZVN0YXJ0T2Zmc2V0KSA6IGxpbmUoX2xpbmUp
LCBvZmZzZXQoX29mZnNldCksIGxpbmVTdGFydE9mZnNldChfbGluZVN0YXJ0T2Zmc2V0KSB7IH0K
KyAgICBKU1RleHRQb3NpdGlvbihjb25zdCBKU1RleHRQb3NpdGlvbiYgb3RoZXIpIDogbGluZShv
dGhlci5saW5lKSwgb2Zmc2V0KG90aGVyLm9mZnNldCksIGxpbmVTdGFydE9mZnNldChvdGhlci5s
aW5lU3RhcnRPZmZzZXQpIHsgfQorCisgICAgSlNUZXh0UG9zaXRpb24gb3BlcmF0b3IrKGludCBh
ZGp1c3RtZW50KSBjb25zdCB7IHJldHVybiBKU1RleHRQb3NpdGlvbihsaW5lLCBvZmZzZXQgKyBh
ZGp1c3RtZW50LCBsaW5lU3RhcnRPZmZzZXQpOyB9CisgICAgSlNUZXh0UG9zaXRpb24gb3BlcmF0
b3IrKHVuc2lnbmVkIGFkanVzdG1lbnQpIGNvbnN0IHsgcmV0dXJuICp0aGlzICsgc3RhdGljX2Nh
c3Q8aW50PihhZGp1c3RtZW50KTsgfQorICAgIEpTVGV4dFBvc2l0aW9uIG9wZXJhdG9yLShjb25z
dCBKU1RleHRQb3NpdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICp0aGlzICsgKC0gb3RoZXIu
b2Zmc2V0KTsgfQorICAgIEpTVGV4dFBvc2l0aW9uIG9wZXJhdG9yLShpbnQgYWRqdXN0bWVudCkg
Y29uc3QgeyByZXR1cm4gKnRoaXMgKyAoLSBhZGp1c3RtZW50KTsgfQorICAgIEpTVGV4dFBvc2l0
aW9uIG9wZXJhdG9yLSh1bnNpZ25lZCBhZGp1c3RtZW50KSBjb25zdCB7IHJldHVybiAqdGhpcyAr
ICgtIHN0YXRpY19jYXN0PGludD4oYWRqdXN0bWVudCkpOyB9CisKKyAgICBvcGVyYXRvciBpbnQo
KSBjb25zdCB7IHJldHVybiBvZmZzZXQ7IH0KKworICAgIGludCBsaW5lOworICAgIGludCBvZmZz
ZXQ7CisgICAgaW50IGxpbmVTdGFydE9mZnNldDsKK307CisKIHVuaW9uIEpTVG9rZW5EYXRhIHsK
ICAgICBzdHJ1Y3QgewogICAgICAgICB1aW50MzJfdCBsaW5lOwpAQCAtMTg3LDYgKzIwNSw4IEBA
IHN0cnVjdCBKU1Rva2VuIHsKICAgICBKU1Rva2VuVHlwZSBtX3R5cGU7CiAgICAgSlNUb2tlbkRh
dGEgbV9kYXRhOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBtX2xvY2F0aW9uOworICAgIEpTVGV4dFBv
c2l0aW9uIG1fc3RhcnRQb3NpdGlvbjsKKyAgICBKU1RleHRQb3NpdGlvbiBtX2VuZFBvc2l0aW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSwyMSArMTE5LDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRG9udEJ1
aWxkU3RyaW5ncyA9IExleGVyRmxhZ3NEb250QnVpbGRTdHJpbmdzOwogCiAgICAgaW50IGNyZWF0
ZVNvdXJjZUVsZW1lbnRzKCkgeyByZXR1cm4gMTsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VG
dW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlw
ZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KICAgICB2b2lkIGFwcGVuZFRvQ29t
bWEoRXhwcmVzc2lvblR5cGUmIGJhc2UsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KSB7IGJhc2UgPSBy
aWdodDsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUgcmlnaHQpIHsgcmV0dXJu
IHJpZ2h0OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBFeHByZXNzaW9uVHlwZSwgYm9v
bCwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHBy
OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkg
eyByZXR1cm4gUHJlRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VQb3N0Zml4Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIGludCwgaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBQb3N0RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBl
IG1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBP
cGVyYXRvciwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50LCBpbnQpIHsgcmV0
dXJuIEFzc2lnbm1lbnRFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZVByZWZpeE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiBQcmVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZVBvc3Rm
aXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gUG9zdEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBt
YWtlVHlwZU9mTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyBy
ZXR1cm4gVHlwZW9mRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VEZWxldGVOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gRGVsZXRlRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VEZWxl
dGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBEZWxldGVFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZU5lZ2F0
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVu
YXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIG1ha2VCaXR3aXNlTm90Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTG9naWNhbE5vdChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlVW5hcnlQbHVzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
KSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVWb2lkKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7
IH0KICAgICBFeHByZXNzaW9uVHlwZSB0aGlzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7
IHJldHVybiBUaGlzRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlc29sdmUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIFJlc29sdmVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVzb2x2ZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJldHVybiBS
ZXNvbHZlRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KICAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCkgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVBcnJheShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIEFycmF5TGl0
ZXJhbEV4cHI7IH0KQEAgLTE0MiwxMyArMTQyLDEzIEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVTdHJpbmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmll
ciopIHsgcmV0dXJuIFN0cmluZ0V4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVCb29s
ZWFuKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGJvb2wpIHsgcmV0dXJuIEJvb2xFeHByOyB9CiAg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTnVsbChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJl
dHVybiBOdWxsRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUJyYWNrZXRBY2Nlc3Mo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBi
b29sLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQnJhY2tldEV4cHI7IH0KLSAg
ICBFeHByZXNzaW9uVHlwZSBjcmVhdGVEb3RBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvblR5cGUsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gRG90RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlZ0V4cChj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJ
ZGVudGlmaWVyJiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gWWFycjo6Y2hlY2tTeW50YXgocGF0
dGVybi5zdHJpbmcoKSkgPyAwIDogUmVnRXhwRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KKyAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4g
QnJhY2tldEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVEb3RBY2Nlc3MoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQs
IGludCwgaW50KSB7IHJldHVybiBEb3RFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRl
UmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4s
IGNvbnN0IElkZW50aWZpZXImLCBpbnQpIHsgcmV0dXJuIFlhcnI6OmNoZWNrU3ludGF4KHBhdHRl
cm4uc3RyaW5nKCkpID8gMCA6IFJlZ0V4cEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGlu
dCkgeyByZXR1cm4gTmV3RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbmRpdGlv
bmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lv
blR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBDb25kaXRpb25hbEV4cHI7IH0KLSAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRl
QXNzaWduUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwg
RXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9
CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQogICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHko
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBib29s
KSB7IHJldHVybiAxOyB9CiAgICAgdm9pZCBzZXRGdW5jdGlvblN0YXJ0KGludCwgaW50KSB7IH0K
QEAgLTE4NSwyMiArMTg1LDIyIEBAIHB1YmxpYzoKICAgICBpbnQgY3JlYXRlSWZTdGF0ZW1lbnQo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9
CiAgICAgaW50IGNyZWF0ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZUZvckxvb3Ao
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyBy
ZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlRm9y
SW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGb3JJ
bkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQor
ICAgIGludCBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3Jl
YXRlRW1wdHlTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gMTsgfQog
ICAgIGludCBjcmVhdGVWYXJTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBp
bnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7
IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50
IGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50
aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBj
cmVhdGVDb250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVDb250aW51ZVN0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlUmV0dXJuU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
KyAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50KSB7IHJldHVybiAx
OyB9CisgICAgaW50IGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUNvbnRpbnVlU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCkg
eyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVUcnlTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZVN3aXRjaFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAg
aW50IGNyZWF0ZVdoaWxlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVXaXRoU3RhdGVtZW50KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwg
aW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsg
fQogICAgIGludCBjcmVhdGVEb1doaWxlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVMYWJlbFN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBp
bnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlVGhyb3dTdGF0
ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVRocm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRGVidWdn
ZXIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBp
bnQgY3JlYXRlQ29uc3RTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBhcHBlbmRDb25zdERlY2woY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJldHVybiAxOyB9CkBA
IC0yMjIsNyArMjIyLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVmFyKGNvbnN0IElkZW50aWZp
ZXIqLCBib29sKSB7IH0KICAgICBpbnQgY29tYmluZUNvbW1hTm9kZXMoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgZXZhbENvdW50KCkgY29u
c3QgeyByZXR1cm4gMDsgfQotICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8oaW50
JiBvcGVyYW5kU3RhY2tEZXB0aCwgaW50IGV4cHIsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBi
b29sKQorICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8oaW50JiBvcGVyYW5kU3Rh
Y2tEZXB0aCwgaW50IGV4cHIsIGludCwgaW50LCBpbnQsIGJvb2wpCiAgICAgewogICAgICAgICBp
ZiAoIW1fdG9wQmluYXJ5RXhwcikKICAgICAgICAgICAgIG1fdG9wQmluYXJ5RXhwciA9IGV4cHI7
CkBAIC0yNDAsMTMgKzI0MCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVyYXRvclN0YWNrQXBw
ZW5kKGludCYgb3BlcmF0b3JTdGFja0RlcHRoLCBpbnQsIGludCkgeyBvcGVyYXRvclN0YWNrRGVw
dGgrKzsgfQogICAgIGludCBwb3BPcGVyYW5kU3RhY2soaW50JikgeyBpbnQgcmVzID0gbV90b3BC
aW5hcnlFeHByOyBtX3RvcEJpbmFyeUV4cHIgPSAwOyByZXR1cm4gcmVzOyB9CiAgICAgCi0gICAg
dm9pZCBhcHBlbmRVbmFyeVRva2VuKGludCYgc3RhY2tEZXB0aCwgaW50IHRvaywgaW50LCBpbnQs
IGludCkgeyBzdGFja0RlcHRoID0gMTsgbV90b3BVbmFyeVRva2VuID0gdG9rOyB9CisgICAgdm9p
ZCBhcHBlbmRVbmFyeVRva2VuKGludCYgc3RhY2tEZXB0aCwgaW50IHRvaywgaW50KSB7IHN0YWNr
RGVwdGggPSAxOyBtX3RvcFVuYXJ5VG9rZW4gPSB0b2s7IH0KICAgICBpbnQgdW5hcnlUb2tlblN0
YWNrTGFzdFR5cGUoaW50JikgeyByZXR1cm4gbV90b3BVbmFyeVRva2VuOyB9Ci0gICAgdW5zaWdu
ZWQgdW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KGludCYpIHsgcmV0dXJuIDA7IH0KLSAgICB1bnNp
Z25lZCB1bmFyeVRva2VuU3RhY2tMYXN0TGluZVN0YXJ0UG9zaXRpb24oaW50JikgeyByZXR1cm4g
MDsgfQorICAgIEpTVGV4dFBvc2l0aW9uIHVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydChpbnQmKSB7
IHJldHVybiBKU1RleHRQb3NpdGlvbigwLCAwLCAwKTsgfQogICAgIHZvaWQgdW5hcnlUb2tlblN0
YWNrUmVtb3ZlTGFzdChpbnQmIHN0YWNrRGVwdGgpIHsgc3RhY2tEZXB0aCA9IDA7IH0KICAgICAK
LSAgICB2b2lkIGFzc2lnbm1lbnRTdGFja0FwcGVuZChpbnQsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIE9wZXJhdG9yKSB7IH0KKyAgICB2b2lkIGFzc2lnbm1lbnRTdGFja0FwcGVuZChp
bnQsIGludCwgaW50LCBpbnQsIGludCwgT3BlcmF0b3IpIHsgfQogICAgIGludCBjcmVhdGVBc3Np
Z25tZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAxOyB9CiAgICAgY29uc3QgSWRl
bnRpZmllciYgZ2V0TmFtZShjb25zdCBQcm9wZXJ0eSYgcHJvcGVydHkpIGNvbnN0IHsgQVNTRVJU
KHByb3BlcnR5Lm5hbWUpOyByZXR1cm4gKnByb3BlcnR5Lm5hbWU7IH0KICAgICBQcm9wZXJ0eU5v
ZGU6OlR5cGUgZ2V0VHlwZShjb25zdCBQcm9wZXJ0eSYgcHJvcGVydHkpIGNvbnN0IHsgcmV0dXJu
IHByb3BlcnR5LnR5cGU7IH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MjU4MykKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA3LTIy
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggcHJvYmxlbXMg
d2l0aCBkaXZvdCBhbmQgbGluZVN0YXJ0IG1pc21hdGNoZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2NjIuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lvbiB0ZXN0IGNhc2Vz
IGZyb20gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODY2MgorICAg
ICAgICBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODY2NC4K
KworICAgICAgICAqIGZhc3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6CisgICAgICAgICogZmFz
dC9qcy9zY3JpcHQtdGVzdHMvbGluZS1jb2x1bW4tbnVtYmVycy5qczoKKyAgICAgICAgKHRyeS50
b0Z1enoxKToKKyAgICAgICAgKHRyeS50b0Z1enoyKToKKwogMjAxMy0wNy0xMSAgUm9nZXIgRm9u
ZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2Ugc2ltcGxlX2JsYW5r
LnN3ZiB3aXRoIGxpbmVzLnN3ZiBmb3Igc25hcHNob3R0aW5nIHRlc3RzLgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAxNTI1ODMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2xpbmUtY29sdW1uLW51
bWJlcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxNCBAQCBPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAgICAgMiAgIGV2YWwgYXQgW25h
dGl2ZSBjb2RlXQogICAgIDMgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0
bWw6MTU1OjUKIAorLS0+IENhc2UgMTkgU3RhY2sgVHJhY2U6CisgICAgMCAgIHRvRnV6ejEgYXQg
bGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE2OToyNgorICAgIDEgICBnbG9iYWwgY29kZSBhdCBs
aW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTcyOjEyCisKKy0tPiBDYXNlIDIwIFN0YWNrIFRyYWNl
OgorICAgIDAgICB0b0Z1enoyIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoxODM6NDEKKyAg
ICAxICAgZ2xvYmFsIGNvZGUgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE4NzoxMgorCiAt
LT4gQ2FzZSAxIFN0YWNrIFRyYWNlOgogICAgIDAgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVt
bi1udW1iZXJzLmpzOjM6MjgKIApAQCAtMTgzLDYgKzE5MSwxNCBAQCBPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAgICAgMiAgIGV2YWwgYXQgW25hdGl2ZSBjb2RlXQog
ICAgIDMgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjk2OjUKIAorLS0+
IENhc2UgMTkgU3RhY2sgVHJhY2U6CisgICAgMCAgIHRvRnV6ejEgYXQgbGluZS1jb2x1bW4tbnVt
YmVycy5qczoxMDg6MjYKKyAgICAxICAgZ2xvYmFsIGNvZGUgYXQgbGluZS1jb2x1bW4tbnVtYmVy
cy5qczoxMTE6MTIKKworLS0+IENhc2UgMjAgU3RhY2sgVHJhY2U6CisgICAgMCAgIHRvRnV6ejIg
YXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxMjA6NDEKKyAgICAxICAgZ2xvYmFsIGNvZGUgYXQg
bGluZS1jb2x1bW4tbnVtYmVycy5qczoxMjQ6MTIKKwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2xpbmUt
Y29sdW1uLW51bWJlcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2xp
bmUtY29sdW1uLW51bWJlcnMuaHRtbAkocmV2aXNpb24gMTUyNTgzKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2
ICsxNjEsMzUgQEAgZXZhbCgiXG4iICsKICIiKTsKIDwvc2NyaXB0PgogCis8IS0tIENhc2UgMTk6
IFJlZ3Jlc3Npb24gdGVzdCBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTg2NjIgLS0+Cis8c2NyaXB0PnRlc3RJZCsrOzwvc2NyaXB0PgorPHNjcmlwdD4KK3Ry
eSB7CisgICAgZnVuY3Rpb24gdG9GdXp6MSgpIHsKKyAgICAgICAgaWYgKFByaW9yaXR5UXVldWUu
cHJvdG90eXBlLmRvU29ydCgpIGluc3RhbmNlb2YgKHRoaXMgXj0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIH0pKSByZXR1cm4gMjsgCisgICAgfQorICAgIHRvRnV6ejEoKTsKK30gY2F0Y2goZSkgewor
ICAgIHByaW50U3RhY2soZS5zdGFjayk7Cit9Cis8L3NjcmlwdD4KKworPCEtLSBDYXNlIDIwOiBS
ZWdyZXNzaW9uIHRlc3QgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE4NjY0IC0tPgorPHNjcmlwdD50ZXN0SWQrKzs8L3NjcmlwdD4KKzxzY3JpcHQ+Cit0cnkg
eworICAgIGZ1bmN0aW9uIHRvRnV6ejIoKSB7CisgICAgICAgIGZvciAodmFyIGNvbmYgPSBuZXcg
Q29uZmlnT2JqZWN0KHsKKyAgICAgICAgfSkgaW4gc3RyMS5sb2NhbGVDb21wYXJlKSB7CisgICAg
ICAgIH0KKyAgICB9CisgICAgdG9GdXp6MigpOworfSBjYXRjaChlKSB7CisgICAgcHJpbnRTdGFj
ayhlLnN0YWNrKTsKK30KKzwvc2NyaXB0PgorCiA8IS0tIE5vdyBkbyBpdCBhbGwgb3ZlciB3aXRo
IGEgbG9hZGVkIHNjcmlwdCBmaWxlLiAtLT4KIDxzY3JpcHQ+dGVzdElkID0gMDs8L3NjcmlwdD4K
IAk8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2xpbmUtY29sdW1uLW51bWJlcnMuanMiPjwvc2Ny
aXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvbGluZS1jb2x1bW4t
bnVtYmVycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0
cy9saW5lLWNvbHVtbi1udW1iZXJzLmpzCShyZXZpc2lvbiAxNTI1ODMpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsNCArMTAxLDI5IEBAIGV2YWwoIlxuIiArCiAifVxuIiArCiAiIik7CiAKKy8v
IENhc2UgMTk6IFJlZ3Jlc3Npb24gdGVzdCBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTg2NjIKK3Rlc3RJZCsrOwordHJ5IHsKKyAgICBmdW5jdGlvbiB0b0Z1
enoxKCkgeworICAgICAgICBpZiAoUHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUuZG9Tb3J0KCkgaW5z
dGFuY2VvZiAodGhpcyBePSBmdW5jdGlvbigpIHsKKyAgICAgICAgfSkpIHJldHVybiAyOyAKKyAg
ICB9CisgICAgdG9GdXp6MSgpOworfSBjYXRjaChlKSB7CisgICAgcHJpbnRTdGFjayhlLnN0YWNr
KTsKK30KKworLy8gQ2FzZSAyMDogUmVncmVzc2lvbiB0ZXN0IGZyb20gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODY2NAordGVzdElkKys7Cit0cnkgeworICAgIGZ1
bmN0aW9uIHRvRnV6ejIoKSB7CisgICAgICAgIGZvciAodmFyIGNvbmYgPSBuZXcgQ29uZmlnT2Jq
ZWN0KHsKKyAgICAgICAgfSkgaW4gc3RyMS5sb2NhbGVDb21wYXJlKSB7CisgICAgICAgIH0KKyAg
ICB9CisgICAgdG9GdXp6MigpOworfSBjYXRjaChlKSB7CisgICAgcHJpbnRTdGFjayhlLnN0YWNr
KTsKK30KKwogc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207290</attachid>
            <date>2013-07-22 16:18:43 -0700</date>
            <delta_ts>2013-07-23 08:02:03 -0700</delta_ts>
            <desc>patch 3: removed an unused function in the new JSTextPosition.</desc>
            <filename>bug-118662b.patch</filename>
            <type>text/plain</type>
            <size>198123</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxMy0wNy0yMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Rml4IHByb2JsZW1zIHdpdGggZGl2b3QgYW5kIGxpbmVTdGFydCBtaXNtYXRjaGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjYyLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIxNTI0OTQgYWRkZWQg
dGhlIHJlY29yZGluZyBvZiBsaW5lU3RhcnQgdmFsdWVzIGZvciBkaXZvdCBwb3NpdGlvbnMuCisg
ICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgY29tcHV0YXRpb24gb2YgY29sdW1uIG51bWJl
cnMuIFNpbWlsYXJseSwgaXQgYWxzbworICAgICAgICBhZGRlZCB0aGUgcmVjb3JkaW5nIG9mIGxp
bmUgbnVtYmVycyBmb3IgdGhlIGRpdm90IHBvc2l0aW9ucy4gT25lIHByb2JsZW0KKyAgICAgICAg
d2l0aCB0aGUgYXBwcm9hY2ggdGFrZW4gd2FzIHRoYXQgdGhlIGxpbmUgYW5kIGxpbmVTdGFydCB2
YWx1ZXMgd2VyZQorICAgICAgICByZWNvcmRlZCBpbmRlcGVuZGVudGx5LCBhbmQgaGVuY2Ugd2Vy
ZSBub3QgYWx3YXlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICAgc2FtcGxlZCBhdCB0aGUgc2Ft
ZSBwbGFjZSB0aGF0IHRoZSBkaXZvdCBwb3NpdGlvbiBpcyByZWNvcmRlZC4gVGhpcworICAgICAg
ICByZXN1bHRlZCBpbiBwb3RlbnRpYWwgbWlzbWF0Y2hlcyB0aGF0IGNhdXNlIHNvbWUgYXNzZXJ0
aW9ucyB0byBmYWlsLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgYSBK
U1RleHRQb3NpdGlvbiBhYnN0cmFjdGlvbiB0aGF0IHJlY29yZHMKKyAgICAgICAgdGhlIGRpdm90
IHBvc2l0aW9uLCBsaW5lLCBhbmQgbGluZVN0YXJ0IGFzIGEgc2luZ2xlIHF1YW50aXR5LiBXaGVy
ZXZlcgorICAgICAgICB3ZSByZWNvcmQgdGhlIGRpdm90IHBvc2l0aW9uIGFzIGFuIHVuc2lnbmVk
IGludCBwcmV2aW91c2x5LCB3ZSBub3cgcmVjb3JkCisgICAgICAgIGl0cyBKU1RleHRQb3NpdGlv
biB3aGljaCBjYXB0dXJlcyBhbGwgMyB2YWx1ZXMgaW4gb25lIGdvLiBUaGlzIGVuc3VyZXMKKyAg
ICAgICAgdGhhdCB0aGUgY2FwdHVyZWQgbGluZSBhbmQgbGluZVN0YXJ0IHdpbGwgYWx3YXlzIG1h
dGNoIHRoZSBjYXB0dXJlZCBkaXZvdAorICAgICAgICBwb3NpdGlvbi4KKworICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxW
YXJhcmdzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayk6CisgICAg
ICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5l
U3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHByZXNzaW9uSW5m
byk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5l
IGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OmVtaXRU
aHJvd1JlZmVyZW5jZUVycm9yKToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6TmV3RXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkV2YWxGdW5j
dGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAg
ICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9z
dGZpeE5vZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpEZWxldGVSZXNvbHZlTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OlByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6UHJlZml4Tm9k
ZTo6ZW1pdEJyYWNrZXQpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0RG90KToKKyAg
ICAgICAgKEpTQzo6VW5hcnlPcE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkJp
bmFyeU9wTm9kZTo6ZW1pdFN0cmNhdCk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUJpbmFyeU9w
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZk5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OmVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudCk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFz
c2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlEb3RO
b2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OldpdGhOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpUaHJvd05vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2Yg
cGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIv
QVNUQnVpbGRlci5oOgorICAgICAgICAtIFJlcGxhY2VkIEFTVEJ1aWxkZXI6OlBvc2l0aW9uSW5m
byB3aXRoIEpTVGV4dFBvc2l0aW9uLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpCaW5hcnlP
cEluZm86OkJpbmFyeU9wSW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OkFzc2lnbm1l
bnRJbmZvOjpBc3NpZ25tZW50SW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZVJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCcmFja2V0QWNjZXNz
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG90QWNjZXNzKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVnRXhwKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y3JlYXRlTmV3RXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUFzc2ln
blJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFeHByU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZUxhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
V2l0aFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVRocm93U3Rh
dGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6YXBwZW5kQmluYXJ5RXhwcmVzc2lv
bkluZm8pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphcHBlbmRVbmFyeVRva2VuKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6dW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6YXNzaWdubWVudFN0YWNrQXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWdubWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OnNldEV4Y2VwdGlvbkxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFr
ZURlbGV0ZU5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxs
Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VCaW5hcnlOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlUHJlZml4Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VQ
b3N0Zml4Tm9kZSk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFz
c2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvTGV4
ZXIuY3BwOgorICAgICAgICAoSlNDOjo6OmxleCk6CisgICAgICAgIC0gQWRkZWQgc3VwcG9ydCBm
b3IgY2FwdHVyaW5nIHRoZSBhcHByb3ByaWF0ZSBKU1RleHRQb3NpdGlvbnMgaW5zdGVhZAorICAg
ICAgICAgIG9mIGp1c3QgdGhlIGNoYXJhY3RlciBvZmZzZXQuCisgICAgICAgICogcGFyc2VyL0xl
eGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50UG9zaXRpb24pOgorICAgICAgICAo
SlNDOjo6OmxleEV4cGVjdElkZW50aWZpZXIpOgorICAgICAgICAtIEFkZGVkIHN1cHBvcnQgZm9y
IGNhcHR1cmluZyB0aGUgYXBwcm9wcmlhdGUgSlNUZXh0UG9zaXRpb25zIGluc3RlYWQKKyAgICAg
ICAgICBvZiBqdXN0IHRoZSBjaGFyYWN0ZXIgb2Zmc2V0LgorICAgICAgICAqIHBhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlND
OjpSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpFdmFsRnVuY3Rpb25D
YWxsTm9kZTo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNh
bGxWYWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5vZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUpOgor
ICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6Q2FsbEZ1bmN0aW9uQ2FsbERv
dE5vZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OkFwcGx5RnVu
Y3Rpb25DYWxsRG90Tm9kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjpQb3N0Zml4Tm9k
ZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZSk6
CisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2RlOjpEZWxldGVCcmFja2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5vZGUpOgorICAgICAgICAoSlND
OjpQcmVmaXhOb2RlOjpQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeVJlc29s
dmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5
QnJhY2tldE5vZGU6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2ln
bkJyYWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRv
dE5vZGU6OkFzc2lnbkRvdE5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5RG90Tm9kZTo6
UmVhZE1vZGlmeURvdE5vZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25FcnJvck5vZGU6OkFzc2ln
bkVycm9yTm9kZSk6CisgICAgICAgIChKU0M6OldpdGhOb2RlOjpXaXRoTm9kZSk6CisgICAgICAg
IChKU0M6OkZvckluTm9kZTo6Rm9ySW5Ob2RlKToKKyAgICAgICAgLSBVc2UgSlNUZXh0UG9zaXRp
b24gaW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUgYW5kIGxpbmVTdGFydCBleHBsaWNpdGx5LgorICAg
ICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlN0YXRlbWVudE5vZGU6OnNl
dExvYyk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBs
aW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoK
KyAgICAgICAgKEpTQzo6Tm9kZTo6bGluZU5vKToKKyAgICAgICAgKEpTQzo6Tm9kZTo6c3RhcnRP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpOb2RlOjpsaW5lU3RhcnRPZmZzZXQpOgorICAgICAgICAo
SlNDOjpOb2RlOjpwb3NpdGlvbik6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4cHJlc3Npb25E
YXRhOjpUaHJvd2FibGVFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4
cHJlc3Npb25EYXRhOjpzZXRFeGNlcHRpb25Tb3VyY2VDb2RlKToKKyAgICAgICAgKEpTQzo6VGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGE6OmRpdm90KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhw
cmVzc2lvbkRhdGE6OmRpdm90U3RhcnQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVFeHByZXNz
aW9uRGF0YTo6ZGl2b3RFbmQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVTdWJFeHByZXNzaW9u
RGF0YTo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEpOgorICAgICAgICAoSlNDOjpUaHJvd2Fi
bGVTdWJFeHByZXNzaW9uRGF0YTo6c2V0U3ViZXhwcmVzc2lvbkluZm8pOgorICAgICAgICAoSlND
OjpUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVzc2lvbkRpdm90KToKKyAgICAg
ICAgKEpTQzo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGE6OnN1YmV4cHJlc3Npb25TdGFydCk6
CisgICAgICAgIChKU0M6OlRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhOjpzdWJleHByZXNzaW9u
RW5kKToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YTo6
VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChKU0M6OlRocm93
YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGE6OnNldFN1YmV4cHJlc3Npb25JbmZvKToKKyAg
ICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVz
c2lvbkRpdm90KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9u
RGF0YTo6c3ViZXhwcmVzc2lvblN0YXJ0KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4
ZWRTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVzc2lvbkVuZCk6CisgICAgICAgIC0gVXNlIEpT
VGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGlj
aXRseS4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQYXJz
ZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAtIFVzZSBKU1RleHRQ
b3NpdGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHku
CisgICAgICAgIChKU0M6Ojo6ZGlkRmluaXNoUGFyc2luZyk6CisgICAgICAgIC0gUmVtb3ZlIHNl
dHRpbmcgb2YgbV9sYXN0TGluZSB2YWx1ZS4gV2UgYWx3YXlzIHBhc3MgaW4gdGhlIHZhbHVlIGZy
b20KKyAgICAgICAgICBtX2xhc3RMaW5lIGFueXdheS4gU28sIHRoaXMgYXNzaWdubWVudCBpcyBl
ZmZlY3RpdmVseSBhIG5vcC4KKyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uKToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdCk6CisgICAgICAgIChKU0M6
Ojo6cGFyc2VGb3JTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQnJlYWtTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjo6OnBhcnNlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVRocm93
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVdpdGhTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJsb2Nr
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24pOgor
ICAgICAgICAoSlNDOjpMYWJlbEluZm86OkxhYmVsSW5mbyk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VFeHBy
ZXNzaW9uU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJpbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAo
SlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJpbWFyeUV4cHJl
c3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAg
IChKU0M6Ojo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAtIFVzZSBKU1RleHRQb3Np
dGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHQpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHRFeHBlY3RJZGVudGlmaWVyKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyOjpnZXRUb2tlbik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6dG9rZW5TdGFydFBv
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjp0b2tlbkVuZFBvc2l0aW9uKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjpsYXN0VG9rZW5FbmRQb3NpdGlvbik6CisgICAgICAgIChKU0M6Ojo6
cGFyc2UpOgorICAgICAgICAtIFVzZSBKU1RleHRQb3NpdGlvbiBpbnN0ZWFkIG9mIHBhc3Npbmcg
bGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisgICAgICAgICogcGFyc2VyL1BhcnNlclRv
a2Vucy5oOgorICAgICAgICAoSlNDOjpKU1RleHRQb3NpdGlvbjo6SlNUZXh0UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpKU1RleHRQb3NpdGlvbjo6b3BlcmF0b3IrKToKKyAgICAgICAgKEpTQzo6
SlNUZXh0UG9zaXRpb246Om9wZXJhdG9yLSk6CisgICAgICAgIChKU0M6OkpTVGV4dFBvc2l0aW9u
OjpvcGVyYXRvciBpbnQpOgorICAgICAgICAtIEFkZGVkIEpTVGV4dFBvc2l0aW9uLgorICAgICAg
ICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFr
ZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjptYWtlUHJlZml4Tm9k
ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VQb3N0Zml4Tm9kZSk6CisgICAg
ICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6
U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNr
ZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpj
cmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVSZWdF
eHApOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVOZXdFeHByKToKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQXNzaWduUmVzb2x2ZSk6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZvckluTG9vcCk6CisgICAgICAgIChKU0M6OlN5bnRh
eENoZWNrZXI6OmNyZWF0ZVJldHVyblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6OmNyZWF0ZUJyZWFrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tl
cjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpjcmVhdGVXaXRoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3Jl
YXRlTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVU
aHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmFwcGVuZEJpbmFy
eUV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6b3BlcmF0b3JT
dGFja1BvcCk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2lu
ZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKwogMjAxMy0wNy0xMSAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEF0dGVtcHQgdG8gZml4IHRoZSB3aW5k
b3dzIGJ1aWxkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1MjU4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAxLDkgKzE3MDEsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE5ld0Z1CiAgICAgcmV0dXJuIHIwOwogfQogCi1SZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5j
LCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNhbGxB
cmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMm
IGNhbGxBcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKIHsK
LSAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgbGlu
ZVN0YXJ0KTsKKyAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0LCBmdW5jLCBleHBlY3Rl
ZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwog
fQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgp
CkBAIC0xNzM0LDkgKzE3MzQsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBY3Rp
dmF0aW9uCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5p
bmRleCgpKTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsRXZh
bChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVudHMmIGNhbGxB
cmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxFdmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKQogewotICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsX2V2
YWwsIGRzdCwgZnVuYywgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgbGluZVN0YXJ0KTsKKyAgICByZXR1cm4gZW1p
dENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1bmMsIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIH0KIAogRXhwZWN0ZWRGdW5j
dGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZXhwZWN0ZWRGdW5jdGlvbkZvcklkZW50aWZpZXIoY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKQEAgLTE4MTQsNyArMTgxNCw3IEBAIEV4cGVjdGVk
RnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXQKICAgICByZXR1cm4gZXhwZWN0ZWRGdW5j
dGlvbjsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY29k
ZUlEIG9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVk
RnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxB
cmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCkKIHsKICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF9jYWxsX2V2YWwpOwogICAgIEFTU0VSVChmdW5jLT5yZWZDb3VudCgpKTsKQEAgLTE4MzcsNyAr
MTgzNyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMucHJvZmlsZUhvb2tSZWdpc3Rl
cigpLT5pbmRleCgpKTsKICAgICB9CiAKLSAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAKICAgICBSZWZQdHI8TGFiZWw+
IGRvbmUgPSBuZXdMYWJlbCgpOwogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBlbWl0RXhwZWN0ZWRG
dW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRz
LCBkb25lLmdldCgpKTsKQEAgLTE4NzEsNyArMTg3MSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVu
dHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9maWxlSG9v
a1JlZ2lzdGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KQorUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJn
dW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvZmls
ZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogewog
ICAgIGlmIChtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKICAgICAgICAgZW1pdE1vdmUocHJv
ZmlsZUhvb2tSZWdpc3RlciwgZnVuYyk7CkBAIC0xODc5LDcgKzE4NzksNyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChwcm9maWxlSG9va1JlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAgZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBsaW5l
U3RhcnQpOworICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RF
bmQpOwogCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIGVtaXRPcGNvZGUob3BfY2FsbF92YXJhcmdz
KTsKQEAgLTE5MzEsNyArMTkzMSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0VW5hcnkKICAgICByZXR1cm4gc3JjOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4
cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3Vt
ZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRz
JiBjYWxsQXJndW1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiB7
CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNvdW50KCkpOwogCkBAIC0xOTU1LDcgKzE5NTUsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyArK2kpCiAgICAgICAgIGNhbGxG
cmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwogCi0gICAgZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBsaW5lU3RhcnQpOworICAgIGVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIAogICAgIFJl
ZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CiAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IGVt
aXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOwpAQCAtMjAzNCw3ICsyMDM0LDggQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayhEZQogICAgIGlmICghbV9zaG91bGRFbWl0RGVi
dWdIb29rcykKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCi0gICAgZW1pdEV4cHJlc3Npb25JbmZv
KGNoYXJPZmZzZXQsIDAsIDAsIGZpcnN0TGluZSwgbGluZVN0YXJ0KTsKKyAgICBKU1RleHRQb3Np
dGlvbiBkaXZvdChmaXJzdExpbmUsIGNoYXJPZmZzZXQsIGxpbmVTdGFydCk7CisgICAgZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90LCBkaXZvdCwgZGl2b3QpOwogICAgIHVuc2lnbmVkIGNoYXJQb3Np
dGlvbiA9IGNoYXJPZmZzZXQgLSBtX3Njb3BlTm9kZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsK
ICAgICBlbWl0T3Bjb2RlKG9wX2RlYnVnKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZGVi
dWdIb29rSUQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzUsMjcgKzM3NSwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IG4tPmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dCgqdGhpcywgdHJ1ZVRhcmdldCwgZmFs
c2VUYXJnZXQsIGZhbGxUaHJvdWdoTW9kZSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGVt
aXRFeHByZXNzaW9uSW5mbyhpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNl
dCwgdW5zaWduZWQgbGluZSwgaW50IGxpbmVTdGFydCkKLSAgICAgICAgeworICAgICAgICB2b2lk
IGVtaXRFeHByZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQp
CisgICAgICAgIHsgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQg
Pj0gZGl2b3RTdGFydC5vZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKGRpdm90RW5kLm9mZnNl
dCA+PSBkaXZvdC5vZmZzZXQpOworCiAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0ID0gbV9z
Y29wZU5vZGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBm
aXJzdExpbmUgPSBtX3Njb3BlTm9kZS0+c291cmNlKCkuZmlyc3RMaW5lKCk7CiAKLSAgICAgICAg
ICAgIEFTU0VSVChkaXZvdCA+PSBsaW5lU3RhcnQpOwotICAgICAgICAgICAgQVNTRVJUKGRpdm90
ID49IHNvdXJjZU9mZnNldCk7Ci0gICAgICAgICAgICBkaXZvdCAtPSBzb3VyY2VPZmZzZXQ7Cisg
ICAgICAgICAgICBpbnQgZGl2b3RPZmZzZXQgPSBkaXZvdC5vZmZzZXQgLSBzb3VyY2VPZmZzZXQ7
CisgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBkaXZvdC5vZmZzZXQgLSBkaXZvdFN0YXJ0
Lm9mZnNldDsKKyAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSBkaXZvdEVuZC5vZmZzZXQgLSBk
aXZvdC5vZmZzZXQ7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxpbmUgPSBkaXZvdC5saW5lOwor
ICAgICAgICAgICAgQVNTRVJUKGxpbmUgPj0gZmlyc3RMaW5lKTsKKyAgICAgICAgICAgIGxpbmUg
LT0gZmlyc3RMaW5lOwogCisgICAgICAgICAgICBpbnQgbGluZVN0YXJ0ID0gZGl2b3QubGluZVN0
YXJ0T2Zmc2V0OwogICAgICAgICAgICAgaWYgKGxpbmVTdGFydCA+IHNvdXJjZU9mZnNldCkKICAg
ICAgICAgICAgICAgICBsaW5lU3RhcnQgLT0gc291cmNlT2Zmc2V0OwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IDA7Ci0KLSAgICAgICAgICAgIEFTU0VSVChs
aW5lID49IGZpcnN0TGluZSk7Ci0gICAgICAgICAgICBsaW5lIC09IGZpcnN0TGluZTsKKyAgICAg
ICAgICAgIEFTU0VSVChkaXZvdE9mZnNldCA+PSBsaW5lU3RhcnQpOworICAgICAgICAgICAgdW5z
aWduZWQgY29sdW1uID0gZGl2b3RPZmZzZXQgLSBsaW5lU3RhcnQ7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgICAg
ICAgICAgQVNTRVJUKGRpdm90ID49IGxpbmVTdGFydCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
b2x1bW4gPSBkaXZvdCAtIGxpbmVTdGFydDsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRF
eHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkRXhwcmVz
c2lvbkluZm8oaW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAgICAgICB9CiAKICAgICAgICAgQUxXQVlTX0lOTElO
RSBib29sIGxlZnRIYW5kU2lkZU5lZWRzQ29weShib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGJv
b2wgcmlnaHRJc1B1cmUpCkBAIC00NzEsMTUgKzQ3NiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0UHV0R2V0dGVyU2V0dGVyKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiBnZXR0ZXIsIFJlZ2lzdGVySUQqIHNldHRl
cik7CiAgICAgICAgIAogICAgICAgICBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb25G
b3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9u
LCBDYWxsQXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGZ1bmMsIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0
YXJ0KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklE
KiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBw
cm9maWxlSG9va1JlZ2lzdGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxFdmFs
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVy
SUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJz
dEZyZWVSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExv
YWRWYXJhcmdzKFJlZ2lzdGVySUQqIGFyZ0NvdW50RHN0LCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0
ZXIsIFJlZ2lzdGVySUQqIGFyZ3MpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXR1cm4o
UmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdpc3RlcklE
KiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU5vRHN0T3Aob3BfZW5kLCBzcmMpOyB9CiAKLSAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwg
dW5zaWduZWQgbGluZVN0YXJ0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENvbnN0cnVjdChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxB
cmd1bWVudHMmLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0U3RyY2F0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
LCBpbnQgY291bnQpOwogICAgICAgICB2b2lkIGVtaXRUb1ByaW1pdGl2ZShSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAKQEAgLTU4Myw3ICs1ODgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gKGkuZS4gIk9iamVjdCgpIiBpcyBpZGVudGljYWwgdG8gIm5ldyBPYmpl
Y3QoKSIpLgogICAgICAgICBFeHBlY3RlZEZ1bmN0aW9uIGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25p
cHBldChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24s
IENhbGxBcmd1bWVudHMmLCBMYWJlbCogZG9uZSk7CiAgICAgICAgIAotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5j
LCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGxpbmVTdGFydCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsKE9wY29kZUlELCBS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxB
cmd1bWVudHMmLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAg
ICAgIFJlZ2lzdGVySUQqIG5ld1JlZ2lzdGVyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE1
MjU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIEV4cHJlc3Npb25Ob2Rl
OjplbWl0Qnl0ZWNvZGVJbkNvbmRpCiAKIFJlZ2lzdGVySUQqIFRocm93YWJsZUV4cHJlc3Npb25E
YXRhOjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90
TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRUaHJvd1JlZmVyZW5jZUVycm9yKG1lc3NhZ2UpOwogICAgIHJldHVybiBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CiB9CkBAIC0xNTMsOCArMTUzLDggQEAgUmVnaXN0ZXJJRCogUmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZShCeQogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbCk7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGRp
dm90ID0gbV9zdGFydE9mZnNldCArIG1faWRlbnQubGVuZ3RoKCk7Ci0gICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgbV9pZGVudC5sZW5ndGgoKSwgMCwgbV9kaXZvdExpbmUs
IG1fZGl2b3RMaW5lU3RhcnQpOworICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90ID0gbV9zdGFydCAr
IG1faWRlbnQubGVuZ3RoKCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCwgbV9zdGFydCwgZGl2b3QpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFJlc29sdmUoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CiB9
CiAKQEAgLTMyNiwxMyArMzI2LDEzIEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6
OmVtaXRCeXQKICAgICAgICAgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMoc3Rh
dGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpCiAgICAgICAgICYm
ICFnZW5lcmF0b3Iuc3ltYm9sVGFibGUoKS5zbG93QXJndW1lbnRzKCkpIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50
QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZ2VuZXJhdG9yLnVuY2hlY2tl
ZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCksIHByb3BlcnR5KTsKICAgICB9CiAKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jh
c2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJh
dG9yKSk7CiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9z
dWJzY3JpcHQpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsK
IH0KIApAQCAtMzQ2LDEzICszNDYsMTMgQEAgUmVnaXN0ZXJJRCogRG90QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZAogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZU5vZGUgPSBzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KG1fYmFzZSk7CiAgICAgICAgIGlmICghZ2VuZXJhdG9yLndpbGxSZXNv
bHZlVG9Bcmd1bWVudHMocmVzb2x2ZU5vZGUtPmlkZW50aWZpZXIoKSkpCiAgICAgICAgICAgICBn
b3RvIG5vbkFyZ3VtZW50c1BhdGg7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExp
bmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpKTsKICAg
ICB9CiAKIG5vbkFyZ3VtZW50c1BhdGg6CiAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2Jhc2UpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwg
ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9pZGVudCk7
CiB9CiAKQEAgLTM3NSw3ICszNzUsNyBAQCBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5CiAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBOb0V4cGVjdGVkRnVuY3Rpb247
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
KTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbk9ySWdub3JlZChkc3QpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRD
b25zdHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0KSwgZnVuYy5n
ZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogaW5saW5lIENhbGxBcmd1bWVudHM6OkNhbGxBcmd1bWVu
dHMoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRz
Tm9kZSkKQEAgLTQxMCw5ICs0MTAsMTAgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5v
ZGU6OmVtaXRCeQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
IC0gZGl2b3RTdGFydE9mZnNldCgpICsgNCwgNCwgMCwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFydCgpICsgNDsK
KyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCks
IG5ld0Rpdm90KTsKICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBmdW5jLmdldCgpLCBnZW5lcmF0b3IucmVzb2x2ZShnZW5lcmF0
b3IucHJvcGVydHlOYW1lcygpLmV2YWwpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRp
dm90TGluZVN0YXJ0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDIyLDcgKzQyMyw3IEBAIFJlZ2lzdGVy
SUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0
LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90
TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1
bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KQEAgLTQzOCw3ICs0MzksNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZTo6ZW1pCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgLy8gVGhpcyBwYXNzZXMgTm9F
eHBlY3RlZEZ1bmN0aW9uIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlz
IGluIGEKICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qgb25lIG9mIG91
ciBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCkpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQog
CiAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNTdGF0aWMoKSkgewpAQCAtNDQ2LDE2ICs0NDcsMTYg
QEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEdldFN0YXRpY1ZhcihmdW5jLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMu
Z2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3Rh
cnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0
KCkpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGV4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwg
bV9hcmdzKTsKLSAgICBpbnQgaWRlbnRpZmllclN0YXJ0ID0gZGl2b3QoKSAtIGRpdm90U3RhcnRP
ZmZzZXQoKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oaWRlbnRpZmllclN0
YXJ0ICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCwgZGl2b3RMaW5lKCks
IGRpdm90TGluZVN0YXJ0KCkpOworICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RT
dGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKICAgICBnZW5lcmF0b3IuZW1p
dFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBmdW5jLmdldCgp
LCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1
bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90
U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRG
dW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbEJy
YWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2NCwxMSAr
NDY1LDExIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKIHsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0
KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgp
LCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpLCBz
dWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Np
b25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
dW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJn
dW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0
aW9uLmdldCgpKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZv
dExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgp
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbERvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtNDc4LDkgKzQ3OSw5IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwg
c3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNz
aW9uTGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhw
cmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkp
OwogICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgp
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwg
ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgpKSwgZnVuY3Rp
b24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCkBAIC00ODgsNyArNDg5LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaQogICAgIFJlZlB0cjxMYWJlbD4gcmVhbENhbGwgPSBnZW5lcmF0b3Iu
bmV3TGFiZWwoKTsKICAgICBSZWZQdHI8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFz
ZSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3Qo
KSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQoKSwg
c3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNz
aW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmlu
YWxEZXN0aW5hdGlvbk9ySWdub3JlZCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90RnVu
Y3Rpb25DYWxsKGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7CkBAIC01MDAsNyArNTAx
LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShn
ZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAg
Q2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRM
aXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGlu
YXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5k
T2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cChlbmQuZ2V0KCkpOwogCiAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRMaXN0
OwpAQCAtNTA4LDcgKzUwOSw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbWkKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5l
cmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgp
KTsKICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1f
YXJncyk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENh
bGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQu
Z2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MTYsNyAr
NTE3LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgIHsK
ICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGJhc2UuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlv
bk9ySWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgp
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIH0KICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAg
ICAgcmV0dXJuIGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCk7CkBAIC01MzgsNyArNTM5
LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgIFJlZlB0
cjxMYWJlbD4gcmVhbENhbGwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBSZWZQdHI8TGFi
ZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBi
YXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0
KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhw
cmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1
YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVu
ZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBtX2lkZW50
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZCA9IGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90RnVuY3Rpb25BcHBseShmdW5jdGlvbi5nZXQoKSwg
cmVhbENhbGwuZ2V0KCkpOwpAQCAtNTUzLDIwICs1NTQsMjAgQEAgUmVnaXN0ZXJJRCogQXBwbHlG
dW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1
bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRM
aXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmlu
YWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwg
ZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3Jl
ZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1
bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0gbV9h
cmdzLT5tX2xpc3ROb2RlLT5tX25leHQ7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEFy
Z3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9s
ZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChm
aW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhw
ZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgp
LCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0gb2xkTGlzdDsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
YWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFy
Z3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVk
LmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZv
dExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgQVNTRVJUKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1f
bmV4dCk7CkBAIC01ODcsNyArNTg4LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxE
b3ROb2RlOjplbQogICAgICAgICAgICAgd2hpbGUgKChhcmdzID0gYXJncy0+bV9uZXh0KSkKICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYXJncy0+bV9leHByKTsKIAotICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJncyhmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVk
LmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJnc1JlZ2lz
dGVyLmdldCgpLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb2ZpbGVIb29rUmVnaXN0ZXIu
Z2V0KCksIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2
b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRD
YWxsVmFyYXJncyhmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24u
Z2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJnc1JlZ2lzdGVyLmdldCgpLCBnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHByb2ZpbGVIb29rUmVnaXN0ZXIuZ2V0KCksIGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7CiAgICAgfQpAQCAtNTk1LDcgKzU5Niw3IEBAIFJlZ2lzdGVySUQqIEFw
cGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICB7CiAgICAgICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0
TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0
aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRp
dm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGlu
ZVN0YXJ0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIHJldHVybiBmaW5hbERlc3RpbmF0
aW9uT3JJZ25vcmVkLmdldCgpOwpAQCAtNjQzLDcgKzY0NCw3IEBAIFJlZ2lzdGVySUQqIFBvc3Rm
aXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmdldCgpOwog
ICAgIH0KIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3Rh
cnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICBOb25sb2NhbFJlc29sdmVJbmZvIHJlc29sdmVJbmZv
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0
aEJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgcmVzb2x2
ZVJlc3VsdCwgaWRlbnQsIHJlc29sdmVJbmZvKTsKQEAgLTY2NSwxMCArNjY2LDEwIEBAIFJlZ2lz
dGVySUQqIFBvc3RmaXhOb2RlOjplbWl0QnJhY2tldChCeXQKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShiYXNlTm9kZSwgYnJh
Y2tldEFjY2Vzc29yLT5zdWJzY3JpcHRIYXNBc3NpZ25tZW50cygpLCBzdWJzY3JpcHQtPmlzUHVy
ZShnZW5lcmF0b3IpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0
b3IuZW1pdE5vZGUoc3Vic2NyaXB0KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oYnJhY2tldEFjY2Vzc29yLT5kaXZvdCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90U3RhcnRP
ZmZzZXQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdEVuZE9mZnNldCgpLCBicmFja2V0QWNjZXNz
b3ItPmRpdm90TGluZSgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90TGluZVN0YXJ0KCkpOworICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYnJhY2tldEFjY2Vzc29yLT5kaXZvdCgpLCBi
cmFja2V0QWNjZXNzb3ItPmRpdm90U3RhcnQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdEVuZCgp
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwog
ICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOwot
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNl
dCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVy
dHkuZ2V0KCksIHZhbHVlLmdldCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1ZSk7CiB9CkBAIC02ODUsMTAgKzY4NiwxMCBAQCBS
ZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdERvdChCeXRlY29kCiAKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlTm9kZSk7CiAKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBkb3RBY2Nlc3Nv
ci0+ZGl2b3RTdGFydE9mZnNldCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RFbmRPZmZzZXQoKSwgZG90
QWNjZXNzb3ItPmRpdm90TGluZSgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkb3RBY2Nlc3Nvci0+ZGl2b3QoKSwgZG90
QWNjZXNzb3ItPmRpdm90U3RhcnQoKSwgZG90QWNjZXNzb3ItPmRpdm90RW5kKCkpOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGlkZW50KTsKICAgICBSZWdpc3RlcklEKiBvbGRW
YWx1ZSA9IGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCksIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQo
KSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpKTsKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1ZSk7
CiB9CkBAIC03MTcsNyArNzE4LDcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlUmVzb2x2ZU5vZGU6OmVt
aXRCeXRlYwogICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzUmVnaXN0ZXIoKSkKICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBm
YWxzZSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90
U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlQmFzZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1
bHQsIG1faWRlbnQpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlKSwgYmFzZSwgbV9pZGVudCk7CiB9CkBAIC03
MjksNyArNzMwLDcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlYwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgIFJlZ2lzdGVySUQqIHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKIAot
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNl
dCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMSk7CiB9CiAKQEAgLTczOSw3ICs3
NDAsNyBAQCBSZWdpc3RlcklEKiBEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoCiB7CiAgICAg
UmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKIAotICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZv
dEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgcjAsIG1faWRlbnQpOwogfQogCkBAIC04MjUsNyArODI2LDcgQEAgUmVn
aXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdFJlc29sdmUoQnl0ZQogICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKICAg
ICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3Rh
cnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBOb25sb2NhbFJlc29sdmVJbmZvIHJlc29s
dmVWZXJpZmllcjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZVdpdGhCYXNlRm9yUHV0KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcERzdC5n
ZXQoKSwgcmVzb2x2ZVJlc3VsdCwgaWRlbnQsIHJlc29sdmVWZXJpZmllcik7CkBAIC04NDUsMTAg
Kzg0NiwxMCBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0QnJhY2tldChCeXRlCiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKHN1YnNjcmlw
dCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGJyYWNrZXRB
Y2Nlc3Nvci0+ZGl2b3QoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGJy
YWNrZXRBY2Nlc3Nvci0+ZGl2b3RFbmRPZmZzZXQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdExp
bmUoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3QoKSwgYnJhY2tldEFjY2Vz
c29yLT5kaXZvdFN0YXJ0KCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKHByb3BEc3QuZ2V0KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB2
YWx1ZSwgbV9vcGVyYXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBk
aXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZh
bChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUpOwogICAgIHJldHVybiBnZW5lcmF0
b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQpAQCAt
ODYzLDEwICs4NjQsMTAgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdERvdChCeXRlY29k
ZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2VO
b2RlKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZG90QWNj
ZXNzb3ItPmRpdm90KCksIGRvdEFjY2Vzc29yLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGRvdEFjY2Vz
c29yLT5kaXZvdEVuZE9mZnNldCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RMaW5lKCksIGRvdEFjY2Vz
c29yLT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RTdGFydCgpLCBkb3RBY2Nl
c3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQocHJvcERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgaWRlbnQpOwogICAgIGVtaXRJbmNP
ckRlYyhnZW5lcmF0b3IsIHZhbHVlLCBtX29wZXJhdG9yKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQo
KSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVlKTsKICAgICByZXR1cm4g
Z2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsK
IH0KQEAgLTg5Miw3ICs4OTMsNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0CiBSZWdpc3RlcklEKiBVbmFyeU9wTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWdpc3RlcklEKiBz
cmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKHN0YXJ0T2Zmc2V0KCksIDAsIDAsIGxpbmVObygpLCBsaW5lU3RhcnRPZmZzZXQo
KSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhwb3NpdGlvbigpLCBwb3NpdGlv
bigpLCBwb3NpdGlvbigpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wY29k
ZUlEKCksIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHNyYyk7CiB9CiAKQEAgLTEw
MjQsOCArMTAyNSw3IEBAIFJlZ2lzdGVySUQqIEJpbmFyeU9wTm9kZTo6ZW1pdFN0cmNhdChCeXQK
ICAgICAvLyBDZXJ0YWluIHJlYWQtbW9kaWZ5IG5vZGVzIHJlcXVpcmUgZXhwcmVzc2lvbiBpbmZv
IHRvIGJlIGVtaXR0ZWQgKmFmdGVyKiBtX3JpZ2h0IGhhcyBiZWVuIGdlbmVyYXRlZC4KICAgICAv
LyBJZiB0aGlzIGlzIHJlcXVpcmVkIHRoZSBub2RlIGlzIHBhc3NlZCBhcyAnZW1pdEV4cHJlc3Np
b25JbmZvRm9yTWUnOyBkbyBzbyBub3cuCiAgICAgaWYgKGVtaXRFeHByZXNzaW9uSW5mb0Zvck1l
KQotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGVtaXRFeHByZXNzaW9uSW5m
b0Zvck1lLT5kaXZvdCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RTdGFydE9mZnNl
dCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RFbmRPZmZzZXQoKSwgZW1pdEV4cHJl
c3Npb25JbmZvRm9yTWUtPmRpdm90TGluZSgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2
b3RMaW5lU3RhcnQoKSk7Ci0KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhl
bWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3QoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUt
PmRpdm90U3RhcnQoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90RW5kKCkpOwogICAg
IC8vIElmIHRoZXJlIGlzIGFuIGFzc2lnbm1lbnQgY29udmVydCB0aGUgbGhzIG5vdy4gIFRoaXMg
d2lsbCBhbHNvIGNvcHkgbGhzIHRvCiAgICAgLy8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB3ZSBh
bGxvY2F0ZWQgZm9yIGl0LgogICAgIGlmIChsaHMpCkBAIC0xMTY0LDcgKzExNjQsNyBAQCBSZWdp
c3RlcklEKiBUaHJvd2FibGVCaW5hcnlPcE5vZGU6OmVtaXRCCiB7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9leHByMSwg
bV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAg
UmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyKTsKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChvcGNvZGVJRCgpLCBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyLCBP
cGVyYW5kVHlwZXMobV9leHByMS0+cmVzdWx0RGVzY3JpcHRvcigpLCBtX2V4cHIyLT5yZXN1bHRE
ZXNjcmlwdG9yKCkpKTsKIH0KIApAQCAtMTE3NiwxMyArMTE3NiwxMyBAQCBSZWdpc3RlcklEKiBJ
bnN0YW5jZU9mTm9kZTo6ZW1pdEJ5dGVjb2RlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRzdFJl
ZyA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSk7CiAgICAgUmVm
UHRyPExhYmVsPiB0YXJnZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVu
ZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0Q2hlY2tIYXNJbnN0YW5jZShkc3RSZWcuZ2V0KCksIHNyYzEuZ2V0
KCksIHNyYzIuZ2V0KCksIHRhcmdldC5nZXQoKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwg
ZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQocHJvdG90eXBlLmdldCgpLCBzcmMyLmdldCgpLCBnZW5lcmF0b3Iudm0o
KS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBk
aXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lzdGVy
SUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SW5zdGFuY2VPZihkc3RSZWcuZ2V0KCksIHNyYzEu
Z2V0KCksIHByb3RvdHlwZS5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0YXJnZXQu
Z2V0KCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMjkzLDggKzEyOTMsNyBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBSZWdpc3RlcklEKiBlbWl0UmVhCiAgICAgLy8gQ2VydGFpbiByZWFkLW1v
ZGlmeSBub2RlcyByZXF1aXJlIGV4cHJlc3Npb24gaW5mbyB0byBiZSBlbWl0dGVkICphZnRlciog
bV9yaWdodCBoYXMgYmVlbiBnZW5lcmF0ZWQuCiAgICAgLy8gSWYgdGhpcyBpcyByZXF1aXJlZCB0
aGUgbm9kZSBpcyBwYXNzZWQgYXMgJ2VtaXRFeHByZXNzaW9uSW5mb0Zvck1lJzsgZG8gc28gbm93
LgogICAgIGlmIChlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZSkKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3QoKSwgZW1pdEV4
cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90U3RhcnRPZmZzZXQoKSwgZW1pdEV4cHJlc3Npb25JbmZv
Rm9yTWUtPmRpdm90RW5kT2Zmc2V0KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdExp
bmUoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90TGluZVN0YXJ0KCkpOwotCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUt
PmRpdm90KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdFN0YXJ0KCksIGVtaXRFeHBy
ZXNzaW9uSW5mb0Zvck1lLT5kaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRC
aW5hcnlPcChvcGNvZGVJRCwgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CiB9CiAKQEAgLTEzMjgs
NyArMTMyNyw4IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKICAg
ICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBk
aXZvdFN0YXJ0T2Zmc2V0KCkgKyBtX2lkZW50Lmxlbmd0aCgpLCBtX2lkZW50Lmxlbmd0aCgpLCAw
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgSlNUZXh0UG9zaXRpb24gbmV3
RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50Lmxlbmd0aCgpOworICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwogICAg
IE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBzcmMxLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50LCByZXNv
bHZlVmVyaWZpZXIpOwogICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNz
aWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5n
ZXQoKSksIHNyYzEuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1
bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0aGlz
KTsKQEAgLTEzNjMsNyArMTM2Myw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjpl
bWl0Qnl0ZWMKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAg
ICAgIGRzdCA9IDA7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
ZHN0LCBtX3JpZ2h0KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCks
IGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90
TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRU
b0Jhc2UoYmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUsIHJlc29sdmVWZXJpZmllcik7CiB9CiAK
QEAgLTEzNzQsNyArMTM3NCw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkRvdE5vZGU6OmVtaXRCeXRl
Y29kZSgKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZv
ckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQ
dXJlKGdlbmVyYXRvcikpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRv
ci5kZXN0aW5hdGlvbkZvckFzc2lnblJlc3VsdChkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJlc3Vs
dCA9IGdlbmVyYXRvci5lbWl0Tm9kZSh2YWx1ZS5nZXQoKSwgbV9yaWdodCk7Ci0gICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90
RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9y
ZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIGZvcndhcmRSZXN1bHQpOwogICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZvcndhcmRS
ZXN1bHQpOwpAQCAtMTM4NiwxMSArMTM4NiwxMSBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5RG90
Tm9kZTo6ZW1pdEJ5dGVjCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMs
IG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgp
LCBzdWJleHByZXNzaW9uRW5kT2Zmc2V0KCksIHN1YmV4cHJlc3Npb25MaW5lKCksIHN1YmV4cHJl
c3Npb25MaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJl
eHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQo
KSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CiAg
ICAgUmVnaXN0ZXJJRCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdl
bmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZh
bHVlLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6
dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQs
IHVwZGF0ZWRWYWx1ZSk7CiB9CiAKQEAgLTE0MTAsNyArMTQxMCw3IEBAIFJlZ2lzdGVySUQqIEFz
c2lnbkJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUg
PSBnZW5lcmF0b3IuZGVzdGluYXRpb25Gb3JBc3NpZ25SZXN1bHQoZHN0KTsKICAgICBSZWdpc3Rl
cklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUodmFsdWUuZ2V0KCksIG1fcmlnaHQpOwog
Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zm
c2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2Vu
ZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGlu
YXRpb25JZk5lZWRlZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwg
Zm9yd2FyZFJlc3VsdCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgZm9yd2FyZFJlc3VsdCk7CkBAIC0xNDIzLDExICsxNDIzLDExIEBAIFJlZ2lz
dGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vi
c2NyaXB0SGFzQXNzaWdubWVudHMgfHwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlw
dC0+aXNQdXJlKGdlbmVyYXRvcikgJiYgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRI
YW5kU2lkZShtX3N1YnNjcmlwdCwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5pc1B1
cmUoZ2VuZXJhdG9yKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4
cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVzc2lv
bkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0YXJ0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90
KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRv
ciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdl
dCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93
blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAKLSAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRP
ZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB1cGRh
dGVkVmFsdWUpOwogCiAgICAgcmV0dXJuIHVwZGF0ZWRWYWx1ZTsKQEAgLTE3MzksNyArMTczOSw3
IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICAgICAgICAg
IE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAgICAgICAgICAgUmVnaXN0
ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCwgcmVzb2x2ZVZlcmlmaWVyKTsKIAot
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFy
dCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0
VG9CYXNlKGJhc2UsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIHJlc29sdmVWZXJpZmllcik7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleHBlY3RlZFN1YnNjcmlwdCA9IGdlbmVyYXRvci5l
bWl0TW92ZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzUz
LDcgKzE3NTMsNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwogICAgICAg
ICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2Uo
KSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5k
aXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGFzc2lnbk5vZGUtPmRpdm90
RW5kT2Zmc2V0KCksIGFzc2lnbk5vZGUtPmRpdm90TGluZSgpLCBhc3NpZ25Ob2RlLT5kaXZvdExp
bmVTdGFydCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25O
b2RlLT5kaXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90
RW5kKCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHByb3Bl
cnR5TmFtZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fbGV4cHItPmlzQnJhY2tl
dEFjY2Vzc29yTm9kZSgpKTsKQEAgLTE3NjMsNyArMTc2Myw3IEBAIHZvaWQgRm9ySW5Ob2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+YmFzZSgpKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogc3Vic2NyaXB0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPnN1YnNjcmlw
dCgpKTsKICAgICAgICAgCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYXNz
aWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydE9mZnNldCgpLCBhc3NpZ25O
b2RlLT5kaXZvdEVuZE9mZnNldCgpLCBhc3NpZ25Ob2RlLT5kaXZvdExpbmUoKSwgYXNzaWduTm9k
ZS0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgpLCBhc3NpZ25O
b2RlLT5kaXZvdEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdl
dCgpLCBzdWJzY3JpcHQsIHByb3BlcnR5TmFtZSk7CiAgICAgfSAgIAogCkBAIC0xODU5LDcgKzE4
NTksNyBAQCB2b2lkIFdpdGhOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lCiAgICAgZ2Vu
ZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fZXhwcmVzc2lvbkxlbmd0aCwg
MCwgbV9kaXZvdExpbmUsIG1fZGl2b3RMaW5lU3RhcnQpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8obV9kaXZvdCwgbV9kaXZvdCAtIG1fZXhwcmVzc2lvbkxlbmd0aCwgbV9kaXZv
dCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXNoV2l0aFNjb3BlKHNjb3BlLmdldCgpKTsKICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQ
b3BTY29wZSgpOwpAQCAtMjA2Myw3ICsyMDYzLDcgQEAgdm9pZCBUaHJvd05vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbgogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQo
KSkKICAgICAgICAgZHN0ID0gMDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhwciA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUo
KSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0VGhy
b3coZXhwci5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCShyZXZpc2lvbiAxNTI1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjAgKzMzLDEyIEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQVNUQnVpbGRlciB7Ci0gICAgc3RydWN0IFBvc2l0aW9u
SW5mbyB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zOwotICAgICAgICB1bnNpZ25lZCBsaW5l
OwotICAgICAgICB1bnNpZ25lZCBsaW5lU3RhcnRQb3M7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBC
aW5hcnlPcEluZm8gewogICAgICAgICBCaW5hcnlPcEluZm8oKSB7fQotICAgICAgICBCaW5hcnlP
cEluZm8oaW50IG90aGVyU3RhcnQsIGludCBvdGhlckRpdm90LCBpbnQgb3RoZXJFbmQsIHVuc2ln
bmVkIG90aGVyRGl2b3RMaW5lLCB1bnNpZ25lZCBvdGhlckRpdm90TGluZVN0YXJ0LCBib29sIHJo
c0hhc0Fzc2lnbm1lbnQpCisgICAgICAgIEJpbmFyeU9wSW5mbyhjb25zdCBKU1RleHRQb3NpdGlv
biYgb3RoZXJTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIG90aGVyRGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBvdGhlckVuZCwgYm9vbCByaHNIYXNBc3NpZ25tZW50KQogICAgICAgICAg
ICAgOiBzdGFydChvdGhlclN0YXJ0KQogICAgICAgICAgICAgLCBkaXZvdChvdGhlckRpdm90KQog
ICAgICAgICAgICAgLCBlbmQob3RoZXJFbmQpCi0gICAgICAgICAgICAsIGRpdm90TGluZShvdGhl
ckRpdm90TGluZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQob3RoZXJEaXZvdExpbmVT
dGFydCkKICAgICAgICAgICAgICwgaGFzQXNzaWdubWVudChyaHNIYXNBc3NpZ25tZW50KQogICAg
ICAgICB7CiAgICAgICAgIH0KQEAgLTU0LDM5ICs0NiwzMSBAQCBjbGFzcyBBU1RCdWlsZGVyIHsK
ICAgICAgICAgICAgIDogc3RhcnQobGhzLnN0YXJ0KQogICAgICAgICAgICAgLCBkaXZvdChyaHMu
c3RhcnQpCiAgICAgICAgICAgICAsIGVuZChyaHMuZW5kKQotICAgICAgICAgICAgLCBkaXZvdExp
bmUocmhzLmRpdm90TGluZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQocmhzLmRpdm90
TGluZVN0YXJ0KQogICAgICAgICAgICAgLCBoYXNBc3NpZ25tZW50KGxocy5oYXNBc3NpZ25tZW50
IHx8IHJocy5oYXNBc3NpZ25tZW50KQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgaW50
IHN0YXJ0OwotICAgICAgICBpbnQgZGl2b3Q7Ci0gICAgICAgIGludCBlbmQ7Ci0gICAgICAgIHVu
c2lnbmVkIGRpdm90TGluZTsKLSAgICAgICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQ7CisgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBkaXZvdDsK
KyAgICAgICAgSlNUZXh0UG9zaXRpb24gZW5kOwogICAgICAgICBib29sIGhhc0Fzc2lnbm1lbnQ7
CiAgICAgfTsKICAgICAKICAgICAKICAgICBzdHJ1Y3QgQXNzaWdubWVudEluZm8gewogICAgICAg
ICBBc3NpZ25tZW50SW5mbygpIHt9Ci0gICAgICAgIEFzc2lnbm1lbnRJbmZvKEV4cHJlc3Npb25O
b2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQsIGludCBpbml0QXNzaWdubWVudHMsIE9wZXJh
dG9yIG9wKQorICAgICAgICBBc3NpZ25tZW50SW5mbyhFeHByZXNzaW9uTm9kZSogbm9kZSwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGlu
dCBpbml0QXNzaWdubWVudHMsIE9wZXJhdG9yIG9wKQogICAgICAgICAgICAgOiBtX25vZGUobm9k
ZSkKICAgICAgICAgICAgICwgbV9zdGFydChzdGFydCkKICAgICAgICAgICAgICwgbV9kaXZvdChk
aXZvdCkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmUoZGl2b3RMaW5lKQotICAgICAgICAgICAg
LCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0YXJ0KQogICAgICAgICAgICAgLCBtX2luaXRB
c3NpZ25tZW50cyhpbml0QXNzaWdubWVudHMpCiAgICAgICAgICAgICAsIG1fb3Aob3ApCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90ID49IG1fZGl2b3RMaW5lU3RhcnQpOwot
ICAgICAgICAgICAgQVNTRVJUKG1fc3RhcnQgPj0gbV9kaXZvdExpbmVTdGFydCk7CisgICAgICAg
ICAgICBBU1NFUlQobV9kaXZvdC5vZmZzZXQgPj0gbV9kaXZvdC5saW5lU3RhcnRPZmZzZXQpOwor
ICAgICAgICAgICAgQVNTRVJUKG1fc3RhcnQub2Zmc2V0ID49IG1fc3RhcnQubGluZVN0YXJ0T2Zm
c2V0KTsKICAgICAgICAgfQogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9ub2RlOwotICAgICAg
ICB1bnNpZ25lZCBtX3N0YXJ0OwotICAgICAgICB1bnNpZ25lZCBtX2Rpdm90OwotICAgICAgICB1
bnNpZ25lZCBtX2Rpdm90TGluZTsKLSAgICAgICAgdW5zaWduZWQgbV9kaXZvdExpbmVTdGFydDsK
KyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9zdGFydDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24g
bV9kaXZvdDsKICAgICAgICAgaW50IG1faW5pdEFzc2lnbm1lbnRzOwogICAgICAgICBPcGVyYXRv
ciBtX29wOwogICAgIH07CkBAIC0xMzEsNyArMTE1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdCBpbnQgIERvbnRCdWlsZFN0cmluZ3MgPSAwOwogCiAgICAgRXhwcmVzc2lvbk5vZGUqIG1h
a2VCaW5hcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCB0b2tlbiwgc3RkOjpwYWly
PEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2Rl
KiwgQmluYXJ5T3BJbmZvPik7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVu
dHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIHVuc2lnbmVkIGRpdm90LCBpbnQgZW5kLCB1bnNpZ25l
ZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICBFeHByZXNzaW9uTm9k
ZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
bk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdEVuZCk7CiAKICAgICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VF
bGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV92bSkgSlNDOjpTb3VyY2VFbGVtZW50cygpOyB9CiAK
QEAgLTE0NCwxMSArMTI4LDExIEBAIHB1YmxpYzoKIAogICAgIENvbW1hTm9kZSogY3JlYXRlQ29t
bWFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBs
aHMsIEV4cHJlc3Npb25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV92bSkgQ29tbWFOb2RlKGxv
Y2F0aW9uLCBsaHMsIHJocyk7IH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3Is
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOwotICAgIEV4cHJlc3Npb25Ob2Rl
KiBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSos
IE9wZXJhdG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VQ
b3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJh
dG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1
bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25O
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBPcGVyYXRv
ciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIGxlZnRIYXNBc3NpZ25tZW50cywgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CisgICAgRXhw
cmVzc2lvbk5vZGUqIG1ha2VQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKKyAgICBF
eHByZXNzaW9uTm9kZSogbWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKICAg
ICBFeHByZXNzaW9uTm9kZSogbWFrZVR5cGVPZk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqKTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZURlbGV0ZU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBpbnQgc3RhcnQsIGludCBkaXZv
dCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7
IAorICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKICAgICBF
eHByZXNzaW9uTm9kZSogbWFrZU5lZ2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqKTsKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdHdpc2VOb3ROb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VNdWx0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSog
bGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwpA
QCAtMTgxLDExICsxNjUsMTEgQEAgcHVibGljOgogICAgICAgICB1c2VzVGhpcygpOwogICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBUaGlzTm9kZShsb2NhdGlvbik7CiAgICAgfQotICAgIEV4cHJl
c3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRl
UmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYg
KG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCiAgICAgICAgICAgICB1
c2VzQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFJlc29sdmVOb2RlKGxv
Y2F0aW9uLCAqaWRlbnQsIHN0YXJ0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgcmV0dXJuIG5ldyAobV92bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sICppZGVudCwgc3RhcnQp
OwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKSB7IHJldHVybiBuZXcgKG1fdm0pIE9iamVjdExpdGVy
YWxOb2RlKGxvY2F0aW9uKTsgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRl
cmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5TGlzdE5vZGUqIHBy
b3BlcnRpZXMpIHsgcmV0dXJuIG5ldyAobV92bSkgT2JqZWN0TGl0ZXJhbE5vZGUobG9jYXRpb24s
IHByb3BlcnRpZXMpOyB9CkBAIC0yMjgsNDEgKzIxMiw0MiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIE51bGxOb2RlKGxvY2F0aW9uKTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlQnJhY2tldEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5LCBib29s
IHByb3BlcnR5SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogcHJvcGVydHksIGJvb2wg
cHJvcGVydHlIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAg
ewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBCcmFja2V0
QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlIYXNBc3NpZ25t
ZW50cyk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwg
ZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG90QWNjZXNzKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVy
KiBwcm9wZXJ0eSwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0
ZURvdEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciogcHJvcGVydHksIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZW5kKQogICAgIHsKICAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX3Zt
KSBEb3RBY2Nlc3Nvck5vZGUobG9jYXRpb24sIGJhc2UsICpwcm9wZXJ0eSk7Ci0gICAgICAgIHNl
dEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQs
IGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlUmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdzLCBpbnQgc3Rh
cnQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncywgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYgKFlhcnI6OmNoZWNr
U3ludGF4KHBhdHRlcm4uc3RyaW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IFJlZ0V4cE5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIFJlZ0V4cE5vZGUobG9jYXRpb24sIHBhdHRl
cm4sIGZsYWdzKTsKICAgICAgICAgaW50IHNpemUgPSBwYXR0ZXJuLmxlbmd0aCgpICsgMjsgLy8g
KyAyIGZvciB0aGUgdHdvIC8ncwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBz
dGFydCwgc3RhcnQgKyBzaXplLCBzdGFydCArIHNpemUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3Rh
cnQpOworICAgICAgICBKU1RleHRQb3NpdGlvbiBlbmQgPSBzdGFydCArIHNpemU7CisgICAgICAg
IHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAgIHJl
dHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1
bWVudHNOb2RlKiBhcmd1bWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNp
Z25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1f
dm0pIE5ld0V4cHJOb2RlKGxvY2F0aW9uLCBleHByLCBhcmd1bWVudHMpOwotICAgICAgICBzZXRF
eGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZv
dExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBk
aXZvdCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lv
bk5vZGUqIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3
RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
KQogICAgIHsKICAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIE5ld0V4cHJO
b2RlKGxvY2F0aW9uLCBleHByKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwg
c3RhcnQsIGVuZCwgZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0
RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogCkBAIC0yNzEsMTIgKzI1NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBsaHMs
IHJocyk7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29sdmUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNp
Z25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmhzLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIGlmIChyaHMtPmlzRnVuY0V4cHJOb2Rl
KCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihyaHMpLT5ib2R5KCkt
PnNldEluZmVycmVkTmFtZShpZGVudCk7CiAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBub2Rl
ID0gbmV3IChtX3ZtKSBBc3NpZ25SZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIHJocyk7Ci0g
ICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKQEAg
LTM1NSwxMCArMzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0K
IAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUV4cHJTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVu
ZCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFeHByU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGludCBlbmQpCiAgICAgewogICAgICAgICBFeHByU3RhdGVtZW50Tm9kZSog
cmVzdWx0ID0gbmV3IChtX3ZtKSBFeHByU3RhdGVtZW50Tm9kZShsb2NhdGlvbiwgZXhwcik7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBs
b2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5s
aW5lLCBlbmQsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTM3NiwxOSArMzYxLDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVG
b3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGl0
ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQg
ZW5kLCBpbnQgaW5pdFN0YXJ0LCBpbnQgaW5pdEVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3Rh
dGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIs
IEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGVuZCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQog
ICAgIHsKLSAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZSht
X3ZtLCBsb2NhdGlvbiwgKmlkZW50LCBpbml0aWFsaXplciwgaXRlciwgc3RhdGVtZW50cywgaW5p
dFN0YXJ0LCBpbml0U3RhcnQgLSBzdGFydCwgaW5pdEVuZCAtIGluaXRTdGFydCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX3Zt
KSBGb3JJbk5vZGUobV92bSwgbG9jYXRpb24sICppZGVudCwgaW5pdGlhbGl6ZXIsIGl0ZXIsIHN0
YXRlbWVudHMsIGluaXRTdGFydCwgc3RhcnQsIGluaXRFbmQpOwogICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5s
aW5lU3RhcnRPZmZzZXQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0
YXJ0LCBkaXZvdCArIDEsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAg
IHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGRpdm90ICsgMSwgZW5kKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVG
b3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGxocywgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGlu
dCBlU3RhcnQsIGludCBlRGl2b3QsIGludCBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0
ZW1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZURpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5k
KQogICAgIHsKICAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9k
ZShsb2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9m
ZnNldCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRGl2
b3QsIGVFbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzZXRFeGNlcHRp
b25Mb2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZURpdm90LCBlRW5kKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKQEAgLTQwNSw0MyArMzkwLDQzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5T
dGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHJlc3Npb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5k
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBT
dGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb24sIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIFJl
dHVybk5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgUmV0dXJuTm9kZShsb2NhdGlvbiwgZXhwcmVz
c2lvbik7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5k
LCBlRW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFy
dCwgZW5kLCBlbmQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5lLCBlbmQubGlu
ZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBp
bnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSwgdW5zaWduZWQgZW5kTGluZVN0YXJ0KQorICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKICAgICB7CiAgICAgICAgIEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBC
cmVha05vZGUobV92bSwgbG9jYXRpb24pOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihy
ZXN1bHQsIGVTdGFydCwgZUVuZCwgZUVuZCwgZW5kTGluZSwgZW5kTGluZVN0YXJ0KTsKLSAgICAg
ICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNl
dCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRp
b24ocmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFy
dC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50
IGVuZExpbmUsIHVuc2lnbmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcg
KG1fdm0pIEJyZWFrTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKLSAgICAgICAgc2V0RXhjZXB0aW9u
TG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQsIGVuZExpbmUsIGVuZExpbmVTdGFy
dCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24u
c3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIHVu
c2lnbmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBD
b250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQ29udGludWVOb2RlKG1fdm0sIGxvY2F0
aW9uKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQs
IGVFbmQsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFy
dE9mZnNldCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVu
ZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0
YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwg
aW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25l
ZCBlbmRMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRl
bnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVu
ZCkKICAgICB7CiAgICAgICAgIENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBDb250
aW51ZU5vZGUobG9jYXRpb24sICppZGVudCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9u
KHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kLCBlbmRMaW5lLCBlbmRMaW5lU3RhcnQpOwotICAg
ICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zm
c2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2Nh
dGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0LmxpbmUsIGVuZC5saW5lLCBzdGFydC5vZmZzZXQsIHN0YXJ0LmxpbmVTdGFydE9mZnNldCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00NzYsMjYgKzQ2MSwyNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlTGFiZWxTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZv
dExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVMYWJlbFN0YXRlbWVudChjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgU3Rh
dGVtZW50Tm9kZSogc3RhdGVtZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBMYWJlbE5vZGUqIHJlc3VsdCA9
IG5ldyAobV92bSkgTGFiZWxOb2RlKGxvY2F0aW9uLCAqaWRlbnQsIHN0YXRlbWVudCk7Ci0gICAg
ICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kLCBkaXZvdExp
bmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0
LCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVu
dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgc3RhcnRMaW5lLCB1bnNp
Z25lZCBlbmRMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0
YXRlbWVudCwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQsIHVuc2ln
bmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgZW5kTGluZSkKICAgICB7CiAgICAgICAgIHVzZXNXaXRo
KCk7Ci0gICAgICAgIFdpdGhOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFdpdGhOb2RlKGxvY2F0
aW9uLCBleHByLCBzdGF0ZW1lbnQsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCwgZW5k
IC0gc3RhcnQpOworICAgICAgICBXaXRoTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBXaXRoTm9k
ZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAg
cmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwg
bG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
ICAgIAogICAgIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRocm93U3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3Rh
cnQsIGludCBlbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRo
cm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBleHByLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBlbmQpCiAgICAgewogICAgICAgICBUaHJvd05vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkg
VGhyb3dOb2RlKGxvY2F0aW9uLCBleHByKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRM
aW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zm
c2V0KTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBl
bmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQp
OworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtNTQ2LDEwICs1MzEsMTAg
QEAgcHVibGljOgogCiAgICAgaW50IGV2YWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENv
dW50OyB9CiAKLSAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKGludCYgb3BlcmFu
ZFN0YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiBjdXJyZW50LCBpbnQgZXhwclN0YXJ0LCBpbnQg
bGhzLCBpbnQgcmhzLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
LCBib29sIGhhc0Fzc2lnbm1lbnRzKQorICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lvbklu
Zm8oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIGN1cnJlbnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBleHByU3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBsaHMsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiByaHMsIGJvb2wgaGFzQXNzaWdubWVudHMpCiAgICAgewogICAg
ICAgICBvcGVyYW5kU3RhY2tEZXB0aCsrOwotICAgICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoY3VycmVudCwgQmluYXJ5T3BJbmZvKGV4cHJTdGFydCwgbGhz
LCByaHMsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQsIGhhc0Fzc2lnbm1lbnRzKSkpOworICAg
ICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VycmVudCwg
QmluYXJ5T3BJbmZvKGV4cHJTdGFydCwgbGhzLCByaHMsIGhhc0Fzc2lnbm1lbnRzKSkpOwogICAg
IH0KIAogICAgIC8vIExvZ2ljIHRvIGhhbmRsZSBkYXRhc3RydWN0dXJlcyB1c2VkIGR1cmluZyBw
YXJzaW5nIG9mIGJpbmFyeSBleHByZXNzaW9ucwpAQCAtNTg2LDExICs1NzEsMTAgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIGFwcGVuZFVu
YXJ5VG9rZW4oaW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0eXBlLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICB2b2lkIGFw
cGVuZFVuYXJ5VG9rZW4oaW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0eXBlLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgewogICAgICAgICB0b2tlblN0YWNrRGVwdGgrKzsKLSAg
ICAgICAgUG9zaXRpb25JbmZvIHBvc2l0aW9uID0geyBzdGFydCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCB9OwotICAgICAgICBtX3VuYXJ5VG9rZW5TdGFjay5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIodHlwZSwgcG9zaXRpb24pKTsKKyAgICAgICAgbV91bmFyeVRva2VuU3RhY2suYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHR5cGUsIHN0YXJ0KSk7CiAgICAgfQogCiAgICAgaW50IHVuYXJ5VG9rZW5T
dGFja0xhc3RUeXBlKGludCYpCkBAIC01OTgsMzQgKzU4MiwyOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3VuYXJ5VG9rZW5TdGFjay5sYXN0KCkuZmlyc3Q7CiAgICAgfQogICAgIAotICAg
IHVuc2lnbmVkIHVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydChpbnQmKQorICAgIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiB1bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQoaW50JikKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX3VuYXJ5VG9rZW5TdGFjay5sYXN0KCkuc2Vjb25kLnN0YXJ0UG9zOworICAgICAg
ICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgpLnNlY29uZDsKICAgICB9CiAgICAgCi0g
ICAgdW5zaWduZWQgdW5hcnlUb2tlblN0YWNrTGFzdExpbmVTdGFydFBvc2l0aW9uKGludCYpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgpLnNlY29uZC5saW5l
U3RhcnRQb3M7Ci0gICAgfQotCiAgICAgdm9pZCB1bmFyeVRva2VuU3RhY2tSZW1vdmVMYXN0KGlu
dCYgdG9rZW5TdGFja0RlcHRoKQogICAgIHsKICAgICAgICAgdG9rZW5TdGFja0RlcHRoLS07CiAg
ICAgICAgIG1fdW5hcnlUb2tlblN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBhc3NpZ25tZW50U3RhY2tBcHBlbmQoaW50JiBhc3NpZ25tZW50U3RhY2tEZXB0aCwgRXhw
cmVzc2lvbk5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCwgaW50IGFzc2lnbm1lbnRDb3Vu
dCwgT3BlcmF0b3Igb3ApCisgICAgdm9pZCBhc3NpZ25tZW50U3RhY2tBcHBlbmQoaW50JiBhc3Np
Z25tZW50U3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBpbnQgYXNzaWdubWVudENv
dW50LCBPcGVyYXRvciBvcCkKICAgICB7CiAgICAgICAgIGFzc2lnbm1lbnRTdGFja0RlcHRoKys7
Ci0gICAgICAgIEFTU0VSVChzdGFydCA+PSBkaXZvdExpbmVTdGFydCk7Ci0gICAgICAgIEFTU0VS
VChkaXZvdCA+PSBkaXZvdExpbmVTdGFydCk7Ci0gICAgICAgIG1fYXNzaWdubWVudEluZm9TdGFj
ay5hcHBlbmQoQXNzaWdubWVudEluZm8obm9kZSwgc3RhcnQsIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0LCBhc3NpZ25tZW50Q291bnQsIG9wKSk7CisgICAgICAgIEFTU0VSVChzdGFy
dC5vZmZzZXQgPj0gc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKGRpdm90
Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBtX2Fzc2lnbm1lbnRJ
bmZvU3RhY2suYXBwZW5kKEFzc2lnbm1lbnRJbmZvKG5vZGUsIHN0YXJ0LCBkaXZvdCwgYXNzaWdu
bWVudENvdW50LCBvcCkpOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBc3Np
Z25tZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCYgYXNzaWdubWVudFN0
YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBpbml0aWFsQXNzaWdubWVudENvdW50
LCBpbnQgY3VycmVudEFzc2lnbm1lbnRDb3VudCwgaW50IGxhc3RUb2tlbkVuZCkKKyAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlQXNzaWdubWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBpbnQmIGFzc2lnbm1lbnRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogcmhzLCBpbnQg
aW5pdGlhbEFzc2lnbm1lbnRDb3VudCwgaW50IGN1cnJlbnRBc3NpZ25tZW50Q291bnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBsYXN0VG9rZW5FbmQpCiAgICAgewogICAgICAgICBBc3NpZ25tZW50
SW5mbyYgaW5mbyA9IG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCk7Ci0gICAgICAgIEV4cHJl
c3Npb25Ob2RlKiByZXN1bHQgPSBtYWtlQXNzaWduTm9kZShsb2NhdGlvbiwgaW5mby5tX25vZGUs
IGluZm8ubV9vcCwgcmhzLCBpbmZvLm1faW5pdEFzc2lnbm1lbnRzICE9IGluaXRpYWxBc3NpZ25t
ZW50Q291bnQsIGluZm8ubV9pbml0QXNzaWdubWVudHMgIT0gY3VycmVudEFzc2lnbm1lbnRDb3Vu
dCwgaW5mby5tX3N0YXJ0LCBpbmZvLm1fZGl2b3QgKyAxLCBsYXN0VG9rZW5FbmQsIGluZm8ubV9k
aXZvdExpbmUsIGluZm8ubV9kaXZvdExpbmVTdGFydCk7CisgICAgICAgIEV4cHJlc3Npb25Ob2Rl
KiByZXN1bHQgPSBtYWtlQXNzaWduTm9kZShsb2NhdGlvbiwgaW5mby5tX25vZGUsIGluZm8ubV9v
cCwgcmhzLCBpbmZvLm1faW5pdEFzc2lnbm1lbnRzICE9IGluaXRpYWxBc3NpZ25tZW50Q291bnQs
IGluZm8ubV9pbml0QXNzaWdubWVudHMgIT0gY3VycmVudEFzc2lnbm1lbnRDb3VudCwgaW5mby5t
X3N0YXJ0LCBpbmZvLm1fZGl2b3QgKyAxLCBsYXN0VG9rZW5FbmQpOwogICAgICAgICBtX2Fzc2ln
bm1lbnRJbmZvU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICBhc3NpZ25tZW50U3RhY2tEZXB0
aC0tOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjUxLDEwICs2MzAsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgIH07CiAKLSAgICBzdGF0aWMgdm9p
ZCBzZXRFeGNlcHRpb25Mb2NhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgc3RhdGljIHZvaWQgc2V0RXhjZXB0
aW9uTG9jYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChkaXZvdCA+PSBk
aXZvdExpbmVTdGFydCk7Ci0gICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQp
OworICAgICAgICBub2RlLT5zZXRFeGNlcHRpb25Tb3VyY2VDb2RlKGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCk7CiAgICAgfQogCiAgICAgdm9pZCBpbmNDb25zdGFudHMoKSB7IG1fc2NvcGUu
bV9udW1Db25zdGFudHMrKzsgfQpAQCAtNjc4LDcgKzY1Nyw3IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPEJpbmFyeU9wZXJhbmQsIDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVy
YW5kU3RhY2s7CiAgICAgVmVjdG9yPEFzc2lnbm1lbnRJbmZvLCAxMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fYXNzaWdubWVudEluZm9TdGFjazsKICAgICBWZWN0b3I8cGFpcjxpbnQsIGludD4s
IDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVyYXRvclN0YWNrOwotICAgIFZl
Y3RvcjxwYWlyPGludCwgUG9zaXRpb25JbmZvPiwgMTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X3VuYXJ5VG9rZW5TdGFjazsKKyAgICBWZWN0b3I8cGFpcjxpbnQsIEpTVGV4dFBvc2l0aW9uPiwg
MTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3VuYXJ5VG9rZW5TdGFjazsKICAgICBpbnQgbV9l
dmFsQ291bnQ7CiB9OwogCkBAIC02OTEsMjEgKzY3MCwyMSBAQCBFeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZVR5cGVPZk5vCiAgICAgcmV0dXJuIG5ldyAobV92bSkgVHlwZU9mVmFsdWVO
b2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKCFl
eHByLT5pc0xvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVZhbHVl
Tm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgaWYgKGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewog
ICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4o
ZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0
aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBk
aXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRp
dm90LCBzdGFydCwgZW5kKTsKICAgICB9CiAgICAgaWYgKGV4cHItPmlzQnJhY2tldEFjY2Vzc29y
Tm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBzdGF0aWNf
Y2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIERlbGV0ZUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQt
PnN1YnNjcmlwdCgpLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGlu
ZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVCcmFj
a2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwg
ZGl2b3QsIHN0YXJ0LCBlbmQpOwogICAgIH0KICAgICBBU1NFUlQoZXhwci0+aXNEb3RBY2Nlc3Nv
ck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nl
c3Nvck5vZGUqPihleHByKTsKLSAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVEb3ROb2RlKGxv
Y2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0
YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgcmV0dXJu
IG5ldyAobV92bSkgRGVsZXRlRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRl
bnRpZmllcigpLCBkaXZvdCwgc3RhcnQsIGVuZCk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlTmVnYXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbikKQEAgLTgyMiwzNiArODAxLDM2IEBAIEV4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlQml0WE9yTm8KICAgICByZXR1cm4gbmV3IChtX3ZtKSBCaXRYT3JOb2Rl
KGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUq
IGFyZ3MsIGludCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKIHsKLSAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5l
U3RhcnQpOworICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0
KTsKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV92
bSkgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGxvY2F0aW9uLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2
b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAg
ICAgICByZXR1cm4gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1
bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMtPmlz
UmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19j
YXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIgPSByZXNvbHZlLT5pZGVudGlmaWVyKCk7CiAgICAgICAgIGlmIChpZGVudGlmaWVyID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwpIHsKICAgICAgICAgICAgIHVzZXNFdmFsKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlv
biwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEV2YWxGdW5jdGlv
bkNhbGxOb2RlKGxvY2F0aW9uLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbFJlc29sdmVO
b2RlKGxvY2F0aW9uLCBpZGVudGlmaWVyLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5k
IC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3
IChtX3ZtKSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnRpZmllciwgYXJn
cywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICB9CiAgICAgaWYgKGZ1bmMtPmlz
QnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJy
YWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4oZnVuYyk7Ci0gICAgICAg
IEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQo
KSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKLSAgICAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tl
dC0+ZGl2b3QoKSwgYnJhY2tldC0+ZGl2b3RFbmRPZmZzZXQoKSwgYnJhY2tldC0+ZGl2b3RMaW5l
KCksIGJyYWNrZXQtPmRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICBGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUobG9jYXRp
b24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCk7CisgICAgICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZv
KGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90RW5kKCkub2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgfQogICAgIEFTU0VSVChmdW5jLT5pc0RvdEFjY2Vzc29yTm9kZSgp
KTsKICAgICBEb3RBY2Nlc3Nvck5vZGUqIGRvdCA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9k
ZSo+KGZ1bmMpOwogICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUqIG5vZGU7CiAgICAgaWYgKGRvdC0+
aWRlbnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmNhbGwpCi0gICAgICAgIG5vZGUg
PSBuZXcgKG1fdm0pIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2Uo
KSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBk
aXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIG5vZGUgPSBuZXcgKG1f
dm0pIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5p
ZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgZWxz
ZSBpZiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXBwbHkpCi0g
ICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlv
biwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBz
dGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBu
b2RlID0gbmV3IChtX3ZtKSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+
YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKTsKICAgICBlbHNlCi0gICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbERv
dE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KTsKLSAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZGl2
b3RFbmRPZmZzZXQoKSwgZG90LT5kaXZvdExpbmUoKSwgZG90LT5kaXZvdExpbmVTdGFydCgpKTsK
KyAgICAgICAgbm9kZSA9IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwg
ZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwg
ZGl2b3RFbmQpOworICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwg
ZG90LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTg5OSwx
MyArODc4LDEzIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQmluYXJ5Tm8KIAog
ICAgIGNhc2UgSU5TVEFOQ0VPRjogewogICAgICAgICBJbnN0YW5jZU9mTm9kZSogbm9kZSA9IG5l
dyAobV92bSkgSW5zdGFuY2VPZk5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCBy
aHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihu
b2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLmVuZCwg
cmhzLnNlY29uZC5kaXZvdExpbmUsIHJocy5zZWNvbmQuZGl2b3RMaW5lU3RhcnQpOworICAgICAg
ICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25k
LnN0YXJ0LCByaHMuc2Vjb25kLmVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAog
ICAgIGNhc2UgSU5UT0tFTjogewogICAgICAgICBJbk5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIElu
Tm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdu
bWVudCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3Rh
cnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuZW5kLCByaHMuc2Vjb25kLmRpdm90TGlu
ZSwgcmhzLnNlY29uZC5kaXZvdExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKG5vZGUsIGxocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQu
ZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC05MzcsMTAgKzkxNiwxMCBA
QCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciBv
cCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJvb2wgbG9jSGFzQXNzaWdubWVudHMsIGJvb2wgZXhw
ckhhc0Fzc2lnbm1lbnRzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciBvcCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJv
b2wgbG9jSGFzQXNzaWdubWVudHMsIGJvb2wgZXhwckhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCkKIHsKICAgICBpZiAoIWxvYy0+aXNMb2NhdGlvbigpKQotICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25FcnJvck5vZGUobG9jYXRpb24sIGRpdm90LCBkaXZv
dCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkVycm9yTm9kZShsb2NhdGlvbiwgZGl2b3QsIHN0
YXJ0LCBlbmQpOwogCiAgICAgaWYgKGxvYy0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJl
c29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihsb2MpOwpAQCAt
OTQ4LDE3ICs5MjcsMTcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25O
bwogICAgICAgICAgICAgaWYgKGV4cHItPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZXhwciktPmJvZHkoKS0+c2V0SW5mZXJyZWRO
YW1lKHJlc29sdmUtPmlkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9k
ZSogbm9kZSA9IG5ldyAobV92bSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUt
PmlkZW50aWZpZXIoKSwgZXhwcik7Ci0gICAgICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihu
b2RlLCBzdGFydCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIo
KSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVu
ZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIG5l
dyAobV92bSkgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlm
aWVyKCksIG9wLCBleHByLCBleHBySGFzQXNzaWdubWVudHMsIGRpdm90LCBzdGFydCwgZW5kKTsK
ICAgICB9CiAgICAgaWYgKGxvYy0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAg
QnJhY2tldEFjY2Vzc29yTm9kZSogYnJhY2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nv
ck5vZGUqPihsb2MpOwogICAgICAgICBpZiAob3AgPT0gT3BFcXVhbCkKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIEFzc2lnbkJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNl
KCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhh
c0Fzc2lnbm1lbnRzLCBicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdCgpIC0gc3RhcnQs
IGVuZCAtIGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90TGluZSgpLCBicmFja2V0LT5k
aXZvdExpbmVTdGFydCgpKTsKLSAgICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKiBub2RlID0g
bmV3IChtX3ZtKSBSZWFkTW9kaWZ5QnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2Uo
KSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIG9wLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhw
ckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90
TGluZSwgZGl2b3RMaW5lU3RhcnQpOwotICAgICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5m
byhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdEVuZE9mZnNldCgpLCBicmFja2V0LT5k
aXZvdExpbmUoKSwgYnJhY2tldC0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChtX3ZtKSBBc3NpZ25CcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgp
LCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNB
c3NpZ25tZW50cywgYnJhY2tldC0+ZGl2b3QoKSwgc3RhcnQsIGVuZCk7CisgICAgICAgIFJlYWRN
b2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgUmVhZE1vZGlmeUJyYWNrZXROb2Rl
KGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhw
ciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIHN0YXJ0LCBl
bmQpOworICAgICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgp
LCBicmFja2V0LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAg
IH0KICAgICBBU1NFUlQobG9jLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKQEAgLTk2NiwyMiArOTQ1
LDIyIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm8KICAgICBpZiAo
b3AgPT0gT3BFcXVhbCkgewogICAgICAgICBpZiAoZXhwci0+aXNGdW5jRXhwck5vZGUoKSkKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGV4cHIpLT5ib2R5KCktPnNldElu
ZmVycmVkTmFtZShkb3QtPmlkZW50aWZpZXIoKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0p
IEFzc2lnbkRvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwg
ZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3QoKSAtIHN0
YXJ0LCBlbmQgLSBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3RMaW5lKCksIGRvdC0+ZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkRvdE5vZGUobG9jYXRp
b24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZXhwciwgZXhwckhhc0Fzc2lnbm1l
bnRzLCBkb3QtPmRpdm90KCksIHN0YXJ0LCBlbmQpOwogICAgIH0KIAotICAgIFJlYWRNb2RpZnlE
b3ROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90
LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRz
LCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5l
U3RhcnQpOwotICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90
LT5kaXZvdEVuZE9mZnNldCgpLCBkb3QtPmRpdm90TGluZSgpLCBkb3QtPmRpdm90TGluZVN0YXJ0
KCkpOworICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5
RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhw
ciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgc3RhcnQsIGVuZCk7CisgICAgbm9kZS0+c2V0
U3ViZXhwcmVzc2lvbkluZm8oZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90RW5kKCkub2Zmc2V0KTsK
ICAgICByZXR1cm4gbm9kZTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQ
cmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKIHsKLSAgICByZXR1cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9uLCBl
eHByLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9u
LCBleHByLCBvcCwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3Qs
IGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgcmV0dXJuIG5ldyAobV92bSkgUG9zdGZp
eE5vZGUobG9jYXRpb24sIGV4cHIsIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2
b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBuZXcgKG1fdm0pIFBv
c3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcCwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gMTUy
NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMDYsOCArMTMwNiwxMCBAQCBib29sIExleGVyPFQ+OjpuZXh0VG9rZW5Jc0Nv
bG9uKCkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1KU1Rva2VuVHlwZSBMZXhlcjxUPjo6
bGV4KEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5Mb2NhdGlvbiogdG9rZW5Mb2NhdGlv
biwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9vbCBzdHJpY3RNb2RlKQorSlNUb2tlblR5cGUgTGV4
ZXI8VD46OmxleChKU1Rva2VuKiB0b2tlblJlY29yZCwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9v
bCBzdHJpY3RNb2RlKQogeworICAgIEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEgPSAmdG9rZW5SZWNv
cmQtPm1fZGF0YTsKKyAgICBKU1Rva2VuTG9jYXRpb24qIHRva2VuTG9jYXRpb24gPSAmdG9rZW5S
ZWNvcmQtPm1fbG9jYXRpb247CiAgICAgQVNTRVJUKCFtX2Vycm9yKTsKICAgICBBU1NFUlQobV9i
dWZmZXI4LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKG1fYnVmZmVyMTYuaXNFbXB0eSgpKTsKQEAg
LTEzMjUsNiArMTMyNyw3IEBAIHN0YXJ0OgogICAgIHRva2VuTG9jYXRpb24tPnN0YXJ0T2Zmc2V0
ID0gY3VycmVudE9mZnNldCgpOwogICAgIHRva2VuTG9jYXRpb24tPnNvdXJjZU9mZnNldCA9IG1f
c291cmNlT2Zmc2V0OwogICAgIEFTU0VSVChjdXJyZW50T2Zmc2V0KCkgPj0gY3VycmVudExpbmVT
dGFydE9mZnNldCgpKTsKKyAgICB0b2tlblJlY29yZC0+bV9zdGFydFBvc2l0aW9uID0gY3VycmVu
dFBvc2l0aW9uKCk7CiAKICAgICBDaGFyYWN0ZXJUeXBlIHR5cGU7CiAgICAgaWYgKExJS0VMWShp
c0xhdGluMShtX2N1cnJlbnQpKSkKQEAgLTE3MDAsNiArMTcwMyw3IEBAIHJldHVyblRva2VuOgog
ICAgIHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICB0b2tl
bkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAg
ICAgQVNTRVJUKHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5l
U3RhcnRPZmZzZXQpOworICAgIHRva2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBv
c2l0aW9uKCk7CiAgICAgbV9sYXN0VG9rZW4gPSB0b2tlbjsKICAgICByZXR1cm4gdG9rZW47CiAK
QEAgLTE3MDksNiArMTcxMyw3IEBAIHJldHVybkVycm9yOgogICAgIHRva2VuTG9jYXRpb24tPmVu
ZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRP
ZmZzZXQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAgICAgQVNTRVJUKHRva2VuTG9jYXRp
b24tPmVuZE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOworICAgIHRv
a2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgUkVMRUFT
RV9BU1NFUlQodG9rZW4gJiBFcnJvclRva2VuRmxhZyk7CiAgICAgcmV0dXJuIHRva2VuOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMTUyNTgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NiwxMSArODYsMTUgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNSZXBhcnNpbmcoKSB7IG1f
aXNSZXBhcnNpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBpc1JlcGFyc2luZygpIGNvbnN0IHsgcmV0
dXJuIG1faXNSZXBhcnNpbmc7IH0KIAotICAgIEpTVG9rZW5UeXBlIGxleChKU1Rva2VuRGF0YSos
IEpTVG9rZW5Mb2NhdGlvbiosIHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOworICAgIEpTVG9r
ZW5UeXBlIGxleChKU1Rva2VuKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgYm9v
bCBuZXh0VG9rZW5Jc0NvbG9uKCk7CiAgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVy
biBtX2xpbmVOdW1iZXI7IH0KICAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gb2Zmc2V0RnJvbVNvdXJjZVB0cihtX2NvZGUpOyB9CiAgICAgQUxXQVlT
X0lOTElORSBpbnQgY3VycmVudExpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNl
dEZyb21Tb3VyY2VQdHIobV9saW5lU3RhcnQpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1RleHRQ
b3NpdGlvbiBjdXJyZW50UG9zaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
VGV4dFBvc2l0aW9uKG1fbGluZU51bWJlciwgY3VycmVudE9mZnNldCgpLCBjdXJyZW50TGluZVN0
YXJ0T2Zmc2V0KCkpOworICAgIH0KICAgICB2b2lkIHNldExhc3RMaW5lTnVtYmVyKGludCBsYXN0
TGluZU51bWJlcikgeyBtX2xhc3RMaW5lTnVtYmVyID0gbGFzdExpbmVOdW1iZXI7IH0KICAgICBp
bnQgbGFzdExpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xhc3RMaW5lTnVtYmVyOyB9CiAg
ICAgYm9vbCBwcmV2VGVybWluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGVybWluYXRvcjsgfQpA
QCAtMTI1LDcgKzEyOSw3IEBAIHB1YmxpYzoKIAogICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQ
cm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5wcm92aWRlcigpOyB9CiAKLSAgICBK
U1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNUb2tlbkxvY2F0
aW9uKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CisgICAgSlNUb2tlblR5cGUgbGV4RXhw
ZWN0SWRlbnRpZmllcihKU1Rva2VuKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCByZWNvcmQ4KGludCk7CkBAIC0zMzEsMTIgKzMzNSwxNSBAQCBBTFdB
WVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4RXhwZWN0SWRl
bnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuTG9jYXRpb24qIHRva2VuTG9j
YXRpb24sIHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3RyaWN0TW9kZSkKK0FMV0FZU19JTkxJ
TkUgSlNUb2tlblR5cGUgTGV4ZXI8VD46OmxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbiogdG9r
ZW5SZWNvcmQsIHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3RyaWN0TW9kZSkKIHsKKyAgICBK
U1Rva2VuRGF0YSogdG9rZW5EYXRhID0gJnRva2VuUmVjb3JkLT5tX2RhdGE7CisgICAgSlNUb2tl
bkxvY2F0aW9uKiB0b2tlbkxvY2F0aW9uID0gJnRva2VuUmVjb3JkLT5tX2xvY2F0aW9uOwogICAg
IEFTU0VSVCgobGV4ZXJGbGFncyAmIExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzKSk7CiAg
ICAgY29uc3QgVCogc3RhcnQgPSBtX2NvZGU7CiAgICAgY29uc3QgVCogcHRyID0gc3RhcnQ7CiAg
ICAgY29uc3QgVCogZW5kID0gbV9jb2RlRW5kOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24gPSBjdXJyZW50UG9zaXRpb24oKTsKICAgICBpZiAocHRyID49IGVuZCkgewogICAgICAg
ICBBU1NFUlQocHRyID09IGVuZCk7CiAgICAgICAgIGdvdG8gc2xvd0Nhc2U7CkBAIC0zNzIsMTEg
KzM3OSwxMyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFCiAgICAg
dG9rZW5Mb2NhdGlvbi0+ZW5kT2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwogICAgIHRva2VuTG9j
YXRpb24tPnNvdXJjZU9mZnNldCA9IG1fc291cmNlT2Zmc2V0OwogICAgIEFTU0VSVCh0b2tlbkxv
Y2F0aW9uLT5zdGFydE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOwor
ICAgIHRva2VuUmVjb3JkLT5tX3N0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIHRv
a2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgbV9sYXN0
VG9rZW4gPSBJREVOVDsKICAgICByZXR1cm4gSURFTlQ7CiAgICAgCiBzbG93Q2FzZToKLSAgICBy
ZXR1cm4gbGV4KHRva2VuRGF0YSwgdG9rZW5Mb2NhdGlvbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9k
ZSk7CisgICAgcmV0dXJuIGxleCh0b2tlblJlY29yZCwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE1MjU4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw5ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBO
b2RlOjpOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCi0gICAgICAgIDogbV9s
aW5lTnVtYmVyKGxvY2F0aW9uLmxpbmUpCi0gICAgICAgICwgbV9zdGFydE9mZnNldChsb2NhdGlv
bi5zdGFydE9mZnNldCkKLSAgICAgICAgLCBtX2xpbmVTdGFydE9mZnNldChsb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQpCisgICAgICAgIDogbV9wb3NpdGlvbihsb2NhdGlvbi5saW5lLCBsb2NhdGlv
bi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KQogICAgIHsKICAgICAgICAg
QVNTRVJUKGxvY2F0aW9uLnN0YXJ0T2Zmc2V0ID49IGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7
CiAgICAgfQpAQCAtMTAyLDE0ICsxMDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAg
IH0KIAotaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitpbmxpbmUg
UmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9pZGVudChpZGVu
dCkKLSAgICAgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQotICAgICAgICAsIG1fZGl2
b3RMaW5lKGRpdm90TGluZSkKLSAgICAgICAgLCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0
YXJ0KQorICAgICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgewotICAgICAgICBBU1NFUlQobV9z
dGFydE9mZnNldCA+PSBtX2Rpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQVNTRVJUKG1fc3RhcnQu
b2Zmc2V0ID49IG1fc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICB9CiAKICAgICBpbmxpbmUg
RWxlbWVudE5vZGU6OkVsZW1lbnROb2RlKGludCBlbGlzaW9uLCBFeHByZXNzaW9uTm9kZSogbm9k
ZSkKQEAgLTI0Niw4MSArMjQyLDgxIEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUo
Y29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEV2YWxGdW5jdGlvbkNhbGxOb2Rl
OjpFdmFsRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBB
cmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OkV2YWxGdW5jdGlvbkNh
bGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50c05vZGUqIGFy
Z3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHBy
ZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShk
aXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkK
KyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpCiAgICAgICAgICwgbV9hcmdzKGFyZ3MpCiAgICAgewotICAgICAgICBBU1NFUlQoZGl2
b3QgPj0gZGl2b3RMaW5lU3RhcnQpOwogICAgIH0KIAotICAgIGlubGluZSBGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZ1bmN0
aW9uQ2FsbFZhbHVlTm9kZTo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmdz
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisg
ICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAg
IHsKKyAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdFN0YXJ0Lm9mZnNldCk7CiAg
ICAgfQogCi0gICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxv
Y2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAg
ICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKICAgICB9
CiAKLSAgICBpbmxpbmUgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNr
ZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBi
YXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNp
Z25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5z
aWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9k
ZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAg
ICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxlU3Vi
RXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1f
YmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKICAgICAgICAgLCBt
X2FyZ3MoYXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNO
b2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkK
KyAgICBpbmxpbmUgRnVuY3Rpb25DYWxsRG90Tm9kZTo6RnVuY3Rpb25DYWxsRG90Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikK
LSAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2Fi
bGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAg
ICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX2Fy
Z3MoYXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENhbGxGdW5jdGlvbkNhbGxEb3RO
b2RlOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3Vt
ZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0
YXJ0KQotICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50
LCBhcmdzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OkNhbGxGdW5jdGlv
bkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICA6IEZ1bmN0aW9u
Q2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50LCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFy
dCwgZGl2b3RFbmQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBcHBseUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90
TGluZVN0YXJ0KQotICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2Us
IGlkZW50LCBhcmdzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBk
aXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpBcHBs
eUZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2Rl
KiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCisgICAgICAgIDog
RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFBvc3RmaXhO
b2RlOjpQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQpCi0gICAgICAgIDogUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwg
b3BlciwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5l
U3RhcnQpCisgICAgaW5saW5lIFBvc3RmaXhOb2RlOjpQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3Blciwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICA6IFByZWZpeE5v
ZGUobG9jYXRpb24sIGV4cHIsIG9wZXIsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAg
ICB7CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZl
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAg
aW5saW5lIERlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0
aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93
YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAg
LCBtX2lkZW50KGlkZW50KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRGVsZXRlQnJhY2tl
dE5vZGU6OkRlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRGVsZXRl
QnJhY2tldE5vZGU6OkRlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0
YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lv
bk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3Qs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAg
ICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5k
KQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlw
dCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2Us
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBk
aXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRGVsZXRlRG90Tm9kZTo6RGVsZXRlRG90Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVu
ZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZv
dCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAg
ICwgbV9pZGVudChpZGVudCkKICAgICB7CkBAIC0zNTAsOSArMzQ2LDkgQEAgaW5saW5lIFJlc29s
dmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
UHJlZml4Tm9kZTo6UHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwg
dW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIFByZWZpeE5vZGU6OlByZWZpeE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIs
IE9wZXJhdG9yIG9wZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAg
ICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVQcmVm
aXhlZFN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZVByZWZpeGVkU3ViRXhw
cmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fZXhw
cihleHByKQogICAgICAgICAsIG1fb3BlcmF0b3Iob3BlcikKICAgICB7CkBAIC01MzYsMTYgKzUz
MiwxNCBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewog
ICAgIH0KIAotICAgIGlubGluZSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OlJlYWRNb2RpZnlSZXNv
bHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCkKKyAgICBpbmxpbmUgUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90
TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZv
dFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1f
cmlnaHQocmlnaHQpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcGVyKQogICAgICAgICAsIG1fcmln
aHRIYXNBc3NpZ25tZW50cyhyaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgQVNTRVJUKGRpdm90IC0gc3Rh
cnRPZmZzZXQgPj0gZGl2b3RMaW5lU3RhcnQpOwogICAgIH0KIAogICAgIGlubGluZSBBc3NpZ25S
ZXNvbHZlTm9kZTo6QXNzaWduUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCkKQEAg
LTU1NSw5ICs1NDksMTAgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBK
UwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmVhZE1vZGlmeUJyYWNrZXROb2RlOjpSZWFk
TW9kaWZ5QnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9wZXIs
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZv
dExpbmVTdGFydCkKKworICAgIGlubGluZSBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OlJlYWRNb2Rp
ZnlCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3Igb3BlciwgRXhw
cmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkK
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVT
dWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShk
aXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAg
ICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQpCkBA
IC01NjcsOSArNTYyLDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBK
UwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduQnJhY2tldE5vZGU6OkFzc2lnbkJy
YWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5l
IEFzc2lnbkJyYWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNj
cmlwdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRz
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2
b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0
YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAg
ICAgICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQp
CkBAIC01NzgsOSArNTczLDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25z
dCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduRG90Tm9kZTo6QXNzaWduRG90
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgQXNzaWduRG90Tm9kZTo6QXNzaWduRG90Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDog
RXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3Rh
cnQpCisgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kKQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1faWRlbnQoaWRl
bnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKQEAgLTU4OCw5ICs1ODMsOSBAQCBpbmxpbmUg
UmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlu
bGluZSBSZWFkTW9kaWZ5RG90Tm9kZTo6UmVhZE1vZGlmeURvdE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQpCisgICAgaW5saW5lIFJlYWRNb2RpZnlEb3ROb2RlOjpSZWFkTW9kaWZ5RG90Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhy
b3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lv
bkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fYmFzZShiYXNl
KQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKQEAg
LTU5OSw5ICs1OTQsOSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpT
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBc3NpZ25FcnJvck5vZGU6OkFzc2lnbkVycm9y
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgQXNzaWduRXJyb3JOb2RlOjpB
c3NpZ25FcnJvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxv
Y2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICB7
CiAgICAgfQogCkBAIC03MDYsMTMgKzcwMSwxMSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29s
dmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBXaXRoTm9kZTo6V2l0
aE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdWludDMyX3QgZGl2b3QsIHVuc2lnbmVkIGRp
dm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5n
dGgpCisgICAgaW5saW5lIFdpdGhOb2RlOjpXaXRoTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgp
CiAgICAgICAgIDogU3RhdGVtZW50Tm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2V4cHIoZXhw
cikKICAgICAgICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgICAgICwgbV9kaXZvdChk
aXZvdCkKLSAgICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExpbmUpCi0gICAgICAgICwgbV9kaXZv
dExpbmVTdGFydChkaXZvdExpbmVTdGFydCkKICAgICAgICAgLCBtX2V4cHJlc3Npb25MZW5ndGgo
ZXhwcmVzc2lvbkxlbmd0aCkKICAgICB7CiAgICAgfQpAQCAtODIyLDE3ICs4MTUsMTcgQEAgaW5s
aW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgRm9ySW5Ob2RlOjpGb3JJbk5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGlu
LCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCB1bnNpZ25l
ZCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBGb3JJbk5vZGU6OkZvcklu
Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBT
dGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCkKICAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1faW5p
dCgwKQotICAgICAgICAsIG1fbGV4cHIobmV3ICh2bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlk
ZW50LCBkaXZvdCAtIHN0YXJ0T2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KSkKKyAg
ICAgICAgLCBtX2xleHByKG5ldyAodm0pIFJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwgZGl2
b3RTdGFydCkpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9zdGF0ZW1lbnQo
c3RhdGVtZW50KQogICAgIHsKICAgICAgICAgaWYgKGluKSB7CiAgICAgICAgICAgICBBc3NpZ25S
ZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAodm0pIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCBp
ZGVudCwgaW4pOwotICAgICAgICAgICAgQVNTRVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsK
LSAgICAgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90IC0g
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zm
c2V0KTsKKyAgICAgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRp
dm90U3RhcnQsIGRpdm90RW5kKTsKICAgICAgICAgICAgIG1faW5pdCA9IG5vZGU7CiAgICAgICAg
IH0KICAgICAgICAgLy8gZm9yKCB2YXIgZm9vID0gYmFyIGluIGJheiApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEx
ICs1NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIFN0YXRlbWVudE5vZGU6OnNldExvYyh1
bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCBsaW5lU3RhcnRPZmZzZXQpCiB7Ci0gICAgbV9saW5lTnVtYmVyID0gZmlyc3RMaW5lOwogICAg
IG1fbGFzdExpbmUgPSBsYXN0TGluZTsKLSAgICBtX3N0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7
Ci0gICAgbV9saW5lU3RhcnRPZmZzZXQgPSBsaW5lU3RhcnRPZmZzZXQ7Ci0gICAgQVNTRVJUKG1f
c3RhcnRPZmZzZXQgPj0gbV9saW5lU3RhcnRPZmZzZXQpOworICAgIG1fcG9zaXRpb24gPSBKU1Rl
eHRQb3NpdGlvbihmaXJzdExpbmUsIHN0YXJ0T2Zmc2V0LCBsaW5lU3RhcnRPZmZzZXQpOworICAg
IEFTU0VSVChtX3Bvc2l0aW9uLm9mZnNldCA+PSBtX3Bvc2l0aW9uLmxpbmVTdGFydE9mZnNldCk7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTb3VyY2VFbGVtZW50cyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTQgKzEyOSwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGUoKSB7IH0KIAot
ICAgICAgICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Ci0gICAg
ICAgIGludCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KLSAg
ICAgICAgaW50IGxpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVN0YXJ0T2Zm
c2V0OyB9CisgICAgICAgIGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLmxp
bmU7IH0KKyAgICAgICAgaW50IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bi5vZmZzZXQ7IH0KKyAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb24ubGluZVN0YXJ0T2Zmc2V0OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgaW50IG1fbGluZU51bWJlcjsKLSAgICAgICAgaW50IG1fc3RhcnRPZmZz
ZXQ7Ci0gICAgICAgIGludCBtX2xpbmVTdGFydE9mZnNldDsKKyAgICAgICAgSlNUZXh0UG9zaXRp
b24gbV9wb3NpdGlvbjsKICAgICB9OwogCiAgICAgY2xhc3MgRXhwcmVzc2lvbk5vZGUgOiBwdWJs
aWMgTm9kZSB7CkBAIC0yNTQsNDkgKzI1Myw0MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgogICAgICAgICBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YSgpCi0gICAgICAgICAgICA6IG1fZGl2b3Qoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdFN0YXJ0T2Zmc2V0KHN0YXRpY19jYXN0
PHVpbnQxNl90PigtMSkpCi0gICAgICAgICAgICAsIG1fZGl2b3RFbmRPZmZzZXQoc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmUoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmVTdGFydChzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oLTEpKQorICAgICAgICAgICAgOiBtX2Rpdm90KC0xLCAtMSwgLTEpCisgICAg
ICAgICAgICAsIG1fZGl2b3RTdGFydCgtMSwgLTEsIC0xKQorICAgICAgICAgICAgLCBtX2Rpdm90
RW5kKC0xLCAtMSwgLTEpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEodW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpCisgICAgICAgIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZW5kKQogICAgICAgICAgICAgOiBtX2Rpdm90KGRpdm90KQotICAgICAgICAg
ICAgLCBtX2Rpdm90U3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1fZGl2
b3RFbmRPZmZzZXQoZW5kT2Zmc2V0KQotICAgICAgICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExp
bmUpCi0gICAgICAgICAgICAsIG1fZGl2b3RMaW5lU3RhcnQoZGl2b3RMaW5lU3RhcnQpCisgICAg
ICAgICAgICAsIG1fZGl2b3RTdGFydChzdGFydCkKKyAgICAgICAgICAgICwgbV9kaXZvdEVuZChl
bmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90ID49IG1fZGl2b3RMaW5l
U3RhcnQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3Qub2Zmc2V0ID49IG1fZGl2b3QubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90U3RhcnQub2Zmc2V0ID49
IG1fZGl2b3RTdGFydC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2
b3RFbmQub2Zmc2V0ID49IG1fZGl2b3RFbmQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb25Tb3VyY2VDb2RlKHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBk
aXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorCisgICAgICAgIHZvaWQgc2V0RXhj
ZXB0aW9uU291cmNlQ29kZShjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChkaXZvdCA+PSBkaXZvdExpbmVTdGFydCk7Cisg
ICAgICAgICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90LmxpbmVTdGFydE9mZnNldCk7
CisgICAgICAgICAgICBBU1NFUlQoZGl2b3RTdGFydC5vZmZzZXQgPj0gZGl2b3RTdGFydC5saW5l
U3RhcnRPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKGRpdm90RW5kLm9mZnNldCA+PSBkaXZv
dEVuZC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgbV9kaXZvdCA9IGRpdm90OwotICAg
ICAgICAgICAgbV9kaXZvdFN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICBt
X2Rpdm90RW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotICAgICAgICAgICAgbV9kaXZvdExpbmUgPSBk
aXZvdExpbmU7Ci0gICAgICAgICAgICBtX2Rpdm90TGluZVN0YXJ0ID0gZGl2b3RMaW5lU3RhcnQ7
CisgICAgICAgICAgICBtX2Rpdm90U3RhcnQgPSBkaXZvdFN0YXJ0OworICAgICAgICAgICAgbV9k
aXZvdEVuZCA9IGRpdm90RW5kOwogICAgICAgICB9CiAKLSAgICAgICAgdWludDMyX3QgZGl2b3Qo
KSBjb25zdCB7IHJldHVybiBtX2Rpdm90OyB9Ci0gICAgICAgIHVpbnQxNl90IGRpdm90U3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90U3RhcnRPZmZzZXQ7IH0KLSAgICAgICAgdWlu
dDE2X3QgZGl2b3RFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90RW5kT2Zmc2V0OyB9
Ci0gICAgICAgIHVpbnQzMl90IGRpdm90TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RMaW5l
OyB9Ci0gICAgICAgIHVpbnQzMl90IGRpdm90TGluZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9k
aXZvdExpbmVTdGFydDsgfQorICAgICAgICBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QoKSBj
b25zdCB7IHJldHVybiBtX2Rpdm90OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9kaXZvdFN0YXJ0OyB9CisgICAgICAgIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RFbmQ7IH0K
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93UmVmZXJlbmNl
RXJyb3IoQnl0ZWNvZGVHZW5lcmF0b3ImLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdDsKLSAgICAgICAgdWludDE2X3QgbV9k
aXZvdFN0YXJ0T2Zmc2V0OwotICAgICAgICB1aW50MTZfdCBtX2Rpdm90RW5kT2Zmc2V0OwotICAg
ICAgICB1aW50MzJfdCBtX2Rpdm90TGluZTsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdExpbmVT
dGFydDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdDsKKyAgICAgICAgSlNUZXh0UG9z
aXRpb24gbV9kaXZvdFN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBtX2Rpdm90RW5kOwog
ICAgIH07CiAKICAgICBjbGFzcyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSA6IHB1YmxpYyBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CkBAIC0zMDksOCArMzAyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFRocm93YWJsZVN1YkV4cHJlc3Np
b25EYXRhKHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQotICAg
ICAgICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgVGhyb3dhYmxlU3Vi
RXhwcmVzc2lvbkRhdGEoY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAg
ICAgICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpCiAgICAgICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0KDApCiAgICAg
ICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgwKQogICAgICAgICAgICAgLCBtX3N1
YmV4cHJlc3Npb25MaW5lT2Zmc2V0KDApCkBAIC0zMTgsMjggKzMxMSwzNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRTdWJleHByZXNz
aW9uSW5mbyh1aW50MzJfdCBzdWJleHByZXNzaW9uRGl2b3QsIHVpbnQxNl90IHN1YmV4cHJlc3Np
b25PZmZzZXQsIHVpbnQzMl90IHN1YmV4cHJlc3Npb25MaW5lLCB1aW50MzJfdCBzdWJleHByZXNz
aW9uTGluZVN0YXJ0KQorICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25JbmZvKGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdWJleHByZXNzaW9uRGl2b3QsIGludCBzdWJleHByZXNzaW9uT2Zmc2V0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRpdm90IDw9IGRp
dm90KCkpOworICAgICAgICAgICAgQVNTRVJUKHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQgPD0g
ZGl2b3QoKS5vZmZzZXQpOwogICAgICAgICAgICAgLy8gT3ZlcmZsb3cgbWVhbnMgd2UgY2FuJ3Qg
ZG8gdGhpcyBzYWZlbHksIHNvIGp1c3QgcG9pbnQgYXQgdGhlIHByaW1hcnkgZGl2b3QsCiAgICAg
ICAgICAgICAvLyBkaXZvdExpbmUsIG9yIGRpdm90TGluZVN0YXJ0LgotICAgICAgICAgICAgaWYg
KChkaXZvdCgpIC0gc3ViZXhwcmVzc2lvbkRpdm90KSAmIH4weEZGRkYpCisgICAgICAgICAgICBp
ZiAoKGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0KSAmIH4weEZGRkYpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKChkaXZvdExpbmUoKSAtIHN1YmV4
cHJlc3Npb25MaW5lKSAmIH4weEZGRkYpCisgICAgICAgICAgICBpZiAoKGRpdm90KCkubGluZSAt
IHN1YmV4cHJlc3Npb25EaXZvdC5saW5lKSAmIH4weEZGRkYpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgaWYgKChkaXZvdExpbmVTdGFydCgpIC0gc3ViZXhwcmVzc2lvbkxp
bmVTdGFydCkgJiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChkaXZvdCgpLmxpbmVTdGFydE9m
ZnNldCAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5lU3RhcnRPZmZzZXQpICYgfjB4RkZGRikKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9m
ZnNldCA9IGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Q7Ci0gICAgICAgICAgICBtX3N1YmV4
cHJlc3Npb25FbmRPZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0OwotICAgICAgICAgICAgbV9z
dWJleHByZXNzaW9uTGluZU9mZnNldCA9IGRpdm90TGluZSgpIC0gc3ViZXhwcmVzc2lvbkxpbmU7
Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQgPSBkaXZvdExpbmVT
dGFydCgpIC0gc3ViZXhwcmVzc2lvbkxpbmVTdGFydDsKKyAgICAgICAgICAgIGlmICgoZGl2b3RF
bmQoKSAtIHN1YmV4cHJlc3Npb25PZmZzZXQpICYgfjB4RkZGRikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9IGRpdm90KCkg
LSBzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0OworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9u
RW5kT2Zmc2V0ID0gZGl2b3RFbmQoKSAtIHN1YmV4cHJlc3Npb25PZmZzZXQ7CisgICAgICAgICAg
ICBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0ID0gZGl2b3QoKS5saW5lIC0gc3ViZXhwcmVzc2lv
bkRpdm90LmxpbmU7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQg
PSBkaXZvdCgpLmxpbmVTdGFydE9mZnNldCAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5lU3RhcnRP
ZmZzZXQ7CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uRGl2b3Qo
KSB7IHJldHVybiBkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAg
ICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gZGl2b3RTdGFy
dE9mZnNldCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWdu
ZWQgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpIHsgcmV0dXJuIG1fc3ViZXhwcmVzc2lvbkVuZE9m
ZnNldDsgfQotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uTGluZSgpIHsgcmV0dXJuIGRp
dm90TGluZSgpIC0gbV9zdWJleHByZXNzaW9uTGluZU9mZnNldDsgfQotICAgICAgICB1bnNpZ25l
ZCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkgeyByZXR1cm4gZGl2b3RMaW5lU3RhcnQoKSAtIG1f
c3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNldDsgfQorICAgICAgICBKU1RleHRQb3NpdGlvbiBz
dWJleHByZXNzaW9uRGl2b3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbmV3TGluZSA9
IGRpdm90KCkubGluZSAtIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQ7CisgICAgICAgICAgICBp
bnQgbmV3T2Zmc2V0ID0gZGl2b3QoKS5vZmZzZXQgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNl
dDsKKyAgICAgICAgICAgIGludCBuZXdMaW5lU3RhcnRPZmZzZXQgPSBkaXZvdCgpLmxpbmVTdGFy
dE9mZnNldCAtIG1fc3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNldDsKKyAgICAgICAgICAgIHJl
dHVybiBKU1RleHRQb3NpdGlvbihuZXdMaW5lLCBuZXdPZmZzZXQsIG5ld0xpbmVTdGFydE9mZnNl
dCk7CisgICAgICAgIH0KKyAgICAgICAgSlNUZXh0UG9zaXRpb24gc3ViZXhwcmVzc2lvblN0YXJ0
KCkgeyByZXR1cm4gZGl2b3RTdGFydCgpOyB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN1YmV4
cHJlc3Npb25FbmQoKSB7IHJldHVybiBkaXZvdEVuZCgpIC0gbV9zdWJleHByZXNzaW9uRW5kT2Zm
c2V0OyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHVpbnQxNl90IG1fc3ViZXhwcmVzc2lv
bkRpdm90T2Zmc2V0OwpAQCAtMzU4LDggKzM1Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgIH0KIAotICAgICAgICBUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25E
YXRhKHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQotICAgICAg
ICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgVGhyb3dhYmxlUHJlZml4
ZWRTdWJFeHByZXNzaW9uRGF0YShjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKKyAgICAgICAg
ICAgIDogVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0LCBlbmQpCiAgICAgICAg
ICAgICAsIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0KDApCiAgICAgICAgICAgICAsIG1fc3Vi
ZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KDApCiAgICAgICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkxp
bmVPZmZzZXQoMCkKQEAgLTM2NywyOCArMzY2LDM0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25JbmZvKHVpbnQz
Ml90IHN1YmV4cHJlc3Npb25EaXZvdCwgdWludDE2X3Qgc3ViZXhwcmVzc2lvbk9mZnNldCwgdWlu
dDMyX3Qgc3ViZXhwcmVzc2lvbkxpbmUsIHVpbnQzMl90IHN1YmV4cHJlc3Npb25MaW5lU3RhcnQp
CisgICAgICAgIHZvaWQgc2V0U3ViZXhwcmVzc2lvbkluZm8oY29uc3QgSlNUZXh0UG9zaXRpb24m
IHN1YmV4cHJlc3Npb25EaXZvdCwgaW50IHN1YmV4cHJlc3Npb25PZmZzZXQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChzdWJleHByZXNzaW9uRGl2b3QgPj0gZGl2b3QoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRpdm90Lm9mZnNldCA+PSBkaXZvdCgpLm9mZnNl
dCk7CiAgICAgICAgICAgICAvLyBPdmVyZmxvdyBtZWFucyB3ZSBjYW4ndCBkbyB0aGlzIHNhZmVs
eSwgc28ganVzdCBwb2ludCBhdCB0aGUgcHJpbWFyeSBkaXZvdCwKICAgICAgICAgICAgIC8vIGRp
dm90TGluZSwgb3IgZGl2b3RMaW5lU3RhcnQuCi0gICAgICAgICAgICBpZiAoKHN1YmV4cHJlc3Np
b25EaXZvdCAtIGRpdm90KCkpICYgfjB4RkZGRikgCisgICAgICAgICAgICBpZiAoKHN1YmV4cHJl
c3Npb25EaXZvdC5vZmZzZXQgLSBkaXZvdCgpKSAmIH4weEZGRkYpIAorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90LmxpbmUgLSBkaXZv
dCgpLmxpbmUpICYgfjB4RkZGRikKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBpZiAoKHN1YmV4cHJlc3Npb25MaW5lIC0gZGl2b3RMaW5lKCkpICYgfjB4RkZGRikKKyAgICAg
ICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90LmxpbmVTdGFydE9mZnNldCAtIGRpdm90KCku
bGluZVN0YXJ0T2Zmc2V0KSAmIH4weEZGRkYpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uTGluZVN0YXJ0IC0gZGl2b3RMaW5lU3RhcnQoKSkg
JiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uT2Zmc2V0IC0gZGl2b3RT
dGFydCgpKSAmIH4weEZGRkYpIAogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkRpdm90IC0gZGl2b3Qo
KTsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0ID0gc3ViZXhwcmVzc2lv
bk9mZnNldDsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQgPSBzdWJleHBy
ZXNzaW9uTGluZSAtIGRpdm90TGluZSgpOwotICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uTGlu
ZVN0YXJ0T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkxpbmVTdGFydCAtIGRpdm90TGluZVN0YXJ0KCk7
CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9IHN1YmV4cHJlc3Npb25E
aXZvdC5vZmZzZXQgLSBkaXZvdCgpOworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uU3RhcnRP
ZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0IC0gZGl2b3RTdGFydCgpOworICAgICAgICAgICAg
bV9zdWJleHByZXNzaW9uTGluZU9mZnNldCA9IHN1YmV4cHJlc3Npb25EaXZvdC5saW5lIC0gZGl2
b3QoKS5saW5lOworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uTGluZVN0YXJ0T2Zmc2V0ID0g
c3ViZXhwcmVzc2lvbkRpdm90LmxpbmVTdGFydE9mZnNldCAtIGRpdm90KCkubGluZVN0YXJ0T2Zm
c2V0OwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvbkRpdm90KCkg
eyByZXR1cm4gZGl2b3QoKSArIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0OyB9Ci0gICAgICAg
IHVuc2lnbmVkIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgpIHsgcmV0dXJuIG1fc3ViZXhwcmVz
c2lvblN0YXJ0T2Zmc2V0OyB9Ci0gICAgICAgIHVuc2lnbmVkIHN1YmV4cHJlc3Npb25FbmRPZmZz
ZXQoKSB7IHJldHVybiBkaXZvdEVuZE9mZnNldCgpICsgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZz
ZXQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvbkxpbmUoKSB7IHJldHVybiBkaXZv
dExpbmUoKSArIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWduZWQg
c3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpIHsgcmV0dXJuIGRpdm90TGluZVN0YXJ0KCkgKyBtX3N1
YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7IH0KKyAgICAgICAgSlNUZXh0UG9zaXRpb24gc3Vi
ZXhwcmVzc2lvbkRpdm90KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IG5ld0xpbmUgPSBk
aXZvdCgpLmxpbmUgKyBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0OworICAgICAgICAgICAgaW50
IG5ld09mZnNldCA9IGRpdm90KCkub2Zmc2V0ICsgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7
CisgICAgICAgICAgICBpbnQgbmV3TGluZVN0YXJ0T2Zmc2V0ID0gZGl2b3QoKS5saW5lU3RhcnRP
ZmZzZXQgKyBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7CisgICAgICAgICAgICByZXR1
cm4gSlNUZXh0UG9zaXRpb24obmV3TGluZSwgbmV3T2Zmc2V0LCBuZXdMaW5lU3RhcnRPZmZzZXQp
OworICAgICAgICB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN1YmV4cHJlc3Npb25TdGFydCgp
IHsgcmV0dXJuIGRpdm90U3RhcnQoKSArIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0OzsgfQor
ICAgICAgICBKU1RleHRQb3NpdGlvbiBzdWJleHByZXNzaW9uRW5kKCkgeyByZXR1cm4gZGl2b3RF
bmQoKTsgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB1aW50MTZfdCBtX3N1YmV4cHJlc3Np
b25EaXZvdE9mZnNldDsKQEAgLTQxOCw3ICs0MjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50
aWZpZXImLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25l
ZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpOwog
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50OyB9CiAKQEAgLTQzMCw5ICs0MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dmlydHVhbCBib29sIGlzUmVzb2x2ZU5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciYgbV9pZGVudDsKLSAgICAgICAgdWludDMyX3QgbV9zdGFy
dE9mZnNldDsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdExpbmU7Ci0gICAgICAgIHVpbnQzMl90
IG1fZGl2b3RMaW5lU3RhcnQ7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG1fc3RhcnQ7CiAgICAg
fTsKIAogICAgIGNsYXNzIEVsZW1lbnROb2RlIDogcHVibGljIFBhcnNlckFyZW5hRnJlZWFibGUg
ewpAQCAtNTc5LDcgKzU4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXZhbEZ1
bmN0aW9uQ2FsbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBFdmFsRnVuY3Rpb25DYWxsTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBFdmFsRnVuY3Rpb25DYWxs
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKTsKQEAgLTU4OSw3ICs1OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIEFyZ3Vt
ZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7
CisgICAgICAgIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSosIEFyZ3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAt
NjAwLDcgKzYwMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxs
UmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHBy
ZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9k
ZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjEx
LDcgKzYxNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNsYXNzIEZ1bmN0aW9uQ2Fs
bEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlU3Vi
RXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tl
dE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJl
c3Npb25Ob2RlKiBzdWJzY3JpcHQsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXRO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNz
aW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
QEAgLTYyMyw3ICs2MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0aW9u
Q2FsbERvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJF
eHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jdGlvbkNhbGxEb3ROb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgRnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEFyZ3Vt
ZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjM2LDcgKzYzOSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUgOiBwdWJsaWMg
RnVuY3Rpb25DYWxsRG90Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBDYWxsRnVuY3Rpb25D
YWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwg
Y29uc3QgSWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1
bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIENhbGxGdW5jdGlvbkNhbGxEb3ROb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02NDQsNyAr
NjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3MgQXBwbHlGdW5jdGlvbkNh
bGxEb3ROb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbERvdE5vZGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQXBw
bHlGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC02NTIsNyArNjU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBEZWxldGVSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93
YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlbGV0ZVJlc29sdmVO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIERlbGV0ZVJlc29s
dmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApOwpAQCAtNjYyLDcgKzY2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgRGVsZXRlQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBEZWxldGVCcmFj
a2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhw
cmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpOworICAgICAgICBEZWxldGVCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY3Myw3ICs2NzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIERlbGV0ZURvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1Ymxp
YyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBEZWxldGVE
b3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25z
dCBJZGVudGlmaWVyJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQpOworICAgICAgICBEZWxldGVEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
QEAgLTcyNiw3ICs3MjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFByZWZpeE5v
ZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVQcmVmaXhlZFN1YkV4
cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFByZWZpeE5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBQcmVmaXhOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKTsKQEAgLTc0MCw3ICs3NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFBvc3RmaXhOb2RlIDogcHVibGljIFByZWZpeE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgUG9zdGZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBP
cGVyYXRvciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOwor
ICAgICAgICBQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9k
ZSosIE9wZXJhdG9yLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtOTgzLDcgKzk4Niw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVhZE1vZGlmeVJlc29sdmVOb2RlIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0
YXJ0KTsKKyAgICAgICAgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTAwNyw3
ICsxMDEwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWFkTW9kaWZ5QnJhY2tl
dE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNz
aW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBSZWFkTW9kaWZ5QnJhY2tldE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2Rl
KiBzdWJzY3JpcHQsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2Ny
aXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2
b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRp
dm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBSZWFkTW9kaWZ5QnJh
Y2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4
cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwMjIsNyArMTAyNSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgQXNzaWduQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUs
IHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBB
c3NpZ25CcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSog
YmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBi
b29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQXNz
aWduQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJh
c2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9v
bCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApOwpAQCAtMTAzNiw3ICsxMDM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBBc3NpZ25Eb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgQXNzaWduRG90
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgIEFzc2lnbkRvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUq
IGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwNDksNyArMTA1Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVhZE1vZGlmeURvdE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAg
ICAgcHVibGljOgotICAgICAgICBSZWFkTW9kaWZ5RG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCBF
eHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQg
ZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBSZWFkTW9kaWZ5
RG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwNjMsNyArMTA2Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXNzaWduRXJyb3JOb2RlIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgQXNzaWduRXJyb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQXNz
aWduRXJyb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7
CkBAIC0xMjM5LDcgKzEyNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGb3JJbk5v
ZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRh
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEZvckluTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSopOwotICAg
ICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCB1
bnNpZ25lZCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBk
aXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgRm9ySW5Ob2RlKFZN
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25O
b2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAt
MTI5MiwxNiArMTI5NSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFdpdGhOb2Rl
IDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgV2l0aE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwg
dWludDMyX3QgZGl2b3QsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgpOworICAgICAgICBXaXRoTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhw
cjsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV9zdGF0ZW1lbnQ7Ci0gICAgICAgIHVpbnQzMl90
IG1fZGl2b3Q7Ci0gICAgICAgIHVpbnQzMl90IG1fZGl2b3RMaW5lOwotICAgICAgICB1aW50MzJf
dCBtX2Rpdm90TGluZVN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBtX2Rpdm90OwogICAg
ICAgICB1aW50MzJfdCBtX2V4cHJlc3Npb25MZW5ndGg7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTUyNTgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw4ICs2OSw2IEBAIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoVk0qIHZtLCBjb25zdCAKICAg
ICAsIG1fc3RhY2soKnZtLCB3dGZUaHJlYWREYXRhKCkuc3RhY2soKSkKICAgICAsIG1faGFzU3Rh
Y2tPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1fYWxsb3dzSW4odHJ1ZSkKLSAgICAsIG1fbGFzdExp
bmUoMCkKLSAgICAsIG1fbGFzdFRva2VuRW5kKDApCiAgICAgLCBtX2Fzc2lnbm1lbnRDb3VudCgw
KQogICAgICwgbV9ub25MSFNDb3VudCgwKQogICAgICwgbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVk
KHNvdXJjZS5wcm92aWRlcigpLT5pc1ZhbGlkKCkpCkBAIC0xMzIsMjEgKzEzMCwyMCBAQCBTdHJp
bmcgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoKQogICAgICAgICBmZWF0dXJlcyB8PSBT
aGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKIAogICAgIGRpZEZpbmlzaFBhcnNpbmcoc291cmNlRWxl
bWVudHMsIGNvbnRleHQudmFyRGVjbGFyYXRpb25zKCksIGNvbnRleHQuZnVuY0RlY2xhcmF0aW9u
cygpLCBmZWF0dXJlcywKLSAgICAgICAgICAgICAgICAgICAgIG1fbGFzdExpbmUsIGNvbnRleHQu
bnVtQ29uc3RhbnRzKCksIGNhcHR1cmVkVmFyaWFibGVzKTsKKyAgICAgICAgY29udGV4dC5udW1D
b25zdGFudHMoKSwgY2FwdHVyZWRWYXJpYWJsZXMpOwogCiAgICAgcmV0dXJuIHBhcnNlRXJyb3I7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB2b2lkIFBhcnNlcjxMZXhlclR5
cGU+OjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cywgUGFy
c2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZhclN0YWNrLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFjaywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbGFzdExpbmUsIGludCBudW1Db25zdGFudHMsIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFy
cykKKyAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+
KiBmdW5jU3RhY2ssIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgSWRl
bnRpZmllclNldCYgY2FwdHVyZWRWYXJzKQogewogICAgIG1fc291cmNlRWxlbWVudHMgPSBzb3Vy
Y2VFbGVtZW50czsKICAgICBtX3ZhckRlY2xhcmF0aW9ucyA9IHZhclN0YWNrOwogICAgIG1fZnVu
Y0RlY2xhcmF0aW9ucyA9IGZ1bmNTdGFjazsKICAgICBtX2NhcHR1cmVkVmFyaWFibGVzLnN3YXAo
Y2FwdHVyZWRWYXJzKTsKICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0gICAgbV9sYXN0TGlu
ZSA9IGxhc3RMaW5lOwogICAgIG1fbnVtQ29uc3RhbnRzID0gbnVtQ29uc3RhbnRzOwogfQogCkBA
IC0yMDQsNyArMjAxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZQogICAgIGludCBzY3JhdGNoOwogICAgIGNvbnN0IElkZW50aWZpZXIqIHNjcmF0Y2gxID0gMDsK
ICAgICBUcmVlRXhwcmVzc2lvbiBzY3JhdGNoMiA9IDA7Ci0gICAgaW50IHNjcmF0Y2gzID0gMDsK
KyAgICBKU1RleHRQb3NpdGlvbiBzY3JhdGNoMzsKICAgICBUcmVlRXhwcmVzc2lvbiB2YXJEZWNs
cyA9IHBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KGNvbnRleHQsIHNjcmF0Y2gsIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgc2NyYXRjaDMsIHNjcmF0Y2gzLCBzY3JhdGNoMyk7CiAgICAgZmFpbElmVHJ1ZSho
YXNFcnJvcigpKTsKICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwpAQCAtMjcwLDcg
KzI2Nyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlVmFyRGVjbGFyYXRpb25M
aXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBpbnQmIGRlY2xhcmF0aW9ucywgY29uc3QgSWRlbnRp
ZmllciomIGxhc3RJZGVudCwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwgaW50JiBp
ZGVudFN0YXJ0LCBpbnQmIGluaXRTdGFydCwgaW50JiBpbml0RW5kKQordGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VWYXJE
ZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGludCYgZGVjbGFyYXRpb25zLCBj
b25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxp
emVyLCBKU1RleHRQb3NpdGlvbiYgaWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFy
dCwgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQpCiB7CiAgICAgVHJlZUV4cHJlc3Npb24gdmFyRGVj
bHMgPSAwOwogICAgIGRvIHsKQEAgLTI3OSw3ICsyNzYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIG5leHQoKTsKICAgICAgICAgbWF0Y2hPckZh
aWwoSURFTlQpOwogICAgICAgICAKLSAgICAgICAgaW50IHZhclN0YXJ0ID0gdG9rZW5TdGFydCgp
OworICAgICAgICBKU1RleHRQb3NpdGlvbiB2YXJTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigp
OwogICAgICAgICBpZGVudFN0YXJ0ID0gdmFyU3RhcnQ7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXIqIG5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICAgICAgbGFzdElkZW50ID0gbmFt
ZTsKQEAgLTI4OCwxNyArMjg1LDE1IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3MKICAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShk
ZWNsYXJlVmFyaWFibGUobmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVkIiwg
bmFtZS0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUuIik7CiAgICAgICAgIGNvbnRleHQuYWRkVmFy
KG5hbWUsIChoYXNJbml0aWFsaXplciB8fCAoIW1fYWxsb3dzSW4gJiYgbWF0Y2goSU5UT0tFTikp
KSA/IERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJbml0aWFsaXplciA6IDApOwogICAgICAgICBpZiAo
aGFzSW5pdGlhbGl6ZXIpIHsKLSAgICAgICAgICAgIGludCB2YXJEaXZvdCA9IHRva2VuU3RhcnQo
KSArIDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCB2YXJMaW5lID0gdG9rZW5MaW5lKCk7IAotICAg
ICAgICAgICAgdW5zaWduZWQgdmFyTGluZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKLSAgICAg
ICAgICAgIGluaXRTdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICAgICAgICAgIEpTVGV4dFBvc2l0
aW9uIHZhckRpdm90ID0gdG9rZW5TdGFydFBvc2l0aW9uKCkgKyAxOworICAgICAgICAgICAgaW5p
dFN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBuZXh0KFRyZWVCdWls
ZGVyOjpEb250QnVpbGRTdHJpbmdzKTsgLy8gY29uc3VtZSAnPScKICAgICAgICAgICAgIFRyZWVF
eHByZXNzaW9uIGluaXRpYWxpemVyID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0
KTsKLSAgICAgICAgICAgIGluaXRFbmQgPSBsYXN0VG9rZW5FbmQoKTsKKyAgICAgICAgICAgIGlu
aXRFbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgbGFzdEluaXRpYWxp
emVyID0gaW5pdGlhbGl6ZXI7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShpbml0aWFsaXplcik7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIG5vZGUgPSBjb250ZXh0
LmNyZWF0ZUFzc2lnblJlc29sdmUobG9jYXRpb24sICpuYW1lLCBpbml0aWFsaXplciwgdmFyU3Rh
cnQsIHZhckRpdm90LCBsYXN0VG9rZW5FbmQoKSwgdmFyTGluZSwgdmFyTGluZVN0YXJ0KTsKKyAg
ICAgICAgICAgIFRyZWVFeHByZXNzaW9uIG5vZGUgPSBjb250ZXh0LmNyZWF0ZUFzc2lnblJlc29s
dmUobG9jYXRpb24sICpuYW1lLCBpbml0aWFsaXplciwgdmFyU3RhcnQsIHZhckRpdm90LCBsYXN0
VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIGlmICghdmFyRGVjbHMpCiAgICAgICAg
ICAgICAgICAgdmFyRGVjbHMgPSBub2RlOwogICAgICAgICAgICAgZWxzZQpAQCAtMzQ2LDEwICsz
NDEsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgY29u
c3VtZU9yRmFpbChPUEVOUEFSRU4pOwogICAgIGludCBub25MSFNDb3VudCA9IG1fbm9uTEhTQ291
bnQ7CiAgICAgaW50IGRlY2xhcmF0aW9ucyA9IDA7Ci0gICAgaW50IGRlY2xzU3RhcnQgPSAwOwot
ICAgIGludCBkZWNsc0VuZCA9IDA7Ci0gICAgdW5zaWduZWQgZGVjbHNMaW5lID0gMDsKLSAgICB1
bnNpZ25lZCBkZWNsc0xpbmVTdGFydCA9IDA7CisgICAgSlNUZXh0UG9zaXRpb24gZGVjbHNTdGFy
dDsKKyAgICBKU1RleHRQb3NpdGlvbiBkZWNsc0VuZDsKICAgICBUcmVlRXhwcmVzc2lvbiBkZWNs
cyA9IDA7CiAgICAgaWYgKG1hdGNoKFZBUikpIHsKICAgICAgICAgLyoKQEAgLTM2MCw4ICszNTMs
OCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXIqIGZvckluVGFyZ2V0ID0gMDsKICAgICAgICAgVHJlZUV4cHJlc3Npb24g
Zm9ySW5Jbml0aWFsaXplciA9IDA7CiAgICAgICAgIG1fYWxsb3dzSW4gPSBmYWxzZTsKLSAgICAg
ICAgaW50IGluaXRTdGFydCA9IDA7Ci0gICAgICAgIGludCBpbml0RW5kID0gMDsKKyAgICAgICAg
SlNUZXh0UG9zaXRpb24gaW5pdFN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBpbml0RW5k
OwogICAgICAgICBkZWNscyA9IHBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KGNvbnRleHQsIGRlY2xh
cmF0aW9ucywgZm9ySW5UYXJnZXQsIGZvckluSW5pdGlhbGl6ZXIsIGRlY2xzU3RhcnQsIGluaXRT
dGFydCwgaW5pdEVuZCk7CiAgICAgICAgIG1fYWxsb3dzSW4gPSB0cnVlOwogICAgICAgICBmYWls
SWZUcnVlKGhhc0Vycm9yKCkpOwpAQCAtMzczLDE0ICszNjYsMTIgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICBmYWlsSWZGYWxzZShkZWNsYXJhdGlv
bnMgPT0gMSk7CiAgICAgICAgIAogICAgICAgICAvLyBIYW5kbGUgZm9yLWluIHdpdGggdmFyIGRl
Y2xhcmF0aW9uCi0gICAgICAgIGludCBpbkxvY2F0aW9uID0gdG9rZW5TdGFydCgpOwotICAgICAg
ICB1bnNpZ25lZCBpbkxpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICAgICAgdW5zaWduZWQgaW5MaW5l
U3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgICAgICBKU1RleHRQb3NpdGlvbiBpbkxvY2F0
aW9uID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGNvbnN1bWVPckZhaWwoSU5UT0tF
Tik7CiAgICAgICAgIAogICAgICAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VFeHByZXNz
aW9uKGNvbnRleHQpOwogICAgICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICAgICAgaW50IGV4
cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwckVuZCA9
IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBpbnQgZW5kTGluZSA9
IHRva2VuTGluZSgpOwogICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOwpAQCAtMzkx
LDE2ICszODIsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQog
ICAgICAgICBlbmRMb29wKCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGb3JJbkxvb3AobG9jYXRpb24sIGZv
ckluVGFyZ2V0LCBmb3JJbkluaXRpYWxpemVyLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQs
IGluTG9jYXRpb24sIGV4cHJFbmQsIGluaXRTdGFydCwgaW5pdEVuZCwgc3RhcnRMaW5lLCBlbmRM
aW5lLCBpbkxpbmUsIGluTGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
Rm9ySW5Mb29wKGxvY2F0aW9uLCBmb3JJblRhcmdldCwgZm9ySW5Jbml0aWFsaXplciwgZXhwciwg
c3RhdGVtZW50LCBkZWNsc1N0YXJ0LCBpbkxvY2F0aW9uLCBleHByRW5kLCBpbml0U3RhcnQsIGlu
aXRFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7CiAgICAgfQogICAgIAogICAgIGlmICghbWF0Y2go
U0VNSUNPTE9OKSkgewogICAgICAgICBtX2FsbG93c0luID0gZmFsc2U7Ci0gICAgICAgIGRlY2xz
U3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIGRlY2xzU3RhcnQgPSB0b2tlblN0YXJ0UG9z
aXRpb24oKTsKICAgICAgICAgZGVjbHMgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAg
ICAgIGRlY2xzRW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgICAgIGRlY2xzTGluZSA9IGxhc3RU
b2tlbkxpbmUoKTsKLSAgICAgICAgZGVjbHNMaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQo
KTsKKyAgICAgICAgZGVjbHNFbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICBt
X2FsbG93c0luID0gdHJ1ZTsKICAgICAgICAgZmFpbElmRmFsc2UoZGVjbHMpOwogICAgIH0KQEAg
LTQzNyw3ICs0MjYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
CiAgICAgY29uc3VtZU9yRmFpbChJTlRPS0VOKTsKICAgICBUcmVlRXhwcmVzc2lvbiBleHByID0g
cGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGlu
dCBleHByRW5kID0gbGFzdFRva2VuRW5kKCk7CisgICAgSlNUZXh0UG9zaXRpb24gZXhwckVuZCA9
IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsK
ICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFSRU4pOwogICAgIGNvbnN0IElkZW50aWZpZXIqIHVu
dXNlZCA9IDA7CkBAIC00NDYsNyArNDM1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZQogICAgIGVuZExvb3AoKTsKICAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQp
OwogICAgIAotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZvckluTG9vcChsb2NhdGlvbiwgZGVj
bHMsIGV4cHIsIHN0YXRlbWVudCwgZGVjbHNTdGFydCwgZGVjbHNFbmQsIGV4cHJFbmQsIHN0YXJ0
TGluZSwgZW5kTGluZSwgZGVjbHNMaW5lLCBkZWNsc0xpbmVTdGFydCk7CisgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBkZWNscywgZXhwciwgc3RhdGVtZW50LCBk
ZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTQ1NCwyNiArNDQzLDIxIEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHsKICAgICBBU1NFUlQobWF0Y2go
QlJFQUspKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsK
LSAgICBpbnQgc3RhcnRDb2wgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGVuZENvbCA9IHRva2Vu
RW5kKCk7Ci0gICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBlbmRMaW5l
ID0gdG9rZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZW5kTGluZVN0YXJ0ID0gdG9rZW5MaW5lU3Rh
cnQoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwor
ICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBuZXh0KCk7
CiAgICAgCiAgICAgaWYgKGF1dG9TZW1pQ29sb24oKSkgewogICAgICAgICBmYWlsSWZGYWxzZVdp
dGhNZXNzYWdlKGJyZWFrSXNWYWxpZCgpLCAiJ2JyZWFrJyBpcyBvbmx5IHZhbGlkIGluc2lkZSBh
IHN3aXRjaCBvciBsb29wIHN0YXRlbWVudCIpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVCcmVha1N0YXRlbWVudChsb2NhdGlvbiwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBl
bmRMaW5lLCBlbmRMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVh
a1N0YXRlbWVudChsb2NhdGlvbiwgc3RhcnQsIGVuZCk7CiAgICAgfQogICAgIG1hdGNoT3JGYWls
KElERU5UKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlk
ZW50OwogICAgIGZhaWxJZkZhbHNlV2l0aE5hbWVBbmRNZXNzYWdlKGdldExhYmVsKGlkZW50KSwg
IkxhYmVsIiwgaWRlbnQtPmltcGwoKSwgImlzIG5vdCBkZWZpbmVkIik7Ci0gICAgZW5kQ29sID0g
dG9rZW5FbmQoKTsKLSAgICBlbmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgZW5kTGluZVN0YXJ0
ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAg
bmV4dCgpOwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobG9jYXRpb24sIGlkZW50LCBzdGFydENvbCwgZW5k
Q29sLCBzdGFydExpbmUsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7CisgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobG9jYXRpb24sIGlkZW50LCBzdGFydCwgZW5kKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTQ4MSwyOCArNDY1LDIzIEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHsKICAgICBBU1NFUlQobWF0
Y2goQ09OVElOVUUpKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlv
bigpKTsKLSAgICBpbnQgc3RhcnRDb2wgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGVuZENvbCA9
IHRva2VuRW5kKCk7Ci0gICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBl
bmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZW5kTGluZVN0YXJ0ID0gdG9rZW5M
aW5lU3RhcnQoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlv
bigpOworICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBu
ZXh0KCk7CiAgICAgCiAgICAgaWYgKGF1dG9TZW1pQ29sb24oKSkgewogICAgICAgICBmYWlsSWZG
YWxzZVdpdGhNZXNzYWdlKGNvbnRpbnVlSXNWYWxpZCgpLCAiJ2NvbnRpbnVlJyBpcyBvbmx5IHZh
bGlkIGluc2lkZSBhIGxvb3Agc3RhdGVtZW50Iik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxvY2F0aW9uLCBzdGFydENvbCwgZW5kQ29sLCBzdGFydExp
bmUsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUNvbnRpbnVlU3RhdGVtZW50KGxvY2F0aW9uLCBzdGFydCwgZW5kKTsKICAgICB9CiAgICAgbWF0
Y2hPckZhaWwoSURFTlQpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5t
X2RhdGEuaWRlbnQ7CiAgICAgU2NvcGVMYWJlbEluZm8qIGxhYmVsID0gZ2V0TGFiZWwoaWRlbnQp
OwogICAgIGZhaWxJZkZhbHNlV2l0aE5hbWVBbmRNZXNzYWdlKGxhYmVsLCAiTGFiZWwiLCBpZGVu
dC0+aW1wbCgpLCAiaXMgbm90IGRlZmluZWQiKTsKICAgICBmYWlsSWZGYWxzZVdpdGhNZXNzYWdl
KGxhYmVsLT5tX2lzTG9vcCwgIidjb250aW51ZScgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBsb29w
IHN0YXRlbWVudCIpOwotICAgIGVuZENvbCA9IHRva2VuRW5kKCk7Ci0gICAgZW5kTGluZSA9IHRv
a2VuTGluZSgpOwotICAgIGVuZExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgZW5k
ID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQoKTsKICAgICBmYWlsSWZGYWxzZShhdXRv
U2VtaUNvbG9uKCkpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50
KGxvY2F0aW9uLCBpZGVudCwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBl
bmRMaW5lU3RhcnQpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50
KGxvY2F0aW9uLCBpZGVudCwgc3RhcnQsIGVuZCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBM
ZXhlclR5cGU+CkBAIC01MTEsMjkgKzQ5MCwyNCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lCiAgICAgQVNTRVJUKG1hdGNoKFJFVFVSTikpOwogICAgIEpTVG9rZW5M
b2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIGZhaWxJZkZhbHNlKGN1cnJl
bnRTY29wZSgpLT5pc0Z1bmN0aW9uKCkpOwotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUo
KTsKLSAgICBpbnQgZW5kTGluZSA9IHN0YXJ0TGluZTsKLSAgICBpbnQgc3RhcnQgPSB0b2tlblN0
YXJ0KCk7Ci0gICAgaW50IGVuZCA9IHRva2VuRW5kKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5l
ID0gdG9rZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQgPSB0b2tlbkxpbmVT
dGFydCgpOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7
CisgICAgSlNUZXh0UG9zaXRpb24gZW5kID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQo
KTsKICAgICAvLyBXZSBkbyB0aGUgYXV0byBzZW1pY29sb24gY2hlY2sgYmVmb3JlIGF0dGVtcHRp
bmcgdG8gcGFyc2UgYW4gZXhwcmVzc2lvbgogICAgIC8vIGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRo
ZSBhIGxpbmUgYnJlYWsgYWZ0ZXIgdGhlIHJldHVybiBjb3JyZWN0bHkgdGVybWluYXRlcwogICAg
IC8vIHRoZSBzdGF0ZW1lbnQKICAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkKLSAgICAgICAgZW5k
TGluZSAgPSB0b2tlbkxpbmUoKTsKKyAgICAgICAgZW5kID0gdG9rZW5FbmRQb3NpdGlvbigpOwor
CiAgICAgaWYgKGF1dG9TZW1pQ29sb24oKSkKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
UmV0dXJuU3RhdGVtZW50KGxvY2F0aW9uLCAwLCBzdGFydCwgZW5kLCBzdGFydExpbmUsIGVuZExp
bmUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVSZXR1cm5TdGF0ZW1lbnQobG9jYXRpb24sIDAsIHN0YXJ0LCBlbmQpOwogICAgIFRyZWVF
eHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgZmFpbElmRmFs
c2UoZXhwcik7Ci0gICAgZW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgZGl2b3RMaW5lID0gbGFz
dFRva2VuTGluZSgpOwotICAgIGRpdm90TGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7
CisgICAgZW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICBpZiAobWF0Y2goU0VNSUNP
TE9OKSkKLSAgICAgICAgZW5kTGluZSAgPSB0b2tlbkxpbmUoKTsKKyAgICAgICAgZW5kICA9IHRv
a2VuRW5kUG9zaXRpb24oKTsKICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZVJldHVyblN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgc3Rh
cnQsIGVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsK
KyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQobG9jYXRpb24sIGV4cHIs
IHN0YXJ0LCBlbmQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAtNTQx
LDIxICs1MTUsMTcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQog
ewogICAgIEFTU0VSVChtYXRjaChUSFJPVykpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlv
bih0b2tlbkxvY2F0aW9uKCkpOwotICAgIGludCBlU3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAg
aW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0g
dG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwogICAgIAogICAgIGZhaWxJZlRydWUo
YXV0b1NlbWlDb2xvbigpKTsKICAgICAKICAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VF
eHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGV4cHIpOwotICAgIGludCBlRW5k
ID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lID0gbGFzdFRva2VuTGlu
ZSgpOwotICAgIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7
Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBlbmQg
PSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24o
KSk7CiAgICAgCi0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlVGhyb3dTdGF0ZW1lbnQobG9jYXRp
b24sIGV4cHIsIGVTdGFydCwgZUVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUaHJvd1N0YXRlbWVudChs
b2NhdGlvbiwgZXhwciwgc3RhcnQsIGVuZCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhl
clR5cGU+CkBAIC01NzEsMTYgKzU0MSwxNCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lCiAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIFRyZWVFeHBy
ZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgZmFpbElmRmFsc2Uo
ZXhwcik7Ci0gICAgaW50IGVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgIHVuc2lnbmVkIGRpdm90
TGluZSA9IGxhc3RUb2tlbkxpbmUoKTsKLSAgICB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCA9IGxh
c3RUb2tlbkxpbmVTdGFydCgpOworICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IGxhc3RUb2tlbkVu
ZFBvc2l0aW9uKCk7CiAgICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKICAgICBjb25zdW1l
T3JGYWlsKENMT1NFUEFSRU4pOwogICAgIGNvbnN0IElkZW50aWZpZXIqIHVudXNlZCA9IDA7CiAg
ICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0LCB1bnVz
ZWQpOwogICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CiAgICAgCi0gICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlV2l0aFN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBzdGFydCwg
ZW5kLCBzdGFydExpbmUsIGVuZExpbmUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZVdpdGhTdGF0ZW1lbnQobG9jYXRpb24sIGV4cHIsIHN0YXRl
bWVudCwgc3RhcnQsIGVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIExleGVyVHlwZT4KQEAgLTY2Nyw3ICs2MzUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgCiAgICAgdHJ5QmxvY2sgPSBwYXJzZUJsb2NrU3Rh
dGVtZW50KGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKHRyeUJsb2NrKTsKLSAgICBpbnQgbGFz
dExpbmUgPSBtX2xhc3RMaW5lOworICAgIGludCBsYXN0TGluZSA9IG1fbGFzdFRva2VuRW5kUG9z
aXRpb24ubGluZTsKICAgICAKICAgICBpZiAobWF0Y2goQ0FUQ0gpKSB7CiAgICAgICAgIGN1cnJl
bnRTY29wZSgpLT5zZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCk7CkBAIC03MTksMTMgKzY4NywxMyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgbmV4dCgpOwog
ICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkgewogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxvY2F0aW9uLCAwLCBzdGFydCwgbV9s
YXN0TGluZSk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxv
Y2F0aW9uLCAwLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lKTsKICAgICB9CiAg
ICAgVHJlZVNvdXJjZUVsZW1lbnRzIHN1YnRyZWUgPSBwYXJzZVNvdXJjZUVsZW1lbnRzPERvbnRD
aGVja0ZvclN0cmljdE1vZGU+KGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKHN1YnRyZWUpOwog
ICAgIG1hdGNoT3JGYWlsKENMT1NFQlJBQ0UpOwogICAgIG5leHQoKTsKLSAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVCbG9ja1N0YXRlbWVudChsb2NhdGlvbiwgc3VidHJlZSwgc3RhcnQsIG1fbGFz
dExpbmUpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxvY2F0aW9u
LCBzdWJ0cmVlLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lKTsKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTkzOCwyNCArOTA2LDIwIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBmYWlsSWZGYWxzZSgocGFyc2VG
dW5jdGlvbkluZm88RnVuY3Rpb25OZWVkc05hbWUsIHRydWU+KGNvbnRleHQsIG5hbWUsIHBhcmFt
ZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0
TGluZSwgYm9keVN0YXJ0Q29sdW1uKSkpOwogICAgIGZhaWxJZkZhbHNlKG5hbWUpOwogICAgIGZh
aWxJZkZhbHNlSWZTdHJpY3QoZGVjbGFyZVZhcmlhYmxlKG5hbWUpKTsKLSAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVGdW5jRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgbmFtZSwgYm9keSwgcGFyYW1l
dGVycywgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBt
X2xhc3RMaW5lLCBib2R5U3RhcnRDb2x1bW4pOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1
bmNEZWNsU3RhdGVtZW50KGxvY2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJh
Y2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5k
UG9zaXRpb24ubGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKIH0KIAogc3RydWN0IExhYmVsSW5mbyB7
Ci0gICAgTGFiZWxJbmZvKGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KQorICAgIExhYmVsSW5mbyhjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogICAgIDogbV9pZGVudChp
ZGVudCkKICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX2VuZChlbmQpCi0gICAgLCBtX2Rp
dm90TGluZShkaXZvdExpbmUpCi0gICAgLCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0YXJ0
KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgY29uc3QgSWRlbnRpZmllciogbV9pZGVudDsKLSAg
ICB1bnNpZ25lZCBtX3N0YXJ0OwotICAgIHVuc2lnbmVkIG1fZW5kOwotICAgIHVuc2lnbmVkIG1f
ZGl2b3RMaW5lOwotICAgIHVuc2lnbmVkIG1fZGl2b3RMaW5lU3RhcnQ7CisgICAgSlNUZXh0UG9z
aXRpb24gbV9zdGFydDsKKyAgICBKU1RleHRQb3NpdGlvbiBtX2VuZDsKIH07CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC05NjgsOCArOTMyLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIFZlY3RvcjxMYWJlbEluZm8+IGxhYmVsczsK
ICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24obV9zb3VyY2UtPnN0YXJ0T2Zmc2V0KCkpOwog
ICAgIGRvIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgICAgICBpbnQg
c3RhcnRpbmdMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0
ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlv
bigpOwogICAgICAgICBpZiAoIW5leHRUb2tlbklzQ29sb24oKSkgewogICAgICAgICAgICAgLy8g
SWYgd2UgaGl0IHRoaXMgcGF0aCB3ZSdyZSBtYWtpbmcgYSBleHByZXNzaW9uIHN0YXRlbWVudCwg
d2hpY2gKQEAgLTk3OCwxMiArOTQxLDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWUKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJz
ZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShleHByZXNzaW9u
KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHByU3RhdGVtZW50KGxvY2F0aW9uLCBleHByZXNzaW9u
LCBzdGFydGluZ0xpbmUsIG1fbGFzdExpbmUpOworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlRXhwclN0YXRlbWVudChsb2NhdGlvbiwgZXhwcmVzc2lvbiwgc3RhcnQsIG1fbGFzdFRv
a2VuRW5kUG9zaXRpb24ubGluZSk7CiAgICAgICAgIH0KICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICAgICAgaW50IGVuZCA9IHRva2Vu
RW5kKCk7Ci0gICAgICAgIHVuc2lnbmVkIGRpdm90TGluZSA9IHRva2VuTGluZSgpOwotICAgICAg
ICB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgIEpT
VGV4dFBvc2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgbmV4dCgpOwog
ICAgICAgICBjb25zdW1lT3JGYWlsKENPTE9OKTsKICAgICAgICAgaWYgKCFtX3N5bnRheEFscmVh
ZHlWYWxpZGF0ZWQpIHsKQEAgLTk5Miw3ICs5NTMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
YmVscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGlkZW50LT5pbXBs
KCkgPT0gbGFiZWxzW2ldLm1faWRlbnQtPmltcGwoKSk7CiAgICAgICAgICAgICBmYWlsSWZUcnVl
KGdldExhYmVsKGlkZW50KSk7Ci0gICAgICAgICAgICBsYWJlbHMuYXBwZW5kKExhYmVsSW5mbyhp
ZGVudCwgc3RhcnQsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkpOworICAgICAgICAg
ICAgbGFiZWxzLmFwcGVuZChMYWJlbEluZm8oaWRlbnQsIHN0YXJ0LCBlbmQpKTsKICAgICAgICAg
fQogICAgIH0gd2hpbGUgKG1hdGNoKElERU5UKSk7CiAgICAgYm9vbCBpc0xvb3AgPSBmYWxzZTsK
QEAgLTEwMTksNyArOTgwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZQogICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsYWJlbHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgY29uc3QgTGFiZWxJbmZvJiBpbmZv
ID0gbGFiZWxzW2xhYmVscy5zaXplKCkgLSBpIC0gMV07Ci0gICAgICAgIHN0YXRlbWVudCA9IGNv
bnRleHQuY3JlYXRlTGFiZWxTdGF0ZW1lbnQobG9jYXRpb24sIGluZm8ubV9pZGVudCwgc3RhdGVt
ZW50LCBpbmZvLm1fc3RhcnQsIGluZm8ubV9lbmQsIGluZm8ubV9kaXZvdExpbmUsIGluZm8ubV9k
aXZvdExpbmVTdGFydCk7CisgICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuY3JlYXRlTGFiZWxT
dGF0ZW1lbnQobG9jYXRpb24sIGluZm8ubV9pZGVudCwgc3RhdGVtZW50LCBpbmZvLm1fc3RhcnQs
IGluZm8ubV9lbmQpOwogICAgIH0KICAgICByZXR1cm4gc3RhdGVtZW50OwogfQpAQCAtMTAyNywx
MiArOTg4LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHRl
bXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRXhwcmVzc2lvblN0YXRlbWVu
dChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5l
KCk7CisgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAg
ICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICBUcmVlRXhw
cmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJ
ZkZhbHNlKGV4cHJlc3Npb24pOwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0g
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVudChsb2NhdGlvbiwgZXhwcmVzc2lv
biwgc3RhcnRMaW5lLCBtX2xhc3RMaW5lKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHBy
U3RhdGVtZW50KGxvY2F0aW9uLCBleHByZXNzaW9uLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3Np
dGlvbi5saW5lKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTExNDgs
OSArMTEwOSw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGZhaWxJ
ZlN0YWNrT3ZlcmZsb3coKTsKLSAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgdW5z
aWduZWQgbGluZSA9IHRva2VuTGluZSgpOwotICAgIHVuc2lnbmVkIGxpbmVTdGFydCA9IHRva2Vu
TGluZVN0YXJ0KCk7CisgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRp
b24oKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAg
ICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCA9IG1fYXNzaWdubWVudENvdW50OwogICAgIGlu
dCBpbml0aWFsTm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwpAQCAtMTE4MSwxMCArMTE0MCw4
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHIKICAgICAgICAgfQog
ICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgaGFkQXNzaWdu
bWVudCA9IHRydWU7Ci0gICAgICAgIGNvbnRleHQuYXNzaWdubWVudFN0YWNrQXBwZW5kKGFzc2ln
bm1lbnRTdGFjaywgbGhzLCBzdGFydCwgdG9rZW5TdGFydCgpLCBsaW5lLCBsaW5lU3RhcnQsIG1f
YXNzaWdubWVudENvdW50LCBvcCk7Ci0gICAgICAgIHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAg
ICAgICBsaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgICAgIGxpbmVTdGFydCA9IHRva2VuTGluZVN0
YXJ0KCk7CisgICAgICAgIGNvbnRleHQuYXNzaWdubWVudFN0YWNrQXBwZW5kKGFzc2lnbm1lbnRT
dGFjaywgbGhzLCBzdGFydCwgdG9rZW5TdGFydFBvc2l0aW9uKCksIG1fYXNzaWdubWVudENvdW50
LCBvcCk7CisgICAgICAgIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIG1f
YXNzaWdubWVudENvdW50Kys7CiAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0
cmluZ3MpOwogICAgICAgICBpZiAoc3RyaWN0TW9kZSgpICYmIG1fbGFzdElkZW50aWZpZXIgJiYg
Y29udGV4dC5pc1Jlc29sdmUobGhzKSkgewpAQCAtMTIwNiw3ICsxMTYzLDcgQEAgZW5kOgogICAg
ICAgICByZXR1cm4gbGhzOwogICAgIAogICAgIHdoaWxlIChhc3NpZ25tZW50U3RhY2spCi0gICAg
ICAgIGxocyA9IGNvbnRleHQuY3JlYXRlQXNzaWdubWVudChsb2NhdGlvbiwgYXNzaWdubWVudFN0
YWNrLCBsaHMsIGluaXRpYWxBc3NpZ25tZW50Q291bnQsIG1fYXNzaWdubWVudENvdW50LCBsYXN0
VG9rZW5FbmQoKSk7CisgICAgICAgIGxocyA9IGNvbnRleHQuY3JlYXRlQXNzaWdubWVudChsb2Nh
dGlvbiwgYXNzaWdubWVudFN0YWNrLCBsaHMsIGluaXRpYWxBc3NpZ25tZW50Q291bnQsIG1fYXNz
aWdubWVudENvdW50LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAKICAgICByZXR1cm4g
bGhzOwogfQpAQCAtMTI1MiwxMiArMTIwOSwxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVFeHByZXNzCiAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkJpbmFyeUV4cHJDb250
ZXh0IGJpbmFyeUV4cHJDb250ZXh0KGNvbnRleHQpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2Nh
dGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGludCBl
eHByU3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJTdGFy
dCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRz
ID0gbV9hc3NpZ25tZW50Q291bnQ7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGN1cnJlbnQgPSBw
YXJzZVVuYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2UoY3VycmVu
dCk7CiAgICAgICAgIAotICAgICAgICBjb250ZXh0LmFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZv
KG9wZXJhbmRTdGFja0RlcHRoLCBjdXJyZW50LCBleHByU3RhcnQsIGxhc3RUb2tlbkVuZCgpLCBs
YXN0VG9rZW5FbmQoKSwgbGFzdFRva2VuTGluZSgpLCBsYXN0VG9rZW5MaW5lU3RhcnQoKSwgaW5p
dGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50KTsKKyAgICAgICAgY29udGV4dC5h
cHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhvcGVyYW5kU3RhY2tEZXB0aCwgY3VycmVudCwgZXhw
clN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCBp
bml0aWFsQXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQpOwogICAgICAgICBpbnQgcHJl
Y2VkZW5jZSA9IGlzQmluYXJ5T3BlcmF0b3IobV90b2tlbi5tX3R5cGUpOwogICAgICAgICBpZiAo
IXByZWNlZGVuY2UpCiAgICAgICAgICAgICBicmVhazsKQEAgLTEzMzcsOCArMTI5NCw4IEBAIHRl
bXBsYXRlIDxib29sIGNvbXBsZXRlLCBjbGFzcyBUcmVlQnVpbGQKICAgICAgICAgbmV4dCgpOwog
ICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm88RnVuY3Rpb25Ob1JlcXVpcmVt
ZW50cywgZmFsc2U+KGNvbnRleHQsIGFjY2Vzc29yTmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3Bl
bkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRD
b2x1bW4pKSk7CiAgICAgICAgIGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICBy
ZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBs
ZXRlPihsb2NhdGlvbiwgdHlwZSwgc3RyaW5nUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5
LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFz
dExpbmUsIGJvZHlTdGFydENvbHVtbik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRl
IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHk8Y29tcGxldGU+KGNvbnN0X2Nhc3Q8Vk0qPiht
X3ZtKSwgbG9jYXRpb24sIHR5cGUsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJv
ZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9s
YXN0TGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnRl
bXBsYXRlIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHk8Y29tcGxldGU+KGxvY2F0aW9uLCB0
eXBlLCBzdHJpbmdQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNl
dCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlv
bi5saW5lLCBib2R5U3RhcnRDb2x1bW4pOworICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0
ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PFZNKj4o
bV92bSksIGxvY2F0aW9uLCB0eXBlLCBudW1lcmljUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBi
b2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1f
bGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKICAgICB9CiAgICAg
Y2FzZSBOVU1CRVI6IHsKICAgICAgICAgZG91YmxlIHByb3BlcnR5TmFtZSA9IG1fdG9rZW4ubV9k
YXRhLmRvdWJsZVZhbHVlOwpAQCAtMTUzNiwxNSArMTQ5MywxMyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIHJldHVybiBjb250ZXh0LnRoaXNFeHBy
KGxvY2F0aW9uKTsKICAgICB9CiAgICAgY2FzZSBJREVOVDogewotICAgICAgICBpbnQgc3RhcnQg
PSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIGludCBsaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgICAg
IGludCBsaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgICAgICBKU1RleHRQb3NpdGlv
biBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwogICAgICAgICBKU1Rva2VuTG9jYXRpb24g
bG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBjdXJy
ZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQsIG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwg
PT0gKmlkZW50KTsKICAgICAgICAgbV9sYXN0SWRlbnRpZmllciA9IGlkZW50OwotICAgICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVSZXNvbHZlKGxvY2F0aW9uLCBpZGVudCwgc3RhcnQsIGxpbmUs
IGxpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJlc29sdmUobG9jYXRp
b24sIGlkZW50LCBzdGFydCk7CiAgICAgfQogICAgIGNhc2UgU1RSSU5HOiB7CiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CkBAIC0xNTgzLDEy
ICsxNTM4LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgZmFpbElmRmFsc2UobV9sZXhlci0+c2NhblJlZ0V4cChw
YXR0ZXJuLCBmbGFncykpOwogICAgICAgICAKLSAgICAgICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFy
dCgpOwotICAgICAgICBpbnQgbGluZSA9IHRva2VuTGluZSgpOwotICAgICAgICBpbnQgbGluZVN0
YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0
b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRv
a2VuTG9jYXRpb24oKSk7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAgVHJlZUV4cHJlc3Npb24g
cmUgPSBjb250ZXh0LmNyZWF0ZVJlZ0V4cChsb2NhdGlvbiwgKnBhdHRlcm4sICpmbGFncywgc3Rh
cnQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIHJlID0gY29udGV4
dC5jcmVhdGVSZWdFeHAobG9jYXRpb24sICpwYXR0ZXJuLCAqZmxhZ3MsIHN0YXJ0KTsKICAgICAg
ICAgaWYgKCFyZSkgewogICAgICAgICAgICAgY29uc3QgY2hhciogeWFyckVycm9yTXNnID0gWWFy
cjo6Y2hlY2tTeW50YXgocGF0dGVybi0+c3RyaW5nKCkpOwogICAgICAgICAgICAgZmFpbFdpdGhN
ZXNzYWdlKHlhcnJFcnJvck1zZyk7CkBAIC0xNjI5LDEwICsxNTgyLDcgQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzc2lvbihUcmVlQnVpbGRl
ciYgY29udGV4dCkKIHsKICAgICBUcmVlRXhwcmVzc2lvbiBiYXNlID0gMDsKLSAgICBpbnQgc3Rh
cnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGV4cHJlc3Npb25TdGFydCA9IHN0YXJ0OwotICAg
IGludCBleHByZXNzaW9uTGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBleHByZXNzaW9uTGlu
ZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9u
U3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICBpbnQgbmV3Q291bnQgPSAwOwogICAg
IEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbihtX3NvdXJjZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAg
d2hpbGUgKG1hdGNoKE5FVykpIHsKQEAgLTE2NTEsNyArMTYwMSw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0
aW9uKCk7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rp
b25JbmZvPEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIGZhbHNlPihjb250ZXh0LCBuYW1lLCBwYXJh
bWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFy
dExpbmUsIGJvZHlTdGFydENvbHVtbikpKTsKLSAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRl
RnVuY3Rpb25FeHByKGxvY2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VP
ZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUsIGJvZHlT
dGFydENvbHVtbik7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihs
b2NhdGlvbiwgbmFtZSwgYm9keSwgcGFyYW1ldGVycywgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJy
YWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIGJv
ZHlTdGFydENvbHVtbik7CiAgICAgfSBlbHNlCiAgICAgICAgIGJhc2UgPSBwYXJzZVByaW1hcnlF
eHByZXNzaW9uKGNvbnRleHQpOwogICAgIApAQCAtMTY2MSwxNSArMTYxMSwxMyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIHN3aXRjaCAobV90b2tl
bi5tX3R5cGUpIHsKICAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDogewogICAgICAgICAgICAgbV9u
b25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVu
ZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICAgICAgaW50IGV4cHJlc3Npb25MaW5lID0gbGFz
dFRva2VuTGluZSgpOwotICAgICAgICAgICAgaW50IGV4cHJlc3Npb25MaW5lU3RhcnQgPSBsYXN0
VG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25F
bmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAg
ICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKICAgICAgICAgICAgIGludCBp
bml0aWFsQXNzaWdubWVudHMgPSBtX2Fzc2lnbm1lbnRDb3VudDsKICAgICAgICAgICAgIFRyZWVF
eHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAg
ICAgZmFpbElmRmFsc2UocHJvcGVydHkpOwotICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlQnJhY2tldEFjY2Vzcyhsb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25t
ZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5k
LCB0b2tlbkVuZCgpLCBleHByZXNzaW9uTGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAg
ICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKGxvY2F0aW9uLCBiYXNl
LCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50LCBleHBy
ZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAg
ICAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0tFVCk7CiAgICAgICAgICAgICBtX25vbkxIU0Nv
dW50ID0gbm9uTEhTQ291bnQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2NzksMzAgKzE2Mjcs
MjUgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAg
ICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKICAgICAgICAgICAgIGlmIChuZXdD
b3VudCkgewogICAgICAgICAgICAgICAgIG5ld0NvdW50LS07Ci0gICAgICAgICAgICAgICAgaW50
IGV4cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleHBy
ZXNzaW9uTGluZSA9IGxhc3RUb2tlbkxpbmUoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBl
eHByZXNzaW9uTGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgICAgICAg
ICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7
CiAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50
cyhjb250ZXh0KTsKICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMpOwotICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2Us
IGFyZ3VtZW50cywgc3RhcnQsIGV4cHJFbmQsIGxhc3RUb2tlbkVuZCgpLCBleHByZXNzaW9uTGlu
ZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQu
Y3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQs
IGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4cHJlc3Npb25MaW5lID0gbGFzdFRva2VuTGlu
ZSgpOwotICAgICAgICAgICAgICAgIGludCBleHByZXNzaW9uTGluZVN0YXJ0ID0gbGFzdFRva2Vu
TGluZVN0YXJ0KCk7CisgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVu
ZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50
cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKICAgICAgICAgICAgICAgICBm
YWlsSWZGYWxzZShhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1h
a2VGdW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25T
dGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kKCksIGV4cHJlc3Npb25MaW5lLCBleHBy
ZXNzaW9uTGluZVN0YXJ0KTsKKyAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5tYWtlRnVu
Y3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQs
IGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBET1Q6IHsKICAgICAgICAgICAgIG1fbm9uVHJp
dmlhbEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBs
YXN0VG9rZW5FbmQoKTsKLSAgICAgICAgICAgIGV4cHJlc3Npb25MaW5lU3RhcnQgPSBsYXN0VG9r
ZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQg
PSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZp
ZXIoTGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxk
S2V5d29yZHMpOwogICAgICAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwotICAgICAgICAgICAg
YmFzZSA9IGNvbnRleHQuY3JlYXRlRG90QWNjZXNzKGxvY2F0aW9uLCBiYXNlLCBtX3Rva2VuLm1f
ZGF0YS5pZGVudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZCgpLCBl
eHByZXNzaW9uTGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAgICAgICAgICBiYXNlID0g
Y29udGV4dC5jcmVhdGVEb3RBY2Nlc3MobG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlk
ZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7
CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTcxMiw3ICsxNjU1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
cwogICAgIH0KIGVuZE1lbWJlckV4cHJlc3Npb246CiAgICAgd2hpbGUgKG5ld0NvdW50LS0pCi0g
ICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIHN0YXJ0
LCBsYXN0VG9rZW5FbmQoKSwgZXhwcmVzc2lvbkxpbmUsIGV4cHJlc3Npb25MaW5lU3RhcnQpOwor
ICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBleHBy
ZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgIHJldHVybiBiYXNlOwog
fQogCkBAIC0xNzQ1LDE0ICsxNjg4LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3MKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtX25vbkxIU0Nv
dW50Kys7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kVW5hcnlUb2tlbih0b2tlblN0YWNrRGVwdGgs
IG1fdG9rZW4ubV90eXBlLCB0b2tlblN0YXJ0KCksIHRva2VuTGluZSgpLCB0b2tlbkxpbmVTdGFy
dCgpKTsKKyAgICAgICAgY29udGV4dC5hcHBlbmRVbmFyeVRva2VuKHRva2VuU3RhY2tEZXB0aCwg
bV90b2tlbi5tX3R5cGUsIHRva2VuU3RhcnRQb3NpdGlvbigpKTsKICAgICAgICAgbmV4dCgpOwog
ICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICB9Ci0gICAgaW50IHN1
YkV4cHJTdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgc3ViRXhwckxpbmUgPSB0b2tlbkxp
bmUoKTsKLSAgICBpbnQgc3ViRXhwckxpbmVTdGFydFBvc2l0aW9uID0gdG9rZW5MaW5lU3RhcnQo
KTsKLSAgICBBU1NFUlQoc3ViRXhwclN0YXJ0ID49IHN1YkV4cHJMaW5lU3RhcnRQb3NpdGlvbik7
CisgICAgSlNUZXh0UG9zaXRpb24gc3ViRXhwclN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7
CisgICAgQVNTRVJUKHN1YkV4cHJTdGFydC5vZmZzZXQgPj0gc3ViRXhwclN0YXJ0LmxpbmVTdGFy
dE9mZnNldCk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7
CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlTWVtYmVyRXhwcmVzc2lvbihjb250ZXh0
KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKQEAgLTE3NjYsNyArMTcwNyw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBjYXNlIFBMVVNQTFVTOgogICAg
ICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgbV9ub25MSFNDb3Vu
dCsrOwotICAgICAgICBleHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4
cHIsIE9wUGx1c1BsdXMsIHN1YkV4cHJTdGFydCwgbGFzdFRva2VuRW5kKCksIHRva2VuRW5kKCks
IHRva2VuTGluZSgpLCB0b2tlbkxpbmVTdGFydCgpKTsKKyAgICAgICAgZXhwciA9IGNvbnRleHQu
bWFrZVBvc3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBPcFBsdXNQbHVzLCBzdWJFeHByU3RhcnQs
IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgIG1f
YXNzaWdubWVudENvdW50Kys7CiAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdFdpdGhOYW1lQW5k
TWVzc2FnZShpc0V2YWxPckFyZ3VtZW50cywgIiciLCBtX2xhc3RJZGVudGlmaWVyLT5pbXBsKCks
ICInIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICBmYWlsSWZU
cnVlSWZTdHJpY3QocmVxdWlyZXNMRXhwcik7CkBAIC0xNzc1LDcgKzE3MTYsNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgY2FzZSBNSU5VU01JTlVTOgog
ICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgbV9ub25MSFND
b3VudCsrOwotICAgICAgICBleHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24s
IGV4cHIsIE9wTWludXNNaW51cywgc3ViRXhwclN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwgdG9rZW5F
bmQoKSwgdG9rZW5MaW5lKCksIHRva2VuTGluZVN0YXJ0KCkpOworICAgICAgICBleHByID0gY29u
dGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wTWludXNNaW51cywgc3ViRXhw
clN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogICAg
ICAgICBtX2Fzc2lnbm1lbnRDb3VudCsrOwogICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRo
TmFtZUFuZE1lc3NhZ2UoaXNFdmFsT3JBcmd1bWVudHMsICInIiwgbV9sYXN0SWRlbnRpZmllci0+
aW1wbCgpLCAiJyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAg
ZmFpbElmVHJ1ZUlmU3RyaWN0KHJlcXVpcmVzTEV4cHIpOwpAQCAtMTc4NSw5ICsxNzI2LDcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgCi0gICAgaW50IGVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgIGludCBlbmRM
aW5lID0gbGFzdFRva2VuTGluZSgpOwotICAgIGludCBlbmRMaW5lU3RhcnRQb3NpdGlvbiA9IGxh
c3RUb2tlbkxpbmVTdGFydCgpOworICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IGxhc3RUb2tlbkVu
ZFBvc2l0aW9uKCk7CiAKICAgICBpZiAoIVRyZWVCdWlsZGVyOjpDcmVhdGVzQVNUICYmIChtX3N5
bnRheEFscmVhZHlWYWxpZGF0ZWQgfHwgIXN0cmljdE1vZGUoKSkpCiAgICAgICAgIHJldHVybiBl
eHByOwpAQCAtMTgxMCwxMiArMTc0OSwxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQTFVTUExVUzoK
ICAgICAgICAgY2FzZSBBVVRPUExVU1BMVVM6Ci0gICAgICAgICAgICBleHByID0gY29udGV4dC5t
YWtlUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BQbHVzUGx1cywgY29udGV4dC51bmFyeVRv
a2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0ICsgMSwgZW5k
LCBzdWJFeHByTGluZSwgc3ViRXhwckxpbmVTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGV4
cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBPcFBsdXNQbHVzLCBj
b250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHBy
U3RhcnQgKyAxLCBlbmQpOwogICAgICAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1JTlVTTUlOVVM6CiAgICAgICAgIGNhc2UgQVVU
T01JTlVTTUlOVVM6Ci0gICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlUHJlZml4Tm9kZShs
b2NhdGlvbiwgZXhwciwgT3BNaW51c01pbnVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RT
dGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQsIHN1YkV4cHJMaW5l
LCBzdWJFeHByTGluZVN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgZXhwciA9IGNvbnRleHQu
bWFrZVByZWZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wTWludXNNaW51cywgY29udGV4dC51bmFy
eVRva2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0ICsgMSwg
ZW5kKTsKICAgICAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBUWVBFT0Y6CkBAIC0xODI2LDE0ICsxNzY1LDEzIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIERFTEVURVRPS0VOOgogICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0
aE5hbWVBbmRNZXNzYWdlKGNvbnRleHQuaXNSZXNvbHZlKGV4cHIpLCAiQ2Fubm90IGRlbGV0ZSB1
bnF1YWxpZmllZCBwcm9wZXJ0eSIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgImluIHN0cmlj
dCBtb2RlIik7Ci0gICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlRGVsZXRlTm9kZShsb2Nh
dGlvbiwgZXhwciwgY29udGV4dC51bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0Rl
cHRoKSwgZW5kLCBlbmQsIGVuZExpbmUsIGVuZExpbmVTdGFydFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VEZWxldGVOb2RlKGxvY2F0aW9uLCBleHByLCBjb250ZXh0
LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBlbmQsIGVuZCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIElmIHdl
IGdldCBoZXJlIHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSBob3JyaWJseSB3cm9uZwogICAg
ICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogICAgICAgICBzdWJFeHByU3RhcnQgPSBjb250
ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpOwotICAgICAgICBz
dWJFeHByTGluZVN0YXJ0UG9zaXRpb24gPSBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RMaW5l
U3RhcnRQb3NpdGlvbih0b2tlblN0YWNrRGVwdGgpOwogICAgICAgICBjb250ZXh0LnVuYXJ5VG9r
ZW5TdGFja1JlbW92ZUxhc3QodG9rZW5TdGFja0RlcHRoKTsKICAgICB9CiAgICAgcmV0dXJuIGV4
cHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDE1
MjU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NSw4ICs0NzUsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBwYXJzZUlubmVy
KCk7CiAKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqLCBQYXJzZXJB
cmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiosIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3Rh
Y2s+KiwgQ29kZUZlYXR1cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwg
SWRlbnRpZmllclNldCYpOworICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFj
a3M6OkZ1bmN0aW9uU3RhY2s+KiwgQ29kZUZlYXR1cmVzLCBpbnQsIElkZW50aWZpZXJTZXQmKTsK
IAogICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIHR5cGUgb2YgZXJyb3IgdG8gcmVwb3J0LgogICAg
IGJvb2wgaXNGdW5jdGlvbkJvZHlOb2RlKFNjb3BlTm9kZSopIHsgcmV0dXJuIGZhbHNlOyB9CkBA
IC00ODQsMjAgKzQ4MywyMiBAQCBwcml2YXRlOgogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIG5l
eHQodW5zaWduZWQgbGV4ZXJGbGFncyA9IDApCiAgICAgewotICAgICAgICBtX2xhc3RMaW5lID0g
bV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7Ci0gICAgICAgIG1fbGFzdFRva2VuRW5kID0gbV90b2tl
bi5tX2xvY2F0aW9uLmVuZE9mZnNldDsKLSAgICAgICAgbV9sYXN0VG9rZW5MaW5lU3RhcnQgPSBt
X3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwotICAgICAgICBtX2xleGVyLT5zZXRM
YXN0TGluZU51bWJlcihtX2xhc3RMaW5lKTsKLSAgICAgICAgbV90b2tlbi5tX3R5cGUgPSBtX2xl
eGVyLT5sZXgoJm1fdG9rZW4ubV9kYXRhLCAmbV90b2tlbi5tX2xvY2F0aW9uLCBsZXhlckZsYWdz
LCBzdHJpY3RNb2RlKCkpOworICAgICAgICBpbnQgbGFzdExpbmUgPSBtX3Rva2VuLm1fbG9jYXRp
b24ubGluZTsKKyAgICAgICAgaW50IGxhc3RUb2tlbkVuZCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5l
bmRPZmZzZXQ7CisgICAgICAgIGludCBsYXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9j
YXRpb24ubGluZVN0YXJ0T2Zmc2V0OworICAgICAgICBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uID0g
SlNUZXh0UG9zaXRpb24obGFzdExpbmUsIGxhc3RUb2tlbkVuZCwgbGFzdFRva2VuTGluZVN0YXJ0
KTsKKyAgICAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIobGFzdExpbmUpOworICAgICAg
ICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleCgmbV90b2tlbiwgbGV4ZXJGbGFncywgc3Ry
aWN0TW9kZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbmV4dEV4cGVjdElk
ZW50aWZpZXIodW5zaWduZWQgbGV4ZXJGbGFncyA9IDApCiAgICAgewotICAgICAgICBtX2xhc3RM
aW5lID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7Ci0gICAgICAgIG1fbGFzdFRva2VuRW5kID0g
bV90b2tlbi5tX2xvY2F0aW9uLmVuZE9mZnNldDsKLSAgICAgICAgbV9sYXN0VG9rZW5MaW5lU3Rh
cnQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwotICAgICAgICBtX2xleGVy
LT5zZXRMYXN0TGluZU51bWJlcihtX2xhc3RMaW5lKTsKLSAgICAgICAgbV90b2tlbi5tX3R5cGUg
PSBtX2xleGVyLT5sZXhFeHBlY3RJZGVudGlmaWVyKCZtX3Rva2VuLm1fZGF0YSwgJm1fdG9rZW4u
bV9sb2NhdGlvbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSgpKTsKKyAgICAgICAgaW50IGxhc3RM
aW5lID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7CisgICAgICAgIGludCBsYXN0VG9rZW5FbmQg
PSBtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0OworICAgICAgICBpbnQgbGFzdFRva2VuTGlu
ZVN0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKKyAgICAgICAgbV9s
YXN0VG9rZW5FbmRQb3NpdGlvbiA9IEpTVGV4dFBvc2l0aW9uKGxhc3RMaW5lLCBsYXN0VG9rZW5F
bmQsIGxhc3RUb2tlbkxpbmVTdGFydCk7CisgICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVt
YmVyKGxhc3RMaW5lKTsKKyAgICAgICAgbV90b2tlbi5tX3R5cGUgPSBtX2xleGVyLT5sZXhFeHBl
Y3RJZGVudGlmaWVyKCZtX3Rva2VuLCBsZXhlckZsYWdzLCBzdHJpY3RNb2RlKCkpOwogICAgIH0K
IAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBuZXh0VG9rZW5Jc0NvbG9uKCkKQEAgLTUxNSw3ICs1
MTYsNyBAQCBwcml2YXRlOgogICAgIAogICAgIEFMV0FZU19JTkxJTkUgU3RyaW5nIGdldFRva2Vu
KCkgewogICAgICAgICBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIgPSBtX3NvdXJjZS0+
cHJvdmlkZXIoKTsKLSAgICAgICAgcmV0dXJuIHNvdXJjZVByb3ZpZGVyLT5nZXRSYW5nZSh0b2tl
blN0YXJ0KCksIHRva2VuRW5kKCkpOworICAgICAgICByZXR1cm4gc291cmNlUHJvdmlkZXItPmdl
dFJhbmdlKHRva2VuU3RhcnQoKSwgdG9rZW5FbmRQb3NpdGlvbigpLm9mZnNldCk7CiAgICAgfQog
ICAgIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBtYXRjaChKU1Rva2VuVHlwZSBleHBlY3RlZCkK
QEAgLTUyOCw2ICs1MjksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9s
b2NhdGlvbi5zdGFydE9mZnNldDsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSBjb25z
dCBKU1RleHRQb3NpdGlvbiYgdG9rZW5TdGFydFBvc2l0aW9uKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3Rva2VuLm1fc3RhcnRQb3NpdGlvbjsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5F
IGludCB0b2tlbkxpbmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9sb2NhdGlv
bi5saW5lOwpAQCAtNTM4LDkgKzU0NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0b2tl
blN0YXJ0KCkgLSB0b2tlbkxpbmVTdGFydCgpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgdG9rZW5FbmQoKQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSlNUZXh0UG9zaXRp
b24mIHRva2VuRW5kUG9zaXRpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9s
b2NhdGlvbi5lbmRPZmZzZXQ7CisgICAgICAgIHJldHVybiBtX3Rva2VuLm1fZW5kUG9zaXRpb247
CiAgICAgfQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgdG9rZW5MaW5lU3RhcnQo
KQpAQCAtOTE1LDcgKzkyMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGJvb2wgc3RyaWN0
LCBjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlUHJvcGVydHkgcGFyc2VQcm9w
ZXJ0eShUcmVlQnVpbGRlciYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxX
QVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVy
Jik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVG
b3JtYWxQYXJhbWV0ZXJMaXN0IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYpOwot
ICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVz
c2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRp
b25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdElu
aXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGluaXRFbmQp
OworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhw
cmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFy
YXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFz
dEluaXRpYWxpemVyLCBKU1RleHRQb3NpdGlvbiYgaWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24m
IGluaXRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQpOwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlQ29uc3REZWNsTGlzdCBwYXJzZUNvbnN0
RGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0KTsKICAgICB0ZW1wbGF0ZSA8RnVu
Y3Rpb25SZXF1aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzIFRy
ZWVCdWlsZGVyPiBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgY29uc3QgSWRl
bnRpZmllciomLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYsIFRyZWVGdW5jdGlvbkJvZHkmLCB1
bnNpZ25lZCYgb3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25lZCYgY2xvc2VCcmFjZU9mZnNldCwgaW50
JiBib2R5U3RhcnRMaW5lLCB1bnNpZ25lZCYgYm9keVN0YXJ0Q29sdW1uKTsKICAgICBBTFdBWVNf
SU5MSU5FIGludCBpc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5UeXBlKTsKQEAgLTkzNSwxOSArOTQx
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fc3RhY2suaXNTYWZlVG9SZWN1cnNlKCk7
CiAgICAgfQogICAgIAotICAgIGludCBsYXN0VG9rZW5FbmQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbGFzdFRva2VuRW5kOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGxhc3RUb2tl
bkxpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGFzdExpbmU7Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgbGFzdFRva2VuTGluZVN0YXJ0KCkgY29uc3QKKyAgICBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgbGFzdFRva2VuRW5kUG9zaXRpb24oKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fbGFzdFRva2VuTGluZVN0YXJ0OworICAgICAgICByZXR1cm4gbV9sYXN0VG9rZW5F
bmRQb3NpdGlvbjsKICAgICB9CiAKICAgICBib29sIGhhc0Vycm9yKCkgY29uc3QKQEAgLTk2NSwx
MCArOTYxLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgSlNU
b2tlbiBtX3Rva2VuOwogICAgIGJvb2wgbV9hbGxvd3NJbjsKLSAgICB1bnNpZ25lZCBtX2xhc3RM
aW5lOwotICAgIGludCBtX2xhc3RUb2tlbkVuZDsKLSAgICB1bnNpZ25lZCBtX2xhc3RUb2tlbkxp
bmU7Ci0gICAgdW5zaWduZWQgbV9sYXN0VG9rZW5MaW5lU3RhcnQ7CisgICAgSlNUZXh0UG9zaXRp
b24gbV9sYXN0VG9rZW5FbmRQb3NpdGlvbjsKICAgICBpbnQgbV9hc3NpZ25tZW50Q291bnQ7CiAg
ICAgaW50IG1fbm9uTEhTQ291bnQ7CiAgICAgYm9vbCBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQ7
CkBAIC0xMDUxLDcgKzEwNDQsNyBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhl
clR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1Db25zdGFudHMpOwotICAgICAgICByZXN1
bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdExpbmUsIG1fbGV4ZXItPmN1
cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGluZSgpLCBtX2xhc3RUb2tlbkVuZFBv
c2l0aW9uLmxpbmUsIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+Y3VycmVudExp
bmVTdGFydE9mZnNldCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBjYW4gbmV2ZXIg
c2VlIGEgc3ludGF4IGVycm9yIHdoZW4gcmVwYXJzaW5nIGEgZnVuY3Rpb24sIHNpbmNlIHdlIHNo
b3VsZCBoYXZlCiAgICAgICAgIC8vIHJlcG9ydGVkIHRoZSBlcnJvciB3aGVuIHBhcnNpbmcgdGhl
IGNvbnRhaW5pbmcgcHJvZ3JhbSBvciBldmFsIGNvZGUuIFNvIGlmIHdlJ3JlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgJKHJldmlzaW9uIDE1MjU4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1MCw2ICsxNTAsMjMgQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAgICAgSU5W
QUxJRF9TVFJJTkdfTElURVJBTF9FUlJPUlRPSyA9IDkgfCBFcnJvclRva2VuRmxhZywKIH07CiAK
K3N0cnVjdCBKU1RleHRQb3NpdGlvbiB7CisgICAgSlNUZXh0UG9zaXRpb24oKSA6IGxpbmUoMCks
IG9mZnNldCgwKSwgbGluZVN0YXJ0T2Zmc2V0KDApIHsgfQorICAgIEpTVGV4dFBvc2l0aW9uKGlu
dCBfbGluZSwgaW50IF9vZmZzZXQsIGludCBfbGluZVN0YXJ0T2Zmc2V0KSA6IGxpbmUoX2xpbmUp
LCBvZmZzZXQoX29mZnNldCksIGxpbmVTdGFydE9mZnNldChfbGluZVN0YXJ0T2Zmc2V0KSB7IH0K
KyAgICBKU1RleHRQb3NpdGlvbihjb25zdCBKU1RleHRQb3NpdGlvbiYgb3RoZXIpIDogbGluZShv
dGhlci5saW5lKSwgb2Zmc2V0KG90aGVyLm9mZnNldCksIGxpbmVTdGFydE9mZnNldChvdGhlci5s
aW5lU3RhcnRPZmZzZXQpIHsgfQorCisgICAgSlNUZXh0UG9zaXRpb24gb3BlcmF0b3IrKGludCBh
ZGp1c3RtZW50KSBjb25zdCB7IHJldHVybiBKU1RleHRQb3NpdGlvbihsaW5lLCBvZmZzZXQgKyBh
ZGp1c3RtZW50LCBsaW5lU3RhcnRPZmZzZXQpOyB9CisgICAgSlNUZXh0UG9zaXRpb24gb3BlcmF0
b3IrKHVuc2lnbmVkIGFkanVzdG1lbnQpIGNvbnN0IHsgcmV0dXJuICp0aGlzICsgc3RhdGljX2Nh
c3Q8aW50PihhZGp1c3RtZW50KTsgfQorICAgIEpTVGV4dFBvc2l0aW9uIG9wZXJhdG9yLShpbnQg
YWRqdXN0bWVudCkgY29uc3QgeyByZXR1cm4gKnRoaXMgKyAoLSBhZGp1c3RtZW50KTsgfQorICAg
IEpTVGV4dFBvc2l0aW9uIG9wZXJhdG9yLSh1bnNpZ25lZCBhZGp1c3RtZW50KSBjb25zdCB7IHJl
dHVybiAqdGhpcyArICgtIHN0YXRpY19jYXN0PGludD4oYWRqdXN0bWVudCkpOyB9CisKKyAgICBv
cGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiBvZmZzZXQ7IH0KKworICAgIGludCBsaW5lOwor
ICAgIGludCBvZmZzZXQ7CisgICAgaW50IGxpbmVTdGFydE9mZnNldDsKK307CisKIHVuaW9uIEpT
VG9rZW5EYXRhIHsKICAgICBzdHJ1Y3QgewogICAgICAgICB1aW50MzJfdCBsaW5lOwpAQCAtMTg3
LDYgKzIwNCw4IEBAIHN0cnVjdCBKU1Rva2VuIHsKICAgICBKU1Rva2VuVHlwZSBtX3R5cGU7CiAg
ICAgSlNUb2tlbkRhdGEgbV9kYXRhOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBtX2xvY2F0aW9uOwor
ICAgIEpTVGV4dFBvc2l0aW9uIG1fc3RhcnRQb3NpdGlvbjsKKyAgICBKU1RleHRQb3NpdGlvbiBt
X2VuZFBvc2l0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTUyNTgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSwyMSArMTE5LDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgRG9udEJ1aWxkU3RyaW5ncyA9IExleGVyRmxhZ3NEb250QnVpbGRTdHJpbmdzOwogCiAg
ICAgaW50IGNyZWF0ZVNvdXJjZUVsZW1lbnRzKCkgeyByZXR1cm4gMTsgfQotICAgIEV4cHJlc3Np
b25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KKyAgICBF
eHByZXNzaW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KICAgICB2b2lk
IGFwcGVuZFRvQ29tbWEoRXhwcmVzc2lvblR5cGUmIGJhc2UsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
KSB7IGJhc2UgPSByaWdodDsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbW1hRXhwcihj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUgcmln
aHQpIHsgcmV0dXJuIHJpZ2h0OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZUFzc2lnbk5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBFeHByZXNz
aW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFz
c2lnbm1lbnRFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZVByZWZpeE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBpbnQsIGludCwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gUHJlRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VQ
b3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0
b3IsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBQb3N0RXhwcjsgfQorICAgIEV4
cHJlc3Npb25UeXBlIG1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25UeXBlLCBPcGVyYXRvciwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50
LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFr
ZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJh
dG9yLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBQcmVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5
cGUgbWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
LCBPcGVyYXRvciwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gUG9zdEV4cHI7IH0KICAgICBFeHBy
ZXNzaW9uVHlwZSBtYWtlVHlwZU9mTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uVHlwZSkgeyByZXR1cm4gVHlwZW9mRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VE
ZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gRGVsZXRlRXhwcjsgfQorICAgIEV4cHJlc3Npb25U
eXBlIG1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBEZWxldGVFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5
cGUgbWFrZU5lZ2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUp
IHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIG1ha2VCaXR3aXNlTm90
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5h
cnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTG9naWNhbE5vdChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlVW5hcnlQbHVzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVWb2lkKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVy
biBVbmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSB0aGlzRXhwcihjb25zdCBKU1Rva2Vu
TG9jYXRpb24mKSB7IHJldHVybiBUaGlzRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIFJlc29sdmVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3Jl
YXRlUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50
KSB7IHJldHVybiBSZXNvbHZlRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVj
dExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4
cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KICAgICBFeHBy
ZXNzaW9uVHlwZSBjcmVhdGVBcnJheShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0
dXJuIEFycmF5TGl0ZXJhbEV4cHI7IH0KQEAgLTE0MiwxMyArMTQyLDEzIEBAIHB1YmxpYzoKICAg
ICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTdHJpbmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29u
c3QgSWRlbnRpZmllciopIHsgcmV0dXJuIFN0cmluZ0V4cHI7IH0KICAgICBFeHByZXNzaW9uVHlw
ZSBjcmVhdGVCb29sZWFuKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGJvb2wpIHsgcmV0dXJuIEJv
b2xFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTnVsbChjb25zdCBKU1Rva2VuTG9j
YXRpb24mKSB7IHJldHVybiBOdWxsRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUJy
YWNrZXRBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJl
c3Npb25UeXBlLCBib29sLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQnJhY2tl
dEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVEb3RBY2Nlc3MoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gRG90RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiBwYXR0
ZXJuLCBjb25zdCBJZGVudGlmaWVyJiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gWWFycjo6Y2hl
Y2tTeW50YXgocGF0dGVybi5zdHJpbmcoKSkgPyAwIDogUmVnRXhwRXhwcjsgfQotICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
blR5cGUsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0K
KyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gQnJhY2tldEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVEb3RB
Y2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IElkZW50
aWZpZXIqLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBEb3RFeHByOyB9CisgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlUmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZp
ZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImLCBpbnQpIHsgcmV0dXJuIFlhcnI6OmNoZWNr
U3ludGF4KHBhdHRlcm4uc3RyaW5nKCkpID8gMCA6IFJlZ0V4cEV4cHI7IH0KICAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25U
eXBlLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KKyAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25U
eXBlLCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZUNvbmRpdGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlw
ZSwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBDb25kaXRpb25hbEV4
cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CisgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlQXNzaWduUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJ
ZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2ln
bm1lbnRFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQogICAgIGludCBjcmVhdGVG
dW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgaW50LCBib29sKSB7IHJldHVybiAxOyB9CiAgICAgdm9pZCBzZXRGdW5jdGlvblN0YXJ0KGlu
dCwgaW50KSB7IH0KQEAgLTE4NSwyMiArMTg1LDIyIEBAIHB1YmxpYzoKICAgICBpbnQgY3JlYXRl
SWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50KSB7
IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNy
ZWF0ZUZvckxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBp
bnQgY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGlu
dCBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmll
ciosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyBy
ZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
ICAgICBpbnQgY3JlYXRlRW1wdHlTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyBy
ZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVWYXJTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVSZXR1cm5T
dGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAx
OyB9Ci0gICAgaW50IGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsg
fQotICAgIGludCBjcmVhdGVDb250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVD
b250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVy
KiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRl
UmV0dXJuU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQnJlYWtTdGF0
ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50
KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUNv
bnRpbnVlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIq
LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVUcnlTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZVN3aXRjaFN0YXRlbWVudChjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVy
biAxOyB9CiAgICAgaW50IGNyZWF0ZVdoaWxlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVXaXRo
U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVdpdGhTdGF0ZW1l
bnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkg
eyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVEb1doaWxlU3RhdGVtZW50KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBj
cmVhdGVMYWJlbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3Jl
YXRlVGhyb3dTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUxhYmVsU3Rh
dGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZVRocm93U3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQg
Y3JlYXRlRGVidWdnZXIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJu
IDE7IH0KICAgICBpbnQgY3JlYXRlQ29uc3RTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBhcHBlbmRDb25zdERlY2wo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJl
dHVybiAxOyB9CkBAIC0yMjIsNyArMjIyLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVmFyKGNv
bnN0IElkZW50aWZpZXIqLCBib29sKSB7IH0KICAgICBpbnQgY29tYmluZUNvbW1hTm9kZXMoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgZXZh
bENvdW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVz
c2lvbkluZm8oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgaW50IGV4cHIsIGludCwgaW50LCBpbnQs
IGludCwgaW50LCBib29sKQorICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8oaW50
JiBvcGVyYW5kU3RhY2tEZXB0aCwgaW50IGV4cHIsIGludCwgaW50LCBpbnQsIGJvb2wpCiAgICAg
ewogICAgICAgICBpZiAoIW1fdG9wQmluYXJ5RXhwcikKICAgICAgICAgICAgIG1fdG9wQmluYXJ5
RXhwciA9IGV4cHI7CkBAIC0yNDAsMTMgKzI0MCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVy
YXRvclN0YWNrQXBwZW5kKGludCYgb3BlcmF0b3JTdGFja0RlcHRoLCBpbnQsIGludCkgeyBvcGVy
YXRvclN0YWNrRGVwdGgrKzsgfQogICAgIGludCBwb3BPcGVyYW5kU3RhY2soaW50JikgeyBpbnQg
cmVzID0gbV90b3BCaW5hcnlFeHByOyBtX3RvcEJpbmFyeUV4cHIgPSAwOyByZXR1cm4gcmVzOyB9
CiAgICAgCi0gICAgdm9pZCBhcHBlbmRVbmFyeVRva2VuKGludCYgc3RhY2tEZXB0aCwgaW50IHRv
aywgaW50LCBpbnQsIGludCkgeyBzdGFja0RlcHRoID0gMTsgbV90b3BVbmFyeVRva2VuID0gdG9r
OyB9CisgICAgdm9pZCBhcHBlbmRVbmFyeVRva2VuKGludCYgc3RhY2tEZXB0aCwgaW50IHRvaywg
aW50KSB7IHN0YWNrRGVwdGggPSAxOyBtX3RvcFVuYXJ5VG9rZW4gPSB0b2s7IH0KICAgICBpbnQg
dW5hcnlUb2tlblN0YWNrTGFzdFR5cGUoaW50JikgeyByZXR1cm4gbV90b3BVbmFyeVRva2VuOyB9
Ci0gICAgdW5zaWduZWQgdW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KGludCYpIHsgcmV0dXJuIDA7
IH0KLSAgICB1bnNpZ25lZCB1bmFyeVRva2VuU3RhY2tMYXN0TGluZVN0YXJ0UG9zaXRpb24oaW50
JikgeyByZXR1cm4gMDsgfQorICAgIEpTVGV4dFBvc2l0aW9uIHVuYXJ5VG9rZW5TdGFja0xhc3RT
dGFydChpbnQmKSB7IHJldHVybiBKU1RleHRQb3NpdGlvbigwLCAwLCAwKTsgfQogICAgIHZvaWQg
dW5hcnlUb2tlblN0YWNrUmVtb3ZlTGFzdChpbnQmIHN0YWNrRGVwdGgpIHsgc3RhY2tEZXB0aCA9
IDA7IH0KICAgICAKLSAgICB2b2lkIGFzc2lnbm1lbnRTdGFja0FwcGVuZChpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIE9wZXJhdG9yKSB7IH0KKyAgICB2b2lkIGFzc2lnbm1lbnRT
dGFja0FwcGVuZChpbnQsIGludCwgaW50LCBpbnQsIGludCwgT3BlcmF0b3IpIHsgfQogICAgIGlu
dCBjcmVhdGVBc3NpZ25tZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAxOyB9CiAg
ICAgY29uc3QgSWRlbnRpZmllciYgZ2V0TmFtZShjb25zdCBQcm9wZXJ0eSYgcHJvcGVydHkpIGNv
bnN0IHsgQVNTRVJUKHByb3BlcnR5Lm5hbWUpOyByZXR1cm4gKnByb3BlcnR5Lm5hbWU7IH0KICAg
ICBQcm9wZXJ0eU5vZGU6OlR5cGUgZ2V0VHlwZShjb25zdCBQcm9wZXJ0eSYgcHJvcGVydHkpIGNv
bnN0IHsgcmV0dXJuIHByb3BlcnR5LnR5cGU7IH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MjU4MykK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEzLTA3LTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBG
aXggcHJvYmxlbXMgd2l0aCBkaXZvdCBhbmQgbGluZVN0YXJ0IG1pc21hdGNoZXMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2NjIuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lv
biB0ZXN0IGNhc2VzIGZyb20gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExODY2MgorICAgICAgICBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExODY2NC4KKworICAgICAgICAqIGZhc3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6Cisg
ICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvbGluZS1jb2x1bW4tbnVtYmVycy5qczoKKyAg
ICAgICAgKHRyeS50b0Z1enoxKToKKyAgICAgICAgKHRyeS50b0Z1enoyKToKKwogMjAxMy0wNy0x
MSAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2Ug
c2ltcGxlX2JsYW5rLnN3ZiB3aXRoIGxpbmVzLnN3ZiBmb3Igc25hcHNob3R0aW5nIHRlc3RzLgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTI1ODMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2xp
bmUtY29sdW1uLW51bWJlcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5
MywxNCBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAgICAgMiAg
IGV2YWwgYXQgW25hdGl2ZSBjb2RlXQogICAgIDMgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVt
bi1udW1iZXJzLmh0bWw6MTU1OjUKIAorLS0+IENhc2UgMTkgU3RhY2sgVHJhY2U6CisgICAgMCAg
IHRvRnV6ejEgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE2OToyNgorICAgIDEgICBnbG9i
YWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTcyOjEyCisKKy0tPiBDYXNlIDIw
IFN0YWNrIFRyYWNlOgorICAgIDAgICB0b0Z1enoyIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRt
bDoxODM6NDEKKyAgICAxICAgZ2xvYmFsIGNvZGUgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1s
OjE4NzoxMgorCiAtLT4gQ2FzZSAxIFN0YWNrIFRyYWNlOgogICAgIDAgICBnbG9iYWwgY29kZSBh
dCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjM6MjgKIApAQCAtMTgzLDYgKzE5MSwxNCBAQCBPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAgICAgMiAgIGV2YWwgYXQgW25h
dGl2ZSBjb2RlXQogICAgIDMgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpz
Ojk2OjUKIAorLS0+IENhc2UgMTkgU3RhY2sgVHJhY2U6CisgICAgMCAgIHRvRnV6ejEgYXQgbGlu
ZS1jb2x1bW4tbnVtYmVycy5qczoxMDg6MjYKKyAgICAxICAgZ2xvYmFsIGNvZGUgYXQgbGluZS1j
b2x1bW4tbnVtYmVycy5qczoxMTE6MTIKKworLS0+IENhc2UgMjAgU3RhY2sgVHJhY2U6CisgICAg
MCAgIHRvRnV6ejIgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxMjA6NDEKKyAgICAxICAgZ2xv
YmFsIGNvZGUgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxMjQ6MTIKKwogUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbAkocmV2aXNpb24gMTUyNTgzKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTE2MSw2ICsxNjEsMzUgQEAgZXZhbCgiXG4iICsKICIiKTsKIDwvc2NyaXB0PgogCis8
IS0tIENhc2UgMTk6IFJlZ3Jlc3Npb24gdGVzdCBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTg2NjIgLS0+Cis8c2NyaXB0PnRlc3RJZCsrOzwvc2NyaXB0Pgor
PHNjcmlwdD4KK3RyeSB7CisgICAgZnVuY3Rpb24gdG9GdXp6MSgpIHsKKyAgICAgICAgaWYgKFBy
aW9yaXR5UXVldWUucHJvdG90eXBlLmRvU29ydCgpIGluc3RhbmNlb2YgKHRoaXMgXj0gZnVuY3Rp
b24oKSB7CisgICAgICAgIH0pKSByZXR1cm4gMjsgCisgICAgfQorICAgIHRvRnV6ejEoKTsKK30g
Y2F0Y2goZSkgeworICAgIHByaW50U3RhY2soZS5zdGFjayk7Cit9Cis8L3NjcmlwdD4KKworPCEt
LSBDYXNlIDIwOiBSZWdyZXNzaW9uIHRlc3QgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE4NjY0IC0tPgorPHNjcmlwdD50ZXN0SWQrKzs8L3NjcmlwdD4KKzxz
Y3JpcHQ+Cit0cnkgeworICAgIGZ1bmN0aW9uIHRvRnV6ejIoKSB7CisgICAgICAgIGZvciAodmFy
IGNvbmYgPSBuZXcgQ29uZmlnT2JqZWN0KHsKKyAgICAgICAgfSkgaW4gc3RyMS5sb2NhbGVDb21w
YXJlKSB7CisgICAgICAgIH0KKyAgICB9CisgICAgdG9GdXp6MigpOworfSBjYXRjaChlKSB7Cisg
ICAgcHJpbnRTdGFjayhlLnN0YWNrKTsKK30KKzwvc2NyaXB0PgorCiA8IS0tIE5vdyBkbyBpdCBh
bGwgb3ZlciB3aXRoIGEgbG9hZGVkIHNjcmlwdCBmaWxlLiAtLT4KIDxzY3JpcHQ+dGVzdElkID0g
MDs8L3NjcmlwdD4KIAk8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2xpbmUtY29sdW1uLW51bWJl
cnMuanMiPjwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMv
bGluZS1jb2x1bW4tbnVtYmVycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pz
L3NjcmlwdC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpzCShyZXZpc2lvbiAxNTI1ODMpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNCArMTAxLDI5IEBAIGV2YWwoIlxuIiArCiAifVxuIiAr
CiAiIik7CiAKKy8vIENhc2UgMTk6IFJlZ3Jlc3Npb24gdGVzdCBmcm9tIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2NjIKK3Rlc3RJZCsrOwordHJ5IHsKKyAgICBm
dW5jdGlvbiB0b0Z1enoxKCkgeworICAgICAgICBpZiAoUHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUu
ZG9Tb3J0KCkgaW5zdGFuY2VvZiAodGhpcyBePSBmdW5jdGlvbigpIHsKKyAgICAgICAgfSkpIHJl
dHVybiAyOyAKKyAgICB9CisgICAgdG9GdXp6MSgpOworfSBjYXRjaChlKSB7CisgICAgcHJpbnRT
dGFjayhlLnN0YWNrKTsKK30KKworLy8gQ2FzZSAyMDogUmVncmVzc2lvbiB0ZXN0IGZyb20gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODY2NAordGVzdElkKys7Cit0
cnkgeworICAgIGZ1bmN0aW9uIHRvRnV6ejIoKSB7CisgICAgICAgIGZvciAodmFyIGNvbmYgPSBu
ZXcgQ29uZmlnT2JqZWN0KHsKKyAgICAgICAgfSkgaW4gc3RyMS5sb2NhbGVDb21wYXJlKSB7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgdG9GdXp6MigpOworfSBjYXRjaChlKSB7CisgICAgcHJpbnRT
dGFjayhlLnN0YWNrKTsKK30KKwogc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207327</attachid>
            <date>2013-07-23 08:02:03 -0700</date>
            <delta_ts>2013-07-24 09:05:56 -0700</delta_ts>
            <desc>patch 4: added some static casts to make the Windows build happy.</desc>
            <filename>bug-118662b.patch</filename>
            <type>text/plain</type>
            <size>198158</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxMy0wNy0yMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Rml4IHByb2JsZW1zIHdpdGggZGl2b3QgYW5kIGxpbmVTdGFydCBtaXNtYXRjaGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjYyLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIxNTI0OTQgYWRkZWQg
dGhlIHJlY29yZGluZyBvZiBsaW5lU3RhcnQgdmFsdWVzIGZvciBkaXZvdCBwb3NpdGlvbnMuCisg
ICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgY29tcHV0YXRpb24gb2YgY29sdW1uIG51bWJl
cnMuIFNpbWlsYXJseSwgaXQgYWxzbworICAgICAgICBhZGRlZCB0aGUgcmVjb3JkaW5nIG9mIGxp
bmUgbnVtYmVycyBmb3IgdGhlIGRpdm90IHBvc2l0aW9ucy4gT25lIHByb2JsZW0KKyAgICAgICAg
d2l0aCB0aGUgYXBwcm9hY2ggdGFrZW4gd2FzIHRoYXQgdGhlIGxpbmUgYW5kIGxpbmVTdGFydCB2
YWx1ZXMgd2VyZQorICAgICAgICByZWNvcmRlZCBpbmRlcGVuZGVudGx5LCBhbmQgaGVuY2Ugd2Vy
ZSBub3QgYWx3YXlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICAgc2FtcGxlZCBhdCB0aGUgc2Ft
ZSBwbGFjZSB0aGF0IHRoZSBkaXZvdCBwb3NpdGlvbiBpcyByZWNvcmRlZC4gVGhpcworICAgICAg
ICByZXN1bHRlZCBpbiBwb3RlbnRpYWwgbWlzbWF0Y2hlcyB0aGF0IGNhdXNlIHNvbWUgYXNzZXJ0
aW9ucyB0byBmYWlsLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgYSBK
U1RleHRQb3NpdGlvbiBhYnN0cmFjdGlvbiB0aGF0IHJlY29yZHMKKyAgICAgICAgdGhlIGRpdm90
IHBvc2l0aW9uLCBsaW5lLCBhbmQgbGluZVN0YXJ0IGFzIGEgc2luZ2xlIHF1YW50aXR5LiBXaGVy
ZXZlcgorICAgICAgICB3ZSByZWNvcmQgdGhlIGRpdm90IHBvc2l0aW9uIGFzIGFuIHVuc2lnbmVk
IGludCBwcmV2aW91c2x5LCB3ZSBub3cgcmVjb3JkCisgICAgICAgIGl0cyBKU1RleHRQb3NpdGlv
biB3aGljaCBjYXB0dXJlcyBhbGwgMyB2YWx1ZXMgaW4gb25lIGdvLiBUaGlzIGVuc3VyZXMKKyAg
ICAgICAgdGhhdCB0aGUgY2FwdHVyZWQgbGluZSBhbmQgbGluZVN0YXJ0IHdpbGwgYWx3YXlzIG1h
dGNoIHRoZSBjYXB0dXJlZCBkaXZvdAorICAgICAgICBwb3NpdGlvbi4KKworICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxW
YXJhcmdzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayk6CisgICAg
ICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5l
U3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHByZXNzaW9uSW5m
byk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5l
IGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OmVtaXRU
aHJvd1JlZmVyZW5jZUVycm9yKToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6TmV3RXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkV2YWxGdW5j
dGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAg
ICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9z
dGZpeE5vZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpEZWxldGVSZXNvbHZlTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OlByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6UHJlZml4Tm9k
ZTo6ZW1pdEJyYWNrZXQpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0RG90KToKKyAg
ICAgICAgKEpTQzo6VW5hcnlPcE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkJp
bmFyeU9wTm9kZTo6ZW1pdFN0cmNhdCk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUJpbmFyeU9w
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZk5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OmVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudCk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFz
c2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlEb3RO
b2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OldpdGhOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpUaHJvd05vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2Yg
cGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIv
QVNUQnVpbGRlci5oOgorICAgICAgICAtIFJlcGxhY2VkIEFTVEJ1aWxkZXI6OlBvc2l0aW9uSW5m
byB3aXRoIEpTVGV4dFBvc2l0aW9uLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpCaW5hcnlP
cEluZm86OkJpbmFyeU9wSW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OkFzc2lnbm1l
bnRJbmZvOjpBc3NpZ25tZW50SW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZVJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCcmFja2V0QWNjZXNz
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG90QWNjZXNzKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVnRXhwKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y3JlYXRlTmV3RXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUFzc2ln
blJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFeHByU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZUxhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
V2l0aFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVRocm93U3Rh
dGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6YXBwZW5kQmluYXJ5RXhwcmVzc2lv
bkluZm8pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphcHBlbmRVbmFyeVRva2VuKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6dW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6YXNzaWdubWVudFN0YWNrQXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWdubWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OnNldEV4Y2VwdGlvbkxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFr
ZURlbGV0ZU5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxs
Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VCaW5hcnlOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlUHJlZml4Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VQ
b3N0Zml4Tm9kZSk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFz
c2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvTGV4
ZXIuY3BwOgorICAgICAgICAoSlNDOjo6OmxleCk6CisgICAgICAgIC0gQWRkZWQgc3VwcG9ydCBm
b3IgY2FwdHVyaW5nIHRoZSBhcHByb3ByaWF0ZSBKU1RleHRQb3NpdGlvbnMgaW5zdGVhZAorICAg
ICAgICAgIG9mIGp1c3QgdGhlIGNoYXJhY3RlciBvZmZzZXQuCisgICAgICAgICogcGFyc2VyL0xl
eGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50UG9zaXRpb24pOgorICAgICAgICAo
SlNDOjo6OmxleEV4cGVjdElkZW50aWZpZXIpOgorICAgICAgICAtIEFkZGVkIHN1cHBvcnQgZm9y
IGNhcHR1cmluZyB0aGUgYXBwcm9wcmlhdGUgSlNUZXh0UG9zaXRpb25zIGluc3RlYWQKKyAgICAg
ICAgICBvZiBqdXN0IHRoZSBjaGFyYWN0ZXIgb2Zmc2V0LgorICAgICAgICAqIHBhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlND
OjpSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpFdmFsRnVuY3Rpb25D
YWxsTm9kZTo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNh
bGxWYWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5vZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUpOgor
ICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6Q2FsbEZ1bmN0aW9uQ2FsbERv
dE5vZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OkFwcGx5RnVu
Y3Rpb25DYWxsRG90Tm9kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjpQb3N0Zml4Tm9k
ZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZSk6
CisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2RlOjpEZWxldGVCcmFja2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5vZGUpOgorICAgICAgICAoSlND
OjpQcmVmaXhOb2RlOjpQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeVJlc29s
dmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5
QnJhY2tldE5vZGU6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2ln
bkJyYWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRv
dE5vZGU6OkFzc2lnbkRvdE5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5RG90Tm9kZTo6
UmVhZE1vZGlmeURvdE5vZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25FcnJvck5vZGU6OkFzc2ln
bkVycm9yTm9kZSk6CisgICAgICAgIChKU0M6OldpdGhOb2RlOjpXaXRoTm9kZSk6CisgICAgICAg
IChKU0M6OkZvckluTm9kZTo6Rm9ySW5Ob2RlKToKKyAgICAgICAgLSBVc2UgSlNUZXh0UG9zaXRp
b24gaW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUgYW5kIGxpbmVTdGFydCBleHBsaWNpdGx5LgorICAg
ICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlN0YXRlbWVudE5vZGU6OnNl
dExvYyk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBs
aW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoK
KyAgICAgICAgKEpTQzo6Tm9kZTo6bGluZU5vKToKKyAgICAgICAgKEpTQzo6Tm9kZTo6c3RhcnRP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpOb2RlOjpsaW5lU3RhcnRPZmZzZXQpOgorICAgICAgICAo
SlNDOjpOb2RlOjpwb3NpdGlvbik6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4cHJlc3Npb25E
YXRhOjpUaHJvd2FibGVFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4
cHJlc3Npb25EYXRhOjpzZXRFeGNlcHRpb25Tb3VyY2VDb2RlKToKKyAgICAgICAgKEpTQzo6VGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGE6OmRpdm90KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhw
cmVzc2lvbkRhdGE6OmRpdm90U3RhcnQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVFeHByZXNz
aW9uRGF0YTo6ZGl2b3RFbmQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVTdWJFeHByZXNzaW9u
RGF0YTo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEpOgorICAgICAgICAoSlNDOjpUaHJvd2Fi
bGVTdWJFeHByZXNzaW9uRGF0YTo6c2V0U3ViZXhwcmVzc2lvbkluZm8pOgorICAgICAgICAoSlND
OjpUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVzc2lvbkRpdm90KToKKyAgICAg
ICAgKEpTQzo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGE6OnN1YmV4cHJlc3Npb25TdGFydCk6
CisgICAgICAgIChKU0M6OlRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhOjpzdWJleHByZXNzaW9u
RW5kKToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YTo6
VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChKU0M6OlRocm93
YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGE6OnNldFN1YmV4cHJlc3Npb25JbmZvKToKKyAg
ICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVz
c2lvbkRpdm90KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9u
RGF0YTo6c3ViZXhwcmVzc2lvblN0YXJ0KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4
ZWRTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVzc2lvbkVuZCk6CisgICAgICAgIC0gVXNlIEpT
VGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGlj
aXRseS4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQYXJz
ZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAtIFVzZSBKU1RleHRQ
b3NpdGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHku
CisgICAgICAgIChKU0M6Ojo6ZGlkRmluaXNoUGFyc2luZyk6CisgICAgICAgIC0gUmVtb3ZlIHNl
dHRpbmcgb2YgbV9sYXN0TGluZSB2YWx1ZS4gV2UgYWx3YXlzIHBhc3MgaW4gdGhlIHZhbHVlIGZy
b20KKyAgICAgICAgICBtX2xhc3RMaW5lIGFueXdheS4gU28sIHRoaXMgYXNzaWdubWVudCBpcyBl
ZmZlY3RpdmVseSBhIG5vcC4KKyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uKToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdCk6CisgICAgICAgIChKU0M6
Ojo6cGFyc2VGb3JTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQnJlYWtTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjo6OnBhcnNlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVRocm93
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVdpdGhTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJsb2Nr
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24pOgor
ICAgICAgICAoSlNDOjpMYWJlbEluZm86OkxhYmVsSW5mbyk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VFeHBy
ZXNzaW9uU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJpbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAo
SlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJpbWFyeUV4cHJl
c3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAg
IChKU0M6Ojo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAtIFVzZSBKU1RleHRQb3Np
dGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHQpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHRFeHBlY3RJZGVudGlmaWVyKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyOjpnZXRUb2tlbik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6dG9rZW5TdGFydFBv
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjp0b2tlbkVuZFBvc2l0aW9uKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjpsYXN0VG9rZW5FbmRQb3NpdGlvbik6CisgICAgICAgIChKU0M6Ojo6
cGFyc2UpOgorICAgICAgICAtIFVzZSBKU1RleHRQb3NpdGlvbiBpbnN0ZWFkIG9mIHBhc3Npbmcg
bGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisgICAgICAgICogcGFyc2VyL1BhcnNlclRv
a2Vucy5oOgorICAgICAgICAoSlNDOjpKU1RleHRQb3NpdGlvbjo6SlNUZXh0UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpKU1RleHRQb3NpdGlvbjo6b3BlcmF0b3IrKToKKyAgICAgICAgKEpTQzo6
SlNUZXh0UG9zaXRpb246Om9wZXJhdG9yLSk6CisgICAgICAgIChKU0M6OkpTVGV4dFBvc2l0aW9u
OjpvcGVyYXRvciBpbnQpOgorICAgICAgICAtIEFkZGVkIEpTVGV4dFBvc2l0aW9uLgorICAgICAg
ICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFr
ZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjptYWtlUHJlZml4Tm9k
ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VQb3N0Zml4Tm9kZSk6CisgICAg
ICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6
U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNr
ZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpj
cmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVSZWdF
eHApOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVOZXdFeHByKToKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQXNzaWduUmVzb2x2ZSk6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZvckluTG9vcCk6CisgICAgICAgIChKU0M6OlN5bnRh
eENoZWNrZXI6OmNyZWF0ZVJldHVyblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6OmNyZWF0ZUJyZWFrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tl
cjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpjcmVhdGVXaXRoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3Jl
YXRlTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVU
aHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmFwcGVuZEJpbmFy
eUV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6b3BlcmF0b3JT
dGFja1BvcCk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2lu
ZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKwogMjAxMy0wNy0xMSAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEF0dGVtcHQgdG8gZml4IHRoZSB3aW5k
b3dzIGJ1aWxkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1MjU4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAxLDkgKzE3MDEsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE5ld0Z1CiAgICAgcmV0dXJuIHIwOwogfQogCi1SZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5j
LCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNhbGxB
cmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMm
IGNhbGxBcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKIHsK
LSAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgbGlu
ZVN0YXJ0KTsKKyAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0LCBmdW5jLCBleHBlY3Rl
ZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwog
fQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgp
CkBAIC0xNzM0LDkgKzE3MzQsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBY3Rp
dmF0aW9uCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5p
bmRleCgpKTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsRXZh
bChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVudHMmIGNhbGxB
cmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxFdmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKQogewotICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsX2V2
YWwsIGRzdCwgZnVuYywgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgbGluZVN0YXJ0KTsKKyAgICByZXR1cm4gZW1p
dENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1bmMsIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIH0KIAogRXhwZWN0ZWRGdW5j
dGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZXhwZWN0ZWRGdW5jdGlvbkZvcklkZW50aWZpZXIoY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKQEAgLTE4MTQsNyArMTgxNCw3IEBAIEV4cGVjdGVk
RnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXQKICAgICByZXR1cm4gZXhwZWN0ZWRGdW5j
dGlvbjsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY29k
ZUlEIG9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVk
RnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxB
cmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCkKIHsKICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF9jYWxsX2V2YWwpOwogICAgIEFTU0VSVChmdW5jLT5yZWZDb3VudCgpKTsKQEAgLTE4MzcsNyAr
MTgzNyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMucHJvZmlsZUhvb2tSZWdpc3Rl
cigpLT5pbmRleCgpKTsKICAgICB9CiAKLSAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAKICAgICBSZWZQdHI8TGFiZWw+
IGRvbmUgPSBuZXdMYWJlbCgpOwogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBlbWl0RXhwZWN0ZWRG
dW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRz
LCBkb25lLmdldCgpKTsKQEAgLTE4NzEsNyArMTg3MSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVu
dHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9maWxlSG9v
a1JlZ2lzdGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KQorUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJn
dW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvZmls
ZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogewog
ICAgIGlmIChtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKICAgICAgICAgZW1pdE1vdmUocHJv
ZmlsZUhvb2tSZWdpc3RlciwgZnVuYyk7CkBAIC0xODc5LDcgKzE4NzksNyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChwcm9maWxlSG9va1JlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAgZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBsaW5l
U3RhcnQpOworICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RF
bmQpOwogCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIGVtaXRPcGNvZGUob3BfY2FsbF92YXJhcmdz
KTsKQEAgLTE5MzEsNyArMTkzMSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0VW5hcnkKICAgICByZXR1cm4gc3JjOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4
cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3Vt
ZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRz
JiBjYWxsQXJndW1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiB7
CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNvdW50KCkpOwogCkBAIC0xOTU1LDcgKzE5NTUsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyArK2kpCiAgICAgICAgIGNhbGxG
cmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwogCi0gICAgZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBsaW5lU3RhcnQpOworICAgIGVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIAogICAgIFJl
ZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CiAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IGVt
aXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOwpAQCAtMjAzNCw3ICsyMDM0LDggQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayhEZQogICAgIGlmICghbV9zaG91bGRFbWl0RGVi
dWdIb29rcykKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCi0gICAgZW1pdEV4cHJlc3Npb25JbmZv
KGNoYXJPZmZzZXQsIDAsIDAsIGZpcnN0TGluZSwgbGluZVN0YXJ0KTsKKyAgICBKU1RleHRQb3Np
dGlvbiBkaXZvdChmaXJzdExpbmUsIGNoYXJPZmZzZXQsIGxpbmVTdGFydCk7CisgICAgZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90LCBkaXZvdCwgZGl2b3QpOwogICAgIHVuc2lnbmVkIGNoYXJQb3Np
dGlvbiA9IGNoYXJPZmZzZXQgLSBtX3Njb3BlTm9kZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsK
ICAgICBlbWl0T3Bjb2RlKG9wX2RlYnVnKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZGVi
dWdIb29rSUQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzUsMjcgKzM3NSwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IG4tPmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dCgqdGhpcywgdHJ1ZVRhcmdldCwgZmFs
c2VUYXJnZXQsIGZhbGxUaHJvdWdoTW9kZSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGVt
aXRFeHByZXNzaW9uSW5mbyhpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNl
dCwgdW5zaWduZWQgbGluZSwgaW50IGxpbmVTdGFydCkKLSAgICAgICAgeworICAgICAgICB2b2lk
IGVtaXRFeHByZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQp
CisgICAgICAgIHsgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQg
Pj0gZGl2b3RTdGFydC5vZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKGRpdm90RW5kLm9mZnNl
dCA+PSBkaXZvdC5vZmZzZXQpOworCiAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0ID0gbV9z
Y29wZU5vZGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBm
aXJzdExpbmUgPSBtX3Njb3BlTm9kZS0+c291cmNlKCkuZmlyc3RMaW5lKCk7CiAKLSAgICAgICAg
ICAgIEFTU0VSVChkaXZvdCA+PSBsaW5lU3RhcnQpOwotICAgICAgICAgICAgQVNTRVJUKGRpdm90
ID49IHNvdXJjZU9mZnNldCk7Ci0gICAgICAgICAgICBkaXZvdCAtPSBzb3VyY2VPZmZzZXQ7Cisg
ICAgICAgICAgICBpbnQgZGl2b3RPZmZzZXQgPSBkaXZvdC5vZmZzZXQgLSBzb3VyY2VPZmZzZXQ7
CisgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBkaXZvdC5vZmZzZXQgLSBkaXZvdFN0YXJ0
Lm9mZnNldDsKKyAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSBkaXZvdEVuZC5vZmZzZXQgLSBk
aXZvdC5vZmZzZXQ7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxpbmUgPSBkaXZvdC5saW5lOwor
ICAgICAgICAgICAgQVNTRVJUKGxpbmUgPj0gZmlyc3RMaW5lKTsKKyAgICAgICAgICAgIGxpbmUg
LT0gZmlyc3RMaW5lOwogCisgICAgICAgICAgICBpbnQgbGluZVN0YXJ0ID0gZGl2b3QubGluZVN0
YXJ0T2Zmc2V0OwogICAgICAgICAgICAgaWYgKGxpbmVTdGFydCA+IHNvdXJjZU9mZnNldCkKICAg
ICAgICAgICAgICAgICBsaW5lU3RhcnQgLT0gc291cmNlT2Zmc2V0OwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IDA7Ci0KLSAgICAgICAgICAgIEFTU0VSVChs
aW5lID49IGZpcnN0TGluZSk7Ci0gICAgICAgICAgICBsaW5lIC09IGZpcnN0TGluZTsKKyAgICAg
ICAgICAgIEFTU0VSVChkaXZvdE9mZnNldCA+PSBsaW5lU3RhcnQpOworICAgICAgICAgICAgdW5z
aWduZWQgY29sdW1uID0gZGl2b3RPZmZzZXQgLSBsaW5lU3RhcnQ7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgICAg
ICAgICAgQVNTRVJUKGRpdm90ID49IGxpbmVTdGFydCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
b2x1bW4gPSBkaXZvdCAtIGxpbmVTdGFydDsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRF
eHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkRXhwcmVz
c2lvbkluZm8oaW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAgICAgICB9CiAKICAgICAgICAgQUxXQVlTX0lOTElO
RSBib29sIGxlZnRIYW5kU2lkZU5lZWRzQ29weShib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGJv
b2wgcmlnaHRJc1B1cmUpCkBAIC00NzEsMTUgKzQ3NiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0UHV0R2V0dGVyU2V0dGVyKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiBnZXR0ZXIsIFJlZ2lzdGVySUQqIHNldHRl
cik7CiAgICAgICAgIAogICAgICAgICBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb25G
b3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9u
LCBDYWxsQXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGZ1bmMsIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0
YXJ0KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklE
KiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBw
cm9maWxlSG9va1JlZ2lzdGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxFdmFs
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVy
SUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJz
dEZyZWVSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExv
YWRWYXJhcmdzKFJlZ2lzdGVySUQqIGFyZ0NvdW50RHN0LCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0
ZXIsIFJlZ2lzdGVySUQqIGFyZ3MpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXR1cm4o
UmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdpc3RlcklE
KiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU5vRHN0T3Aob3BfZW5kLCBzcmMpOyB9CiAKLSAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwg
dW5zaWduZWQgbGluZVN0YXJ0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENvbnN0cnVjdChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxB
cmd1bWVudHMmLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0U3RyY2F0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
LCBpbnQgY291bnQpOwogICAgICAgICB2b2lkIGVtaXRUb1ByaW1pdGl2ZShSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAKQEAgLTU4Myw3ICs1ODgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gKGkuZS4gIk9iamVjdCgpIiBpcyBpZGVudGljYWwgdG8gIm5ldyBPYmpl
Y3QoKSIpLgogICAgICAgICBFeHBlY3RlZEZ1bmN0aW9uIGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25p
cHBldChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24s
IENhbGxBcmd1bWVudHMmLCBMYWJlbCogZG9uZSk7CiAgICAgICAgIAotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5j
LCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGxpbmVTdGFydCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsKE9wY29kZUlELCBS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxB
cmd1bWVudHMmLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAg
ICAgIFJlZ2lzdGVySUQqIG5ld1JlZ2lzdGVyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE1
MjU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIEV4cHJlc3Npb25Ob2Rl
OjplbWl0Qnl0ZWNvZGVJbkNvbmRpCiAKIFJlZ2lzdGVySUQqIFRocm93YWJsZUV4cHJlc3Npb25E
YXRhOjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90
TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRUaHJvd1JlZmVyZW5jZUVycm9yKG1lc3NhZ2UpOwogICAgIHJldHVybiBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CiB9CkBAIC0xNTMsOCArMTUzLDggQEAgUmVnaXN0ZXJJRCogUmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZShCeQogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbCk7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGRp
dm90ID0gbV9zdGFydE9mZnNldCArIG1faWRlbnQubGVuZ3RoKCk7Ci0gICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgbV9pZGVudC5sZW5ndGgoKSwgMCwgbV9kaXZvdExpbmUs
IG1fZGl2b3RMaW5lU3RhcnQpOworICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90ID0gbV9zdGFydCAr
IG1faWRlbnQubGVuZ3RoKCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCwgbV9zdGFydCwgZGl2b3QpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFJlc29sdmUoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CiB9
CiAKQEAgLTMyNiwxMyArMzI2LDEzIEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6
OmVtaXRCeXQKICAgICAgICAgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMoc3Rh
dGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpCiAgICAgICAgICYm
ICFnZW5lcmF0b3Iuc3ltYm9sVGFibGUoKS5zbG93QXJndW1lbnRzKCkpIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50
QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZ2VuZXJhdG9yLnVuY2hlY2tl
ZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCksIHByb3BlcnR5KTsKICAgICB9CiAKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jh
c2UsIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJh
dG9yKSk7CiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9z
dWJzY3JpcHQpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsK
IH0KIApAQCAtMzQ2LDEzICszNDYsMTMgQEAgUmVnaXN0ZXJJRCogRG90QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZAogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZU5vZGUgPSBzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KG1fYmFzZSk7CiAgICAgICAgIGlmICghZ2VuZXJhdG9yLndpbGxSZXNv
bHZlVG9Bcmd1bWVudHMocmVzb2x2ZU5vZGUtPmlkZW50aWZpZXIoKSkpCiAgICAgICAgICAgICBn
b3RvIG5vbkFyZ3VtZW50c1BhdGg7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExp
bmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRzTGVuZ3RoKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpKTsKICAg
ICB9CiAKIG5vbkFyZ3VtZW50c1BhdGg6CiAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2Jhc2UpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwg
ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9pZGVudCk7
CiB9CiAKQEAgLTM3NSw3ICszNzUsNyBAQCBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5CiAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBOb0V4cGVjdGVkRnVuY3Rpb247
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
KTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbk9ySWdub3JlZChkc3QpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRD
b25zdHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0KSwgZnVuYy5n
ZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogaW5saW5lIENhbGxBcmd1bWVudHM6OkNhbGxBcmd1bWVu
dHMoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRz
Tm9kZSkKQEAgLTQxMCw5ICs0MTAsMTAgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5v
ZGU6OmVtaXRCeQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
IC0gZGl2b3RTdGFydE9mZnNldCgpICsgNCwgNCwgMCwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RTdGFydCgpICsgNDsK
KyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCks
IG5ld0Rpdm90KTsKICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBmdW5jLmdldCgpLCBnZW5lcmF0b3IucmVzb2x2ZShnZW5lcmF0
b3IucHJvcGVydHlOYW1lcygpLmV2YWwpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRp
dm90TGluZVN0YXJ0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDIyLDcgKzQyMyw3IEBAIFJlZ2lzdGVy
SUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0
LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90
TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1
bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KQEAgLTQzOCw3ICs0MzksNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZTo6ZW1pCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgLy8gVGhpcyBwYXNzZXMgTm9F
eHBlY3RlZEZ1bmN0aW9uIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlz
IGluIGEKICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qgb25lIG9mIG91
ciBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCkpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQog
CiAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNTdGF0aWMoKSkgewpAQCAtNDQ2LDE2ICs0NDcsMTYg
QEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEdldFN0YXRpY1ZhcihmdW5jLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMu
Z2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3Rh
cnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0
KCkpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGV4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwg
bV9hcmdzKTsKLSAgICBpbnQgaWRlbnRpZmllclN0YXJ0ID0gZGl2b3QoKSAtIGRpdm90U3RhcnRP
ZmZzZXQoKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oaWRlbnRpZmllclN0
YXJ0ICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCwgZGl2b3RMaW5lKCks
IGRpdm90TGluZVN0YXJ0KCkpOworICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2b3RT
dGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKICAgICBnZW5lcmF0b3IuZW1p
dFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBmdW5jLmdldCgp
LCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1
bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90
U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRG
dW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbEJy
YWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2NCwxMSAr
NDY1LDExIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKIHsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0
KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgp
LCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpLCBz
dWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Np
b25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
dW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJn
dW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0
aW9uLmdldCgpKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZv
dExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgp
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbERvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtNDc4LDkgKzQ3OSw5IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwg
c3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNz
aW9uTGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhw
cmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkp
OwogICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgp
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwg
ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgpKSwgZnVuY3Rp
b24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCkBAIC00ODgsNyArNDg5LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaQogICAgIFJlZlB0cjxMYWJlbD4gcmVhbENhbGwgPSBnZW5lcmF0b3Iu
bmV3TGFiZWwoKTsKICAgICBSZWZQdHI8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFz
ZSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3Qo
KSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQoKSwg
c3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNz
aW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmlu
YWxEZXN0aW5hdGlvbk9ySWdub3JlZCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90RnVu
Y3Rpb25DYWxsKGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7CkBAIC01MDAsNyArNTAx
LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShn
ZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAg
Q2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRM
aXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGlu
YXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5k
T2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cChlbmQuZ2V0KCkpOwogCiAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRMaXN0
OwpAQCAtNTA4LDcgKzUwOSw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbWkKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5l
cmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgp
KTsKICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1f
YXJncyk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENh
bGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQu
Z2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MTYsNyAr
NTE3LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgIHsK
ICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGJhc2UuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlv
bk9ySWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgp
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIH0KICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAg
ICAgcmV0dXJuIGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCk7CkBAIC01MzgsNyArNTM5
LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgIFJlZlB0
cjxMYWJlbD4gcmVhbENhbGwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBSZWZQdHI8TGFi
ZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBi
YXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0
KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhw
cmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1
YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVu
ZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBtX2lkZW50
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZCA9IGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90RnVuY3Rpb25BcHBseShmdW5jdGlvbi5nZXQoKSwg
cmVhbENhbGwuZ2V0KCkpOwpAQCAtNTUzLDIwICs1NTQsMjAgQEAgUmVnaXN0ZXJJRCogQXBwbHlG
dW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1
bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRM
aXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmlu
YWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwg
ZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3Jl
ZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1
bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0gbV9h
cmdzLT5tX2xpc3ROb2RlLT5tX25leHQ7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEFy
Z3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9s
ZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChm
aW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhw
ZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgp
LCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0gb2xkTGlzdDsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
YWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFy
Z3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVk
LmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZv
dExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgQVNTRVJUKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1f
bmV4dCk7CkBAIC01ODcsNyArNTg4LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxE
b3ROb2RlOjplbQogICAgICAgICAgICAgd2hpbGUgKChhcmdzID0gYXJncy0+bV9uZXh0KSkKICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYXJncy0+bV9leHByKTsKIAotICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJncyhmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVk
LmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJnc1JlZ2lz
dGVyLmdldCgpLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb2ZpbGVIb29rUmVnaXN0ZXIu
Z2V0KCksIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2
b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRD
YWxsVmFyYXJncyhmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24u
Z2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJnc1JlZ2lzdGVyLmdldCgpLCBnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHByb2ZpbGVIb29rUmVnaXN0ZXIuZ2V0KCksIGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7CiAgICAgfQpAQCAtNTk1LDcgKzU5Niw3IEBAIFJlZ2lzdGVySUQqIEFw
cGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICB7CiAgICAgICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0
TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0
aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRp
dm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGlu
ZVN0YXJ0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIHJldHVybiBmaW5hbERlc3RpbmF0
aW9uT3JJZ25vcmVkLmdldCgpOwpAQCAtNjQzLDcgKzY0NCw3IEBAIFJlZ2lzdGVySUQqIFBvc3Rm
aXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmdldCgpOwog
ICAgIH0KIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3Rh
cnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICBOb25sb2NhbFJlc29sdmVJbmZvIHJlc29sdmVJbmZv
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0
aEJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgcmVzb2x2
ZVJlc3VsdCwgaWRlbnQsIHJlc29sdmVJbmZvKTsKQEAgLTY2NSwxMCArNjY2LDEwIEBAIFJlZ2lz
dGVySUQqIFBvc3RmaXhOb2RlOjplbWl0QnJhY2tldChCeXQKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShiYXNlTm9kZSwgYnJh
Y2tldEFjY2Vzc29yLT5zdWJzY3JpcHRIYXNBc3NpZ25tZW50cygpLCBzdWJzY3JpcHQtPmlzUHVy
ZShnZW5lcmF0b3IpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0
b3IuZW1pdE5vZGUoc3Vic2NyaXB0KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oYnJhY2tldEFjY2Vzc29yLT5kaXZvdCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90U3RhcnRP
ZmZzZXQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdEVuZE9mZnNldCgpLCBicmFja2V0QWNjZXNz
b3ItPmRpdm90TGluZSgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90TGluZVN0YXJ0KCkpOworICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYnJhY2tldEFjY2Vzc29yLT5kaXZvdCgpLCBi
cmFja2V0QWNjZXNzb3ItPmRpdm90U3RhcnQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdEVuZCgp
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwog
ICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOwot
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNl
dCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVy
dHkuZ2V0KCksIHZhbHVlLmdldCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1ZSk7CiB9CkBAIC02ODUsMTAgKzY4NiwxMCBAQCBS
ZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdERvdChCeXRlY29kCiAKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlTm9kZSk7CiAKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBkb3RBY2Nlc3Nv
ci0+ZGl2b3RTdGFydE9mZnNldCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RFbmRPZmZzZXQoKSwgZG90
QWNjZXNzb3ItPmRpdm90TGluZSgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkb3RBY2Nlc3Nvci0+ZGl2b3QoKSwgZG90
QWNjZXNzb3ItPmRpdm90U3RhcnQoKSwgZG90QWNjZXNzb3ItPmRpdm90RW5kKCkpOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGlkZW50KTsKICAgICBSZWdpc3RlcklEKiBvbGRW
YWx1ZSA9IGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCksIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQo
KSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpKTsKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1ZSk7
CiB9CkBAIC03MTcsNyArNzE4LDcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlUmVzb2x2ZU5vZGU6OmVt
aXRCeXRlYwogICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzUmVnaXN0ZXIoKSkKICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBm
YWxzZSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90
U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlQmFzZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIHJlc29sdmVSZXN1
bHQsIG1faWRlbnQpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlKSwgYmFzZSwgbV9pZGVudCk7CiB9CkBAIC03
MjksNyArNzMwLDcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlYwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgIFJlZ2lzdGVySUQqIHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKIAot
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNl
dCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMSk7CiB9CiAKQEAgLTczOSw3ICs3
NDAsNyBAQCBSZWdpc3RlcklEKiBEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoCiB7CiAgICAg
UmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKIAotICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZv
dEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgcjAsIG1faWRlbnQpOwogfQogCkBAIC04MjUsNyArODI2LDcgQEAgUmVn
aXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdFJlc29sdmUoQnl0ZQogICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKICAg
ICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3Rh
cnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBOb25sb2NhbFJlc29sdmVJbmZvIHJlc29s
dmVWZXJpZmllcjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZVdpdGhCYXNlRm9yUHV0KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcERzdC5n
ZXQoKSwgcmVzb2x2ZVJlc3VsdCwgaWRlbnQsIHJlc29sdmVWZXJpZmllcik7CkBAIC04NDUsMTAg
Kzg0NiwxMCBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0QnJhY2tldChCeXRlCiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKHN1YnNjcmlw
dCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGJyYWNrZXRB
Y2Nlc3Nvci0+ZGl2b3QoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGJy
YWNrZXRBY2Nlc3Nvci0+ZGl2b3RFbmRPZmZzZXQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdExp
bmUoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3QoKSwgYnJhY2tldEFjY2Vz
c29yLT5kaXZvdFN0YXJ0KCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKHByb3BEc3QuZ2V0KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB2
YWx1ZSwgbV9vcGVyYXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBk
aXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZh
bChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUpOwogICAgIHJldHVybiBnZW5lcmF0
b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQpAQCAt
ODYzLDEwICs4NjQsMTAgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdERvdChCeXRlY29k
ZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2VO
b2RlKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZG90QWNj
ZXNzb3ItPmRpdm90KCksIGRvdEFjY2Vzc29yLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGRvdEFjY2Vz
c29yLT5kaXZvdEVuZE9mZnNldCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RMaW5lKCksIGRvdEFjY2Vz
c29yLT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RTdGFydCgpLCBkb3RBY2Nl
c3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQocHJvcERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgaWRlbnQpOwogICAgIGVtaXRJbmNP
ckRlYyhnZW5lcmF0b3IsIHZhbHVlLCBtX29wZXJhdG9yKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQo
KSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVlKTsKICAgICByZXR1cm4g
Z2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsK
IH0KQEAgLTg5Miw3ICs4OTMsNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0CiBSZWdpc3RlcklEKiBVbmFyeU9wTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWdpc3RlcklEKiBz
cmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKHN0YXJ0T2Zmc2V0KCksIDAsIDAsIGxpbmVObygpLCBsaW5lU3RhcnRPZmZzZXQo
KSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhwb3NpdGlvbigpLCBwb3NpdGlv
bigpLCBwb3NpdGlvbigpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wY29k
ZUlEKCksIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHNyYyk7CiB9CiAKQEAgLTEw
MjQsOCArMTAyNSw3IEBAIFJlZ2lzdGVySUQqIEJpbmFyeU9wTm9kZTo6ZW1pdFN0cmNhdChCeXQK
ICAgICAvLyBDZXJ0YWluIHJlYWQtbW9kaWZ5IG5vZGVzIHJlcXVpcmUgZXhwcmVzc2lvbiBpbmZv
IHRvIGJlIGVtaXR0ZWQgKmFmdGVyKiBtX3JpZ2h0IGhhcyBiZWVuIGdlbmVyYXRlZC4KICAgICAv
LyBJZiB0aGlzIGlzIHJlcXVpcmVkIHRoZSBub2RlIGlzIHBhc3NlZCBhcyAnZW1pdEV4cHJlc3Np
b25JbmZvRm9yTWUnOyBkbyBzbyBub3cuCiAgICAgaWYgKGVtaXRFeHByZXNzaW9uSW5mb0Zvck1l
KQotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGVtaXRFeHByZXNzaW9uSW5m
b0Zvck1lLT5kaXZvdCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RTdGFydE9mZnNl
dCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RFbmRPZmZzZXQoKSwgZW1pdEV4cHJl
c3Npb25JbmZvRm9yTWUtPmRpdm90TGluZSgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2
b3RMaW5lU3RhcnQoKSk7Ci0KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhl
bWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3QoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUt
PmRpdm90U3RhcnQoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90RW5kKCkpOwogICAg
IC8vIElmIHRoZXJlIGlzIGFuIGFzc2lnbm1lbnQgY29udmVydCB0aGUgbGhzIG5vdy4gIFRoaXMg
d2lsbCBhbHNvIGNvcHkgbGhzIHRvCiAgICAgLy8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB3ZSBh
bGxvY2F0ZWQgZm9yIGl0LgogICAgIGlmIChsaHMpCkBAIC0xMTY0LDcgKzExNjQsNyBAQCBSZWdp
c3RlcklEKiBUaHJvd2FibGVCaW5hcnlPcE5vZGU6OmVtaXRCCiB7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9leHByMSwg
bV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAg
UmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyKTsKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChvcGNvZGVJRCgpLCBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyLCBP
cGVyYW5kVHlwZXMobV9leHByMS0+cmVzdWx0RGVzY3JpcHRvcigpLCBtX2V4cHIyLT5yZXN1bHRE
ZXNjcmlwdG9yKCkpKTsKIH0KIApAQCAtMTE3NiwxMyArMTE3NiwxMyBAQCBSZWdpc3RlcklEKiBJ
bnN0YW5jZU9mTm9kZTo6ZW1pdEJ5dGVjb2RlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRzdFJl
ZyA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSk7CiAgICAgUmVm
UHRyPExhYmVsPiB0YXJnZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVu
ZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0Q2hlY2tIYXNJbnN0YW5jZShkc3RSZWcuZ2V0KCksIHNyYzEuZ2V0
KCksIHNyYzIuZ2V0KCksIHRhcmdldC5nZXQoKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwg
ZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQocHJvdG90eXBlLmdldCgpLCBzcmMyLmdldCgpLCBnZW5lcmF0b3Iudm0o
KS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBk
aXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lzdGVy
SUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SW5zdGFuY2VPZihkc3RSZWcuZ2V0KCksIHNyYzEu
Z2V0KCksIHByb3RvdHlwZS5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0YXJnZXQu
Z2V0KCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMjkzLDggKzEyOTMsNyBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBSZWdpc3RlcklEKiBlbWl0UmVhCiAgICAgLy8gQ2VydGFpbiByZWFkLW1v
ZGlmeSBub2RlcyByZXF1aXJlIGV4cHJlc3Npb24gaW5mbyB0byBiZSBlbWl0dGVkICphZnRlciog
bV9yaWdodCBoYXMgYmVlbiBnZW5lcmF0ZWQuCiAgICAgLy8gSWYgdGhpcyBpcyByZXF1aXJlZCB0
aGUgbm9kZSBpcyBwYXNzZWQgYXMgJ2VtaXRFeHByZXNzaW9uSW5mb0Zvck1lJzsgZG8gc28gbm93
LgogICAgIGlmIChlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZSkKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3QoKSwgZW1pdEV4
cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90U3RhcnRPZmZzZXQoKSwgZW1pdEV4cHJlc3Npb25JbmZv
Rm9yTWUtPmRpdm90RW5kT2Zmc2V0KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdExp
bmUoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90TGluZVN0YXJ0KCkpOwotCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUt
PmRpdm90KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdFN0YXJ0KCksIGVtaXRFeHBy
ZXNzaW9uSW5mb0Zvck1lLT5kaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRC
aW5hcnlPcChvcGNvZGVJRCwgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CiB9CiAKQEAgLTEzMjgs
NyArMTMyNyw4IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKICAg
ICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBk
aXZvdFN0YXJ0T2Zmc2V0KCkgKyBtX2lkZW50Lmxlbmd0aCgpLCBtX2lkZW50Lmxlbmd0aCgpLCAw
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgSlNUZXh0UG9zaXRpb24gbmV3
RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50Lmxlbmd0aCgpOworICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwogICAg
IE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBzcmMxLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50LCByZXNv
bHZlVmVyaWZpZXIpOwogICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNz
aWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5n
ZXQoKSksIHNyYzEuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1
bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0aGlz
KTsKQEAgLTEzNjMsNyArMTM2Myw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjpl
bWl0Qnl0ZWMKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAg
ICAgIGRzdCA9IDA7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
ZHN0LCBtX3JpZ2h0KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCks
IGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90
TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRU
b0Jhc2UoYmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUsIHJlc29sdmVWZXJpZmllcik7CiB9CiAK
QEAgLTEzNzQsNyArMTM3NCw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkRvdE5vZGU6OmVtaXRCeXRl
Y29kZSgKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZv
ckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQ
dXJlKGdlbmVyYXRvcikpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRv
ci5kZXN0aW5hdGlvbkZvckFzc2lnblJlc3VsdChkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJlc3Vs
dCA9IGdlbmVyYXRvci5lbWl0Tm9kZSh2YWx1ZS5nZXQoKSwgbV9yaWdodCk7Ci0gICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90
RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9y
ZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIGZvcndhcmRSZXN1bHQpOwogICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZvcndhcmRS
ZXN1bHQpOwpAQCAtMTM4NiwxMSArMTM4NiwxMSBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5RG90
Tm9kZTo6ZW1pdEJ5dGVjCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMs
IG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgp
LCBzdWJleHByZXNzaW9uRW5kT2Zmc2V0KCksIHN1YmV4cHJlc3Npb25MaW5lKCksIHN1YmV4cHJl
c3Npb25MaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJl
eHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQo
KSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CiAg
ICAgUmVnaXN0ZXJJRCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdl
bmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZh
bHVlLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6
dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQs
IHVwZGF0ZWRWYWx1ZSk7CiB9CiAKQEAgLTE0MTAsNyArMTQxMCw3IEBAIFJlZ2lzdGVySUQqIEFz
c2lnbkJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUg
PSBnZW5lcmF0b3IuZGVzdGluYXRpb25Gb3JBc3NpZ25SZXN1bHQoZHN0KTsKICAgICBSZWdpc3Rl
cklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUodmFsdWUuZ2V0KCksIG1fcmlnaHQpOwog
Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zm
c2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2Vu
ZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGlu
YXRpb25JZk5lZWRlZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwg
Zm9yd2FyZFJlc3VsdCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgZm9yd2FyZFJlc3VsdCk7CkBAIC0xNDIzLDExICsxNDIzLDExIEBAIFJlZ2lz
dGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fc3Vi
c2NyaXB0SGFzQXNzaWdubWVudHMgfHwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlw
dC0+aXNQdXJlKGdlbmVyYXRvcikgJiYgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRI
YW5kU2lkZShtX3N1YnNjcmlwdCwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5pc1B1
cmUoZ2VuZXJhdG9yKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4
cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVzc2lv
bkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0YXJ0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90
KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRv
ciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdl
dCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93
blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAKLSAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRP
ZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB1cGRh
dGVkVmFsdWUpOwogCiAgICAgcmV0dXJuIHVwZGF0ZWRWYWx1ZTsKQEAgLTE3MzksNyArMTczOSw3
IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICAgICAgICAg
IE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAgICAgICAgICAgUmVnaXN0
ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCwgcmVzb2x2ZVZlcmlmaWVyKTsKIAot
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFy
dCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0
VG9CYXNlKGJhc2UsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIHJlc29sdmVWZXJpZmllcik7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleHBlY3RlZFN1YnNjcmlwdCA9IGdlbmVyYXRvci5l
bWl0TW92ZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzUz
LDcgKzE3NTMsNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwogICAgICAg
ICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2Uo
KSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5k
aXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGFzc2lnbk5vZGUtPmRpdm90
RW5kT2Zmc2V0KCksIGFzc2lnbk5vZGUtPmRpdm90TGluZSgpLCBhc3NpZ25Ob2RlLT5kaXZvdExp
bmVTdGFydCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25O
b2RlLT5kaXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90
RW5kKCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHByb3Bl
cnR5TmFtZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fbGV4cHItPmlzQnJhY2tl
dEFjY2Vzc29yTm9kZSgpKTsKQEAgLTE3NjMsNyArMTc2Myw3IEBAIHZvaWQgRm9ySW5Ob2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+YmFzZSgpKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogc3Vic2NyaXB0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPnN1YnNjcmlw
dCgpKTsKICAgICAgICAgCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYXNz
aWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydE9mZnNldCgpLCBhc3NpZ25O
b2RlLT5kaXZvdEVuZE9mZnNldCgpLCBhc3NpZ25Ob2RlLT5kaXZvdExpbmUoKSwgYXNzaWduTm9k
ZS0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgpLCBhc3NpZ25O
b2RlLT5kaXZvdEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdl
dCgpLCBzdWJzY3JpcHQsIHByb3BlcnR5TmFtZSk7CiAgICAgfSAgIAogCkBAIC0xODU5LDcgKzE4
NTksNyBAQCB2b2lkIFdpdGhOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lCiAgICAgZ2Vu
ZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fZXhwcmVzc2lvbkxlbmd0aCwg
MCwgbV9kaXZvdExpbmUsIG1fZGl2b3RMaW5lU3RhcnQpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8obV9kaXZvdCwgbV9kaXZvdCAtIG1fZXhwcmVzc2lvbkxlbmd0aCwgbV9kaXZv
dCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXNoV2l0aFNjb3BlKHNjb3BlLmdldCgpKTsKICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQ
b3BTY29wZSgpOwpAQCAtMjA2Myw3ICsyMDYzLDcgQEAgdm9pZCBUaHJvd05vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbgogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQo
KSkKICAgICAgICAgZHN0ID0gMDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhwciA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUo
KSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0VGhy
b3coZXhwci5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCShyZXZpc2lvbiAxNTI1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjAgKzMzLDEyIEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQVNUQnVpbGRlciB7Ci0gICAgc3RydWN0IFBvc2l0aW9u
SW5mbyB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zOwotICAgICAgICB1bnNpZ25lZCBsaW5l
OwotICAgICAgICB1bnNpZ25lZCBsaW5lU3RhcnRQb3M7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBC
aW5hcnlPcEluZm8gewogICAgICAgICBCaW5hcnlPcEluZm8oKSB7fQotICAgICAgICBCaW5hcnlP
cEluZm8oaW50IG90aGVyU3RhcnQsIGludCBvdGhlckRpdm90LCBpbnQgb3RoZXJFbmQsIHVuc2ln
bmVkIG90aGVyRGl2b3RMaW5lLCB1bnNpZ25lZCBvdGhlckRpdm90TGluZVN0YXJ0LCBib29sIHJo
c0hhc0Fzc2lnbm1lbnQpCisgICAgICAgIEJpbmFyeU9wSW5mbyhjb25zdCBKU1RleHRQb3NpdGlv
biYgb3RoZXJTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIG90aGVyRGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBvdGhlckVuZCwgYm9vbCByaHNIYXNBc3NpZ25tZW50KQogICAgICAgICAg
ICAgOiBzdGFydChvdGhlclN0YXJ0KQogICAgICAgICAgICAgLCBkaXZvdChvdGhlckRpdm90KQog
ICAgICAgICAgICAgLCBlbmQob3RoZXJFbmQpCi0gICAgICAgICAgICAsIGRpdm90TGluZShvdGhl
ckRpdm90TGluZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQob3RoZXJEaXZvdExpbmVT
dGFydCkKICAgICAgICAgICAgICwgaGFzQXNzaWdubWVudChyaHNIYXNBc3NpZ25tZW50KQogICAg
ICAgICB7CiAgICAgICAgIH0KQEAgLTU0LDM5ICs0NiwzMSBAQCBjbGFzcyBBU1RCdWlsZGVyIHsK
ICAgICAgICAgICAgIDogc3RhcnQobGhzLnN0YXJ0KQogICAgICAgICAgICAgLCBkaXZvdChyaHMu
c3RhcnQpCiAgICAgICAgICAgICAsIGVuZChyaHMuZW5kKQotICAgICAgICAgICAgLCBkaXZvdExp
bmUocmhzLmRpdm90TGluZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQocmhzLmRpdm90
TGluZVN0YXJ0KQogICAgICAgICAgICAgLCBoYXNBc3NpZ25tZW50KGxocy5oYXNBc3NpZ25tZW50
IHx8IHJocy5oYXNBc3NpZ25tZW50KQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgaW50
IHN0YXJ0OwotICAgICAgICBpbnQgZGl2b3Q7Ci0gICAgICAgIGludCBlbmQ7Ci0gICAgICAgIHVu
c2lnbmVkIGRpdm90TGluZTsKLSAgICAgICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQ7CisgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBkaXZvdDsK
KyAgICAgICAgSlNUZXh0UG9zaXRpb24gZW5kOwogICAgICAgICBib29sIGhhc0Fzc2lnbm1lbnQ7
CiAgICAgfTsKICAgICAKICAgICAKICAgICBzdHJ1Y3QgQXNzaWdubWVudEluZm8gewogICAgICAg
ICBBc3NpZ25tZW50SW5mbygpIHt9Ci0gICAgICAgIEFzc2lnbm1lbnRJbmZvKEV4cHJlc3Npb25O
b2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQsIGludCBpbml0QXNzaWdubWVudHMsIE9wZXJh
dG9yIG9wKQorICAgICAgICBBc3NpZ25tZW50SW5mbyhFeHByZXNzaW9uTm9kZSogbm9kZSwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGlu
dCBpbml0QXNzaWdubWVudHMsIE9wZXJhdG9yIG9wKQogICAgICAgICAgICAgOiBtX25vZGUobm9k
ZSkKICAgICAgICAgICAgICwgbV9zdGFydChzdGFydCkKICAgICAgICAgICAgICwgbV9kaXZvdChk
aXZvdCkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmUoZGl2b3RMaW5lKQotICAgICAgICAgICAg
LCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0YXJ0KQogICAgICAgICAgICAgLCBtX2luaXRB
c3NpZ25tZW50cyhpbml0QXNzaWdubWVudHMpCiAgICAgICAgICAgICAsIG1fb3Aob3ApCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90ID49IG1fZGl2b3RMaW5lU3RhcnQpOwot
ICAgICAgICAgICAgQVNTRVJUKG1fc3RhcnQgPj0gbV9kaXZvdExpbmVTdGFydCk7CisgICAgICAg
ICAgICBBU1NFUlQobV9kaXZvdC5vZmZzZXQgPj0gbV9kaXZvdC5saW5lU3RhcnRPZmZzZXQpOwor
ICAgICAgICAgICAgQVNTRVJUKG1fc3RhcnQub2Zmc2V0ID49IG1fc3RhcnQubGluZVN0YXJ0T2Zm
c2V0KTsKICAgICAgICAgfQogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9ub2RlOwotICAgICAg
ICB1bnNpZ25lZCBtX3N0YXJ0OwotICAgICAgICB1bnNpZ25lZCBtX2Rpdm90OwotICAgICAgICB1
bnNpZ25lZCBtX2Rpdm90TGluZTsKLSAgICAgICAgdW5zaWduZWQgbV9kaXZvdExpbmVTdGFydDsK
KyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9zdGFydDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24g
bV9kaXZvdDsKICAgICAgICAgaW50IG1faW5pdEFzc2lnbm1lbnRzOwogICAgICAgICBPcGVyYXRv
ciBtX29wOwogICAgIH07CkBAIC0xMzEsNyArMTE1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdCBpbnQgIERvbnRCdWlsZFN0cmluZ3MgPSAwOwogCiAgICAgRXhwcmVzc2lvbk5vZGUqIG1h
a2VCaW5hcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCB0b2tlbiwgc3RkOjpwYWly
PEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2Rl
KiwgQmluYXJ5T3BJbmZvPik7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVu
dHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIHVuc2lnbmVkIGRpdm90LCBpbnQgZW5kLCB1bnNpZ25l
ZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICBFeHByZXNzaW9uTm9k
ZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
bk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdEVuZCk7CiAKICAgICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VF
bGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV92bSkgSlNDOjpTb3VyY2VFbGVtZW50cygpOyB9CiAK
QEAgLTE0NCwxMSArMTI4LDExIEBAIHB1YmxpYzoKIAogICAgIENvbW1hTm9kZSogY3JlYXRlQ29t
bWFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBs
aHMsIEV4cHJlc3Npb25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV92bSkgQ29tbWFOb2RlKGxv
Y2F0aW9uLCBsaHMsIHJocyk7IH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3Is
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOwotICAgIEV4cHJlc3Npb25Ob2Rl
KiBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSos
IE9wZXJhdG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VQ
b3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJh
dG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1
bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25O
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBPcGVyYXRv
ciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIGxlZnRIYXNBc3NpZ25tZW50cywgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CisgICAgRXhw
cmVzc2lvbk5vZGUqIG1ha2VQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKKyAgICBF
eHByZXNzaW9uTm9kZSogbWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKICAg
ICBFeHByZXNzaW9uTm9kZSogbWFrZVR5cGVPZk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqKTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZURlbGV0ZU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBpbnQgc3RhcnQsIGludCBkaXZv
dCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7
IAorICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKICAgICBF
eHByZXNzaW9uTm9kZSogbWFrZU5lZ2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqKTsKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdHdpc2VOb3ROb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VNdWx0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSog
bGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwpA
QCAtMTgxLDExICsxNjUsMTEgQEAgcHVibGljOgogICAgICAgICB1c2VzVGhpcygpOwogICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBUaGlzTm9kZShsb2NhdGlvbik7CiAgICAgfQotICAgIEV4cHJl
c3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRl
UmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYg
KG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCiAgICAgICAgICAgICB1
c2VzQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFJlc29sdmVOb2RlKGxv
Y2F0aW9uLCAqaWRlbnQsIHN0YXJ0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgcmV0dXJuIG5ldyAobV92bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sICppZGVudCwgc3RhcnQp
OwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKSB7IHJldHVybiBuZXcgKG1fdm0pIE9iamVjdExpdGVy
YWxOb2RlKGxvY2F0aW9uKTsgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRl
cmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5TGlzdE5vZGUqIHBy
b3BlcnRpZXMpIHsgcmV0dXJuIG5ldyAobV92bSkgT2JqZWN0TGl0ZXJhbE5vZGUobG9jYXRpb24s
IHByb3BlcnRpZXMpOyB9CkBAIC0yMjgsNDEgKzIxMiw0MiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIE51bGxOb2RlKGxvY2F0aW9uKTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlQnJhY2tldEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5LCBib29s
IHByb3BlcnR5SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogcHJvcGVydHksIGJvb2wg
cHJvcGVydHlIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAg
ewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBCcmFja2V0
QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlIYXNBc3NpZ25t
ZW50cyk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwg
ZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG90QWNjZXNzKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVy
KiBwcm9wZXJ0eSwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0
ZURvdEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciogcHJvcGVydHksIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZW5kKQogICAgIHsKICAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX3Zt
KSBEb3RBY2Nlc3Nvck5vZGUobG9jYXRpb24sIGJhc2UsICpwcm9wZXJ0eSk7Ci0gICAgICAgIHNl
dEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQs
IGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlUmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdzLCBpbnQgc3Rh
cnQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncywgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYgKFlhcnI6OmNoZWNr
U3ludGF4KHBhdHRlcm4uc3RyaW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IFJlZ0V4cE5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIFJlZ0V4cE5vZGUobG9jYXRpb24sIHBhdHRl
cm4sIGZsYWdzKTsKICAgICAgICAgaW50IHNpemUgPSBwYXR0ZXJuLmxlbmd0aCgpICsgMjsgLy8g
KyAyIGZvciB0aGUgdHdvIC8ncwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBz
dGFydCwgc3RhcnQgKyBzaXplLCBzdGFydCArIHNpemUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3Rh
cnQpOworICAgICAgICBKU1RleHRQb3NpdGlvbiBlbmQgPSBzdGFydCArIHNpemU7CisgICAgICAg
IHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAgIHJl
dHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1
bWVudHNOb2RlKiBhcmd1bWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNp
Z25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1f
dm0pIE5ld0V4cHJOb2RlKGxvY2F0aW9uLCBleHByLCBhcmd1bWVudHMpOwotICAgICAgICBzZXRF
eGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZv
dExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBk
aXZvdCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lv
bk5vZGUqIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3
RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
KQogICAgIHsKICAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIE5ld0V4cHJO
b2RlKGxvY2F0aW9uLCBleHByKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwg
c3RhcnQsIGVuZCwgZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0
RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogCkBAIC0yNzEsMTIgKzI1NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBsaHMs
IHJocyk7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29sdmUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNp
Z25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmhzLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIGlmIChyaHMtPmlzRnVuY0V4cHJOb2Rl
KCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihyaHMpLT5ib2R5KCkt
PnNldEluZmVycmVkTmFtZShpZGVudCk7CiAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBub2Rl
ID0gbmV3IChtX3ZtKSBBc3NpZ25SZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIHJocyk7Ci0g
ICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKQEAg
LTM1NSwxMCArMzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0K
IAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUV4cHJTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVu
ZCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFeHByU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGludCBlbmQpCiAgICAgewogICAgICAgICBFeHByU3RhdGVtZW50Tm9kZSog
cmVzdWx0ID0gbmV3IChtX3ZtKSBFeHByU3RhdGVtZW50Tm9kZShsb2NhdGlvbiwgZXhwcik7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBs
b2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5s
aW5lLCBlbmQsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTM3NiwxOSArMzYxLDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVG
b3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGl0
ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQg
ZW5kLCBpbnQgaW5pdFN0YXJ0LCBpbnQgaW5pdEVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3Rh
dGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIs
IEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGVuZCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQog
ICAgIHsKLSAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZSht
X3ZtLCBsb2NhdGlvbiwgKmlkZW50LCBpbml0aWFsaXplciwgaXRlciwgc3RhdGVtZW50cywgaW5p
dFN0YXJ0LCBpbml0U3RhcnQgLSBzdGFydCwgaW5pdEVuZCAtIGluaXRTdGFydCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX3Zt
KSBGb3JJbk5vZGUobV92bSwgbG9jYXRpb24sICppZGVudCwgaW5pdGlhbGl6ZXIsIGl0ZXIsIHN0
YXRlbWVudHMsIGluaXRTdGFydCwgc3RhcnQsIGluaXRFbmQpOwogICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5s
aW5lU3RhcnRPZmZzZXQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0
YXJ0LCBkaXZvdCArIDEsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAg
IHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGRpdm90ICsgMSwgZW5kKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVG
b3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGxocywgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGlu
dCBlU3RhcnQsIGludCBlRGl2b3QsIGludCBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0
ZW1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZURpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5k
KQogICAgIHsKICAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9k
ZShsb2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9m
ZnNldCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRGl2
b3QsIGVFbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzZXRFeGNlcHRp
b25Mb2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZURpdm90LCBlRW5kKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKQEAgLTQwNSw0MyArMzkwLDQzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5T
dGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHJlc3Npb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5k
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBT
dGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb24sIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIFJl
dHVybk5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgUmV0dXJuTm9kZShsb2NhdGlvbiwgZXhwcmVz
c2lvbik7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5k
LCBlRW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFy
dCwgZW5kLCBlbmQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5lLCBlbmQubGlu
ZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBp
bnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSwgdW5zaWduZWQgZW5kTGluZVN0YXJ0KQorICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKICAgICB7CiAgICAgICAgIEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBC
cmVha05vZGUobV92bSwgbG9jYXRpb24pOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihy
ZXN1bHQsIGVTdGFydCwgZUVuZCwgZUVuZCwgZW5kTGluZSwgZW5kTGluZVN0YXJ0KTsKLSAgICAg
ICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNl
dCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRp
b24ocmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFy
dC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50
IGVuZExpbmUsIHVuc2lnbmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcg
KG1fdm0pIEJyZWFrTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKLSAgICAgICAgc2V0RXhjZXB0aW9u
TG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQsIGVuZExpbmUsIGVuZExpbmVTdGFy
dCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24u
c3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIHVu
c2lnbmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBD
b250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQ29udGludWVOb2RlKG1fdm0sIGxvY2F0
aW9uKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQs
IGVFbmQsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFy
dE9mZnNldCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVu
ZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0
YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwg
aW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25l
ZCBlbmRMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRl
bnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVu
ZCkKICAgICB7CiAgICAgICAgIENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBDb250
aW51ZU5vZGUobG9jYXRpb24sICppZGVudCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9u
KHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kLCBlbmRMaW5lLCBlbmRMaW5lU3RhcnQpOwotICAg
ICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zm
c2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2Nh
dGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0LmxpbmUsIGVuZC5saW5lLCBzdGFydC5vZmZzZXQsIHN0YXJ0LmxpbmVTdGFydE9mZnNldCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00NzYsMjYgKzQ2MSwyNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlTGFiZWxTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZv
dExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVMYWJlbFN0YXRlbWVudChjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgU3Rh
dGVtZW50Tm9kZSogc3RhdGVtZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBMYWJlbE5vZGUqIHJlc3VsdCA9
IG5ldyAobV92bSkgTGFiZWxOb2RlKGxvY2F0aW9uLCAqaWRlbnQsIHN0YXRlbWVudCk7Ci0gICAg
ICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kLCBkaXZvdExp
bmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0
LCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVu
dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgc3RhcnRMaW5lLCB1bnNp
Z25lZCBlbmRMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0
YXRlbWVudCwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQsIHVuc2ln
bmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgZW5kTGluZSkKICAgICB7CiAgICAgICAgIHVzZXNXaXRo
KCk7Ci0gICAgICAgIFdpdGhOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFdpdGhOb2RlKGxvY2F0
aW9uLCBleHByLCBzdGF0ZW1lbnQsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCwgZW5k
IC0gc3RhcnQpOworICAgICAgICBXaXRoTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBXaXRoTm9k
ZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAg
cmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwg
bG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
ICAgIAogICAgIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRocm93U3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3Rh
cnQsIGludCBlbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRo
cm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBleHByLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBlbmQpCiAgICAgewogICAgICAgICBUaHJvd05vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkg
VGhyb3dOb2RlKGxvY2F0aW9uLCBleHByKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRM
aW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zm
c2V0KTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBl
bmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQp
OworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtNTQ2LDEwICs1MzEsMTAg
QEAgcHVibGljOgogCiAgICAgaW50IGV2YWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENv
dW50OyB9CiAKLSAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKGludCYgb3BlcmFu
ZFN0YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiBjdXJyZW50LCBpbnQgZXhwclN0YXJ0LCBpbnQg
bGhzLCBpbnQgcmhzLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
LCBib29sIGhhc0Fzc2lnbm1lbnRzKQorICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lvbklu
Zm8oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIGN1cnJlbnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBleHByU3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBsaHMsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiByaHMsIGJvb2wgaGFzQXNzaWdubWVudHMpCiAgICAgewogICAg
ICAgICBvcGVyYW5kU3RhY2tEZXB0aCsrOwotICAgICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoY3VycmVudCwgQmluYXJ5T3BJbmZvKGV4cHJTdGFydCwgbGhz
LCByaHMsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQsIGhhc0Fzc2lnbm1lbnRzKSkpOworICAg
ICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VycmVudCwg
QmluYXJ5T3BJbmZvKGV4cHJTdGFydCwgbGhzLCByaHMsIGhhc0Fzc2lnbm1lbnRzKSkpOwogICAg
IH0KIAogICAgIC8vIExvZ2ljIHRvIGhhbmRsZSBkYXRhc3RydWN0dXJlcyB1c2VkIGR1cmluZyBw
YXJzaW5nIG9mIGJpbmFyeSBleHByZXNzaW9ucwpAQCAtNTg2LDExICs1NzEsMTAgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIGFwcGVuZFVu
YXJ5VG9rZW4oaW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0eXBlLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICB2b2lkIGFw
cGVuZFVuYXJ5VG9rZW4oaW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0eXBlLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgewogICAgICAgICB0b2tlblN0YWNrRGVwdGgrKzsKLSAg
ICAgICAgUG9zaXRpb25JbmZvIHBvc2l0aW9uID0geyBzdGFydCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCB9OwotICAgICAgICBtX3VuYXJ5VG9rZW5TdGFjay5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIodHlwZSwgcG9zaXRpb24pKTsKKyAgICAgICAgbV91bmFyeVRva2VuU3RhY2suYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHR5cGUsIHN0YXJ0KSk7CiAgICAgfQogCiAgICAgaW50IHVuYXJ5VG9rZW5T
dGFja0xhc3RUeXBlKGludCYpCkBAIC01OTgsMzQgKzU4MiwyOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3VuYXJ5VG9rZW5TdGFjay5sYXN0KCkuZmlyc3Q7CiAgICAgfQogICAgIAotICAg
IHVuc2lnbmVkIHVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydChpbnQmKQorICAgIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiB1bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQoaW50JikKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX3VuYXJ5VG9rZW5TdGFjay5sYXN0KCkuc2Vjb25kLnN0YXJ0UG9zOworICAgICAg
ICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgpLnNlY29uZDsKICAgICB9CiAgICAgCi0g
ICAgdW5zaWduZWQgdW5hcnlUb2tlblN0YWNrTGFzdExpbmVTdGFydFBvc2l0aW9uKGludCYpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgpLnNlY29uZC5saW5l
U3RhcnRQb3M7Ci0gICAgfQotCiAgICAgdm9pZCB1bmFyeVRva2VuU3RhY2tSZW1vdmVMYXN0KGlu
dCYgdG9rZW5TdGFja0RlcHRoKQogICAgIHsKICAgICAgICAgdG9rZW5TdGFja0RlcHRoLS07CiAg
ICAgICAgIG1fdW5hcnlUb2tlblN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBhc3NpZ25tZW50U3RhY2tBcHBlbmQoaW50JiBhc3NpZ25tZW50U3RhY2tEZXB0aCwgRXhw
cmVzc2lvbk5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCwgaW50IGFzc2lnbm1lbnRDb3Vu
dCwgT3BlcmF0b3Igb3ApCisgICAgdm9pZCBhc3NpZ25tZW50U3RhY2tBcHBlbmQoaW50JiBhc3Np
Z25tZW50U3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBpbnQgYXNzaWdubWVudENv
dW50LCBPcGVyYXRvciBvcCkKICAgICB7CiAgICAgICAgIGFzc2lnbm1lbnRTdGFja0RlcHRoKys7
Ci0gICAgICAgIEFTU0VSVChzdGFydCA+PSBkaXZvdExpbmVTdGFydCk7Ci0gICAgICAgIEFTU0VS
VChkaXZvdCA+PSBkaXZvdExpbmVTdGFydCk7Ci0gICAgICAgIG1fYXNzaWdubWVudEluZm9TdGFj
ay5hcHBlbmQoQXNzaWdubWVudEluZm8obm9kZSwgc3RhcnQsIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0LCBhc3NpZ25tZW50Q291bnQsIG9wKSk7CisgICAgICAgIEFTU0VSVChzdGFy
dC5vZmZzZXQgPj0gc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKGRpdm90
Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBtX2Fzc2lnbm1lbnRJ
bmZvU3RhY2suYXBwZW5kKEFzc2lnbm1lbnRJbmZvKG5vZGUsIHN0YXJ0LCBkaXZvdCwgYXNzaWdu
bWVudENvdW50LCBvcCkpOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBc3Np
Z25tZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCYgYXNzaWdubWVudFN0
YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBpbml0aWFsQXNzaWdubWVudENvdW50
LCBpbnQgY3VycmVudEFzc2lnbm1lbnRDb3VudCwgaW50IGxhc3RUb2tlbkVuZCkKKyAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlQXNzaWdubWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBpbnQmIGFzc2lnbm1lbnRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogcmhzLCBpbnQg
aW5pdGlhbEFzc2lnbm1lbnRDb3VudCwgaW50IGN1cnJlbnRBc3NpZ25tZW50Q291bnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBsYXN0VG9rZW5FbmQpCiAgICAgewogICAgICAgICBBc3NpZ25tZW50
SW5mbyYgaW5mbyA9IG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCk7Ci0gICAgICAgIEV4cHJl
c3Npb25Ob2RlKiByZXN1bHQgPSBtYWtlQXNzaWduTm9kZShsb2NhdGlvbiwgaW5mby5tX25vZGUs
IGluZm8ubV9vcCwgcmhzLCBpbmZvLm1faW5pdEFzc2lnbm1lbnRzICE9IGluaXRpYWxBc3NpZ25t
ZW50Q291bnQsIGluZm8ubV9pbml0QXNzaWdubWVudHMgIT0gY3VycmVudEFzc2lnbm1lbnRDb3Vu
dCwgaW5mby5tX3N0YXJ0LCBpbmZvLm1fZGl2b3QgKyAxLCBsYXN0VG9rZW5FbmQsIGluZm8ubV9k
aXZvdExpbmUsIGluZm8ubV9kaXZvdExpbmVTdGFydCk7CisgICAgICAgIEV4cHJlc3Npb25Ob2Rl
KiByZXN1bHQgPSBtYWtlQXNzaWduTm9kZShsb2NhdGlvbiwgaW5mby5tX25vZGUsIGluZm8ubV9v
cCwgcmhzLCBpbmZvLm1faW5pdEFzc2lnbm1lbnRzICE9IGluaXRpYWxBc3NpZ25tZW50Q291bnQs
IGluZm8ubV9pbml0QXNzaWdubWVudHMgIT0gY3VycmVudEFzc2lnbm1lbnRDb3VudCwgaW5mby5t
X3N0YXJ0LCBpbmZvLm1fZGl2b3QgKyAxLCBsYXN0VG9rZW5FbmQpOwogICAgICAgICBtX2Fzc2ln
bm1lbnRJbmZvU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICBhc3NpZ25tZW50U3RhY2tEZXB0
aC0tOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjUxLDEwICs2MzAsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgIH07CiAKLSAgICBzdGF0aWMgdm9p
ZCBzZXRFeGNlcHRpb25Mb2NhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgc3RhdGljIHZvaWQgc2V0RXhjZXB0
aW9uTG9jYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChkaXZvdCA+PSBk
aXZvdExpbmVTdGFydCk7Ci0gICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQp
OworICAgICAgICBub2RlLT5zZXRFeGNlcHRpb25Tb3VyY2VDb2RlKGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCk7CiAgICAgfQogCiAgICAgdm9pZCBpbmNDb25zdGFudHMoKSB7IG1fc2NvcGUu
bV9udW1Db25zdGFudHMrKzsgfQpAQCAtNjc4LDcgKzY1Nyw3IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPEJpbmFyeU9wZXJhbmQsIDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVy
YW5kU3RhY2s7CiAgICAgVmVjdG9yPEFzc2lnbm1lbnRJbmZvLCAxMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fYXNzaWdubWVudEluZm9TdGFjazsKICAgICBWZWN0b3I8cGFpcjxpbnQsIGludD4s
IDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVyYXRvclN0YWNrOwotICAgIFZl
Y3RvcjxwYWlyPGludCwgUG9zaXRpb25JbmZvPiwgMTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X3VuYXJ5VG9rZW5TdGFjazsKKyAgICBWZWN0b3I8cGFpcjxpbnQsIEpTVGV4dFBvc2l0aW9uPiwg
MTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3VuYXJ5VG9rZW5TdGFjazsKICAgICBpbnQgbV9l
dmFsQ291bnQ7CiB9OwogCkBAIC02OTEsMjEgKzY3MCwyMSBAQCBFeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZVR5cGVPZk5vCiAgICAgcmV0dXJuIG5ldyAobV92bSkgVHlwZU9mVmFsdWVO
b2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKCFl
eHByLT5pc0xvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVZhbHVl
Tm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgaWYgKGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewog
ICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4o
ZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0
aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBk
aXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRp
dm90LCBzdGFydCwgZW5kKTsKICAgICB9CiAgICAgaWYgKGV4cHItPmlzQnJhY2tldEFjY2Vzc29y
Tm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBzdGF0aWNf
Y2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIERlbGV0ZUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQt
PnN1YnNjcmlwdCgpLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGlu
ZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVCcmFj
a2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwg
ZGl2b3QsIHN0YXJ0LCBlbmQpOwogICAgIH0KICAgICBBU1NFUlQoZXhwci0+aXNEb3RBY2Nlc3Nv
ck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nl
c3Nvck5vZGUqPihleHByKTsKLSAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVEb3ROb2RlKGxv
Y2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0
YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgcmV0dXJu
IG5ldyAobV92bSkgRGVsZXRlRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRl
bnRpZmllcigpLCBkaXZvdCwgc3RhcnQsIGVuZCk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlTmVnYXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbikKQEAgLTgyMiwzNiArODAxLDM2IEBAIEV4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlQml0WE9yTm8KICAgICByZXR1cm4gbmV3IChtX3ZtKSBCaXRYT3JOb2Rl
KGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUq
IGFyZ3MsIGludCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKIHsKLSAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5l
U3RhcnQpOworICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0
KTsKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV92
bSkgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGxvY2F0aW9uLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2
b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAg
ICAgICByZXR1cm4gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1
bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMtPmlz
UmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19j
YXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIgPSByZXNvbHZlLT5pZGVudGlmaWVyKCk7CiAgICAgICAgIGlmIChpZGVudGlmaWVyID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwpIHsKICAgICAgICAgICAgIHVzZXNFdmFsKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlv
biwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEV2YWxGdW5jdGlv
bkNhbGxOb2RlKGxvY2F0aW9uLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbFJlc29sdmVO
b2RlKGxvY2F0aW9uLCBpZGVudGlmaWVyLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5k
IC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3
IChtX3ZtKSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnRpZmllciwgYXJn
cywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICB9CiAgICAgaWYgKGZ1bmMtPmlz
QnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJy
YWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4oZnVuYyk7Ci0gICAgICAg
IEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQo
KSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKLSAgICAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tl
dC0+ZGl2b3QoKSwgYnJhY2tldC0+ZGl2b3RFbmRPZmZzZXQoKSwgYnJhY2tldC0+ZGl2b3RMaW5l
KCksIGJyYWNrZXQtPmRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICBGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUobG9jYXRp
b24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCk7CisgICAgICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZv
KGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90RW5kKCkub2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgfQogICAgIEFTU0VSVChmdW5jLT5pc0RvdEFjY2Vzc29yTm9kZSgp
KTsKICAgICBEb3RBY2Nlc3Nvck5vZGUqIGRvdCA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9k
ZSo+KGZ1bmMpOwogICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUqIG5vZGU7CiAgICAgaWYgKGRvdC0+
aWRlbnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmNhbGwpCi0gICAgICAgIG5vZGUg
PSBuZXcgKG1fdm0pIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2Uo
KSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBk
aXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIG5vZGUgPSBuZXcgKG1f
dm0pIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5p
ZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgZWxz
ZSBpZiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXBwbHkpCi0g
ICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlv
biwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBz
dGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBu
b2RlID0gbmV3IChtX3ZtKSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+
YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKTsKICAgICBlbHNlCi0gICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbERv
dE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KTsKLSAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZGl2
b3RFbmRPZmZzZXQoKSwgZG90LT5kaXZvdExpbmUoKSwgZG90LT5kaXZvdExpbmVTdGFydCgpKTsK
KyAgICAgICAgbm9kZSA9IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwg
ZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwg
ZGl2b3RFbmQpOworICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwg
ZG90LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTg5OSwx
MyArODc4LDEzIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQmluYXJ5Tm8KIAog
ICAgIGNhc2UgSU5TVEFOQ0VPRjogewogICAgICAgICBJbnN0YW5jZU9mTm9kZSogbm9kZSA9IG5l
dyAobV92bSkgSW5zdGFuY2VPZk5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCBy
aHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihu
b2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLmVuZCwg
cmhzLnNlY29uZC5kaXZvdExpbmUsIHJocy5zZWNvbmQuZGl2b3RMaW5lU3RhcnQpOworICAgICAg
ICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25k
LnN0YXJ0LCByaHMuc2Vjb25kLmVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAog
ICAgIGNhc2UgSU5UT0tFTjogewogICAgICAgICBJbk5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIElu
Tm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdu
bWVudCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3Rh
cnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuZW5kLCByaHMuc2Vjb25kLmRpdm90TGlu
ZSwgcmhzLnNlY29uZC5kaXZvdExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKG5vZGUsIGxocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQu
ZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC05MzcsMTAgKzkxNiwxMCBA
QCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciBv
cCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJvb2wgbG9jSGFzQXNzaWdubWVudHMsIGJvb2wgZXhw
ckhhc0Fzc2lnbm1lbnRzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciBvcCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJv
b2wgbG9jSGFzQXNzaWdubWVudHMsIGJvb2wgZXhwckhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCkKIHsKICAgICBpZiAoIWxvYy0+aXNMb2NhdGlvbigpKQotICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25FcnJvck5vZGUobG9jYXRpb24sIGRpdm90LCBkaXZv
dCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkVycm9yTm9kZShsb2NhdGlvbiwgZGl2b3QsIHN0
YXJ0LCBlbmQpOwogCiAgICAgaWYgKGxvYy0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJl
c29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihsb2MpOwpAQCAt
OTQ4LDE3ICs5MjcsMTcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25O
bwogICAgICAgICAgICAgaWYgKGV4cHItPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZXhwciktPmJvZHkoKS0+c2V0SW5mZXJyZWRO
YW1lKHJlc29sdmUtPmlkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9k
ZSogbm9kZSA9IG5ldyAobV92bSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUt
PmlkZW50aWZpZXIoKSwgZXhwcik7Ci0gICAgICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihu
b2RlLCBzdGFydCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAg
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIo
KSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVu
ZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIG5l
dyAobV92bSkgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlm
aWVyKCksIG9wLCBleHByLCBleHBySGFzQXNzaWdubWVudHMsIGRpdm90LCBzdGFydCwgZW5kKTsK
ICAgICB9CiAgICAgaWYgKGxvYy0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAg
QnJhY2tldEFjY2Vzc29yTm9kZSogYnJhY2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nv
ck5vZGUqPihsb2MpOwogICAgICAgICBpZiAob3AgPT0gT3BFcXVhbCkKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgKG1fdm0pIEFzc2lnbkJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNl
KCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhh
c0Fzc2lnbm1lbnRzLCBicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdCgpIC0gc3RhcnQs
IGVuZCAtIGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90TGluZSgpLCBicmFja2V0LT5k
aXZvdExpbmVTdGFydCgpKTsKLSAgICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKiBub2RlID0g
bmV3IChtX3ZtKSBSZWFkTW9kaWZ5QnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2Uo
KSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIG9wLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhw
ckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90
TGluZSwgZGl2b3RMaW5lU3RhcnQpOwotICAgICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5m
byhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdEVuZE9mZnNldCgpLCBicmFja2V0LT5k
aXZvdExpbmUoKSwgYnJhY2tldC0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChtX3ZtKSBBc3NpZ25CcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgp
LCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNB
c3NpZ25tZW50cywgYnJhY2tldC0+ZGl2b3QoKSwgc3RhcnQsIGVuZCk7CisgICAgICAgIFJlYWRN
b2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgUmVhZE1vZGlmeUJyYWNrZXROb2Rl
KGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhw
ciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIHN0YXJ0LCBl
bmQpOworICAgICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgp
LCBicmFja2V0LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAg
IH0KICAgICBBU1NFUlQobG9jLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKQEAgLTk2NiwyMiArOTQ1
LDIyIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm8KICAgICBpZiAo
b3AgPT0gT3BFcXVhbCkgewogICAgICAgICBpZiAoZXhwci0+aXNGdW5jRXhwck5vZGUoKSkKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGV4cHIpLT5ib2R5KCktPnNldElu
ZmVycmVkTmFtZShkb3QtPmlkZW50aWZpZXIoKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0p
IEFzc2lnbkRvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwg
ZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3QoKSAtIHN0
YXJ0LCBlbmQgLSBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3RMaW5lKCksIGRvdC0+ZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkRvdE5vZGUobG9jYXRp
b24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZXhwciwgZXhwckhhc0Fzc2lnbm1l
bnRzLCBkb3QtPmRpdm90KCksIHN0YXJ0LCBlbmQpOwogICAgIH0KIAotICAgIFJlYWRNb2RpZnlE
b3ROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90
LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRz
LCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5l
U3RhcnQpOwotICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90
LT5kaXZvdEVuZE9mZnNldCgpLCBkb3QtPmRpdm90TGluZSgpLCBkb3QtPmRpdm90TGluZVN0YXJ0
KCkpOworICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5
RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhw
ciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgc3RhcnQsIGVuZCk7CisgICAgbm9kZS0+c2V0
U3ViZXhwcmVzc2lvbkluZm8oZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90RW5kKCkub2Zmc2V0KTsK
ICAgICByZXR1cm4gbm9kZTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQ
cmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKIHsKLSAgICByZXR1cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9uLCBl
eHByLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9u
LCBleHByLCBvcCwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3Qs
IGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgcmV0dXJuIG5ldyAobV92bSkgUG9zdGZp
eE5vZGUobG9jYXRpb24sIGV4cHIsIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2
b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBuZXcgKG1fdm0pIFBv
c3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcCwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gMTUy
NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMDYsOCArMTMwNiwxMCBAQCBib29sIExleGVyPFQ+OjpuZXh0VG9rZW5Jc0Nv
bG9uKCkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1KU1Rva2VuVHlwZSBMZXhlcjxUPjo6
bGV4KEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5Mb2NhdGlvbiogdG9rZW5Mb2NhdGlv
biwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9vbCBzdHJpY3RNb2RlKQorSlNUb2tlblR5cGUgTGV4
ZXI8VD46OmxleChKU1Rva2VuKiB0b2tlblJlY29yZCwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9v
bCBzdHJpY3RNb2RlKQogeworICAgIEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEgPSAmdG9rZW5SZWNv
cmQtPm1fZGF0YTsKKyAgICBKU1Rva2VuTG9jYXRpb24qIHRva2VuTG9jYXRpb24gPSAmdG9rZW5S
ZWNvcmQtPm1fbG9jYXRpb247CiAgICAgQVNTRVJUKCFtX2Vycm9yKTsKICAgICBBU1NFUlQobV9i
dWZmZXI4LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKG1fYnVmZmVyMTYuaXNFbXB0eSgpKTsKQEAg
LTEzMjUsNiArMTMyNyw3IEBAIHN0YXJ0OgogICAgIHRva2VuTG9jYXRpb24tPnN0YXJ0T2Zmc2V0
ID0gY3VycmVudE9mZnNldCgpOwogICAgIHRva2VuTG9jYXRpb24tPnNvdXJjZU9mZnNldCA9IG1f
c291cmNlT2Zmc2V0OwogICAgIEFTU0VSVChjdXJyZW50T2Zmc2V0KCkgPj0gY3VycmVudExpbmVT
dGFydE9mZnNldCgpKTsKKyAgICB0b2tlblJlY29yZC0+bV9zdGFydFBvc2l0aW9uID0gY3VycmVu
dFBvc2l0aW9uKCk7CiAKICAgICBDaGFyYWN0ZXJUeXBlIHR5cGU7CiAgICAgaWYgKExJS0VMWShp
c0xhdGluMShtX2N1cnJlbnQpKSkKQEAgLTE3MDAsNiArMTcwMyw3IEBAIHJldHVyblRva2VuOgog
ICAgIHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICB0b2tl
bkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAg
ICAgQVNTRVJUKHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5l
U3RhcnRPZmZzZXQpOworICAgIHRva2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBv
c2l0aW9uKCk7CiAgICAgbV9sYXN0VG9rZW4gPSB0b2tlbjsKICAgICByZXR1cm4gdG9rZW47CiAK
QEAgLTE3MDksNiArMTcxMyw3IEBAIHJldHVybkVycm9yOgogICAgIHRva2VuTG9jYXRpb24tPmVu
ZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRP
ZmZzZXQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAgICAgQVNTRVJUKHRva2VuTG9jYXRp
b24tPmVuZE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOworICAgIHRv
a2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgUkVMRUFT
RV9BU1NFUlQodG9rZW4gJiBFcnJvclRva2VuRmxhZyk7CiAgICAgcmV0dXJuIHRva2VuOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMTUyNTgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NiwxMSArODYsMTUgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNSZXBhcnNpbmcoKSB7IG1f
aXNSZXBhcnNpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBpc1JlcGFyc2luZygpIGNvbnN0IHsgcmV0
dXJuIG1faXNSZXBhcnNpbmc7IH0KIAotICAgIEpTVG9rZW5UeXBlIGxleChKU1Rva2VuRGF0YSos
IEpTVG9rZW5Mb2NhdGlvbiosIHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOworICAgIEpTVG9r
ZW5UeXBlIGxleChKU1Rva2VuKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgYm9v
bCBuZXh0VG9rZW5Jc0NvbG9uKCk7CiAgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVy
biBtX2xpbmVOdW1iZXI7IH0KICAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gb2Zmc2V0RnJvbVNvdXJjZVB0cihtX2NvZGUpOyB9CiAgICAgQUxXQVlT
X0lOTElORSBpbnQgY3VycmVudExpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNl
dEZyb21Tb3VyY2VQdHIobV9saW5lU3RhcnQpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1RleHRQ
b3NpdGlvbiBjdXJyZW50UG9zaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
VGV4dFBvc2l0aW9uKG1fbGluZU51bWJlciwgY3VycmVudE9mZnNldCgpLCBjdXJyZW50TGluZVN0
YXJ0T2Zmc2V0KCkpOworICAgIH0KICAgICB2b2lkIHNldExhc3RMaW5lTnVtYmVyKGludCBsYXN0
TGluZU51bWJlcikgeyBtX2xhc3RMaW5lTnVtYmVyID0gbGFzdExpbmVOdW1iZXI7IH0KICAgICBp
bnQgbGFzdExpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xhc3RMaW5lTnVtYmVyOyB9CiAg
ICAgYm9vbCBwcmV2VGVybWluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGVybWluYXRvcjsgfQpA
QCAtMTI1LDcgKzEyOSw3IEBAIHB1YmxpYzoKIAogICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQ
cm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5wcm92aWRlcigpOyB9CiAKLSAgICBK
U1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNUb2tlbkxvY2F0
aW9uKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CisgICAgSlNUb2tlblR5cGUgbGV4RXhw
ZWN0SWRlbnRpZmllcihKU1Rva2VuKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCByZWNvcmQ4KGludCk7CkBAIC0zMzEsMTIgKzMzNSwxNSBAQCBBTFdB
WVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4RXhwZWN0SWRl
bnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuTG9jYXRpb24qIHRva2VuTG9j
YXRpb24sIHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3RyaWN0TW9kZSkKK0FMV0FZU19JTkxJ
TkUgSlNUb2tlblR5cGUgTGV4ZXI8VD46OmxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbiogdG9r
ZW5SZWNvcmQsIHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3RyaWN0TW9kZSkKIHsKKyAgICBK
U1Rva2VuRGF0YSogdG9rZW5EYXRhID0gJnRva2VuUmVjb3JkLT5tX2RhdGE7CisgICAgSlNUb2tl
bkxvY2F0aW9uKiB0b2tlbkxvY2F0aW9uID0gJnRva2VuUmVjb3JkLT5tX2xvY2F0aW9uOwogICAg
IEFTU0VSVCgobGV4ZXJGbGFncyAmIExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzKSk7CiAg
ICAgY29uc3QgVCogc3RhcnQgPSBtX2NvZGU7CiAgICAgY29uc3QgVCogcHRyID0gc3RhcnQ7CiAg
ICAgY29uc3QgVCogZW5kID0gbV9jb2RlRW5kOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24gPSBjdXJyZW50UG9zaXRpb24oKTsKICAgICBpZiAocHRyID49IGVuZCkgewogICAgICAg
ICBBU1NFUlQocHRyID09IGVuZCk7CiAgICAgICAgIGdvdG8gc2xvd0Nhc2U7CkBAIC0zNzIsMTEg
KzM3OSwxMyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFCiAgICAg
dG9rZW5Mb2NhdGlvbi0+ZW5kT2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwogICAgIHRva2VuTG9j
YXRpb24tPnNvdXJjZU9mZnNldCA9IG1fc291cmNlT2Zmc2V0OwogICAgIEFTU0VSVCh0b2tlbkxv
Y2F0aW9uLT5zdGFydE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOwor
ICAgIHRva2VuUmVjb3JkLT5tX3N0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIHRv
a2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgbV9sYXN0
VG9rZW4gPSBJREVOVDsKICAgICByZXR1cm4gSURFTlQ7CiAgICAgCiBzbG93Q2FzZToKLSAgICBy
ZXR1cm4gbGV4KHRva2VuRGF0YSwgdG9rZW5Mb2NhdGlvbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9k
ZSk7CisgICAgcmV0dXJuIGxleCh0b2tlblJlY29yZCwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE1MjU4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw5ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBO
b2RlOjpOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCi0gICAgICAgIDogbV9s
aW5lTnVtYmVyKGxvY2F0aW9uLmxpbmUpCi0gICAgICAgICwgbV9zdGFydE9mZnNldChsb2NhdGlv
bi5zdGFydE9mZnNldCkKLSAgICAgICAgLCBtX2xpbmVTdGFydE9mZnNldChsb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQpCisgICAgICAgIDogbV9wb3NpdGlvbihsb2NhdGlvbi5saW5lLCBsb2NhdGlv
bi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KQogICAgIHsKICAgICAgICAg
QVNTRVJUKGxvY2F0aW9uLnN0YXJ0T2Zmc2V0ID49IGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7
CiAgICAgfQpAQCAtMTAyLDE0ICsxMDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAg
IH0KIAotaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitpbmxpbmUg
UmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9pZGVudChpZGVu
dCkKLSAgICAgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQotICAgICAgICAsIG1fZGl2
b3RMaW5lKGRpdm90TGluZSkKLSAgICAgICAgLCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0
YXJ0KQorICAgICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgewotICAgICAgICBBU1NFUlQobV9z
dGFydE9mZnNldCA+PSBtX2Rpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQVNTRVJUKG1fc3RhcnQu
b2Zmc2V0ID49IG1fc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICB9CiAKICAgICBpbmxpbmUg
RWxlbWVudE5vZGU6OkVsZW1lbnROb2RlKGludCBlbGlzaW9uLCBFeHByZXNzaW9uTm9kZSogbm9k
ZSkKQEAgLTI0Niw4MSArMjQyLDgxIEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUo
Y29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEV2YWxGdW5jdGlvbkNhbGxOb2Rl
OjpFdmFsRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBB
cmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OkV2YWxGdW5jdGlvbkNh
bGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50c05vZGUqIGFy
Z3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHBy
ZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShk
aXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkK
KyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpCiAgICAgICAgICwgbV9hcmdzKGFyZ3MpCiAgICAgewotICAgICAgICBBU1NFUlQoZGl2
b3QgPj0gZGl2b3RMaW5lU3RhcnQpOwogICAgIH0KIAotICAgIGlubGluZSBGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZ1bmN0
aW9uQ2FsbFZhbHVlTm9kZTo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmdz
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisg
ICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAg
IHsKKyAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdFN0YXJ0Lm9mZnNldCk7CiAg
ICAgfQogCi0gICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxv
Y2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAg
ICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKICAgICB9
CiAKLSAgICBpbmxpbmUgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNr
ZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBi
YXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNp
Z25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5z
aWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9k
ZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAg
ICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxlU3Vi
RXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1f
YmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKICAgICAgICAgLCBt
X2FyZ3MoYXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNO
b2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkK
KyAgICBpbmxpbmUgRnVuY3Rpb25DYWxsRG90Tm9kZTo6RnVuY3Rpb25DYWxsRG90Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikK
LSAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2Fi
bGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAg
ICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX2Fy
Z3MoYXJncykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENhbGxGdW5jdGlvbkNhbGxEb3RO
b2RlOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3Vt
ZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0
YXJ0KQotICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50
LCBhcmdzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OkNhbGxGdW5jdGlv
bkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICA6IEZ1bmN0aW9u
Q2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50LCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFy
dCwgZGl2b3RFbmQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBcHBseUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90
TGluZVN0YXJ0KQotICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2Us
IGlkZW50LCBhcmdzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBk
aXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpBcHBs
eUZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2Rl
KiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCisgICAgICAgIDog
RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFBvc3RmaXhO
b2RlOjpQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQpCi0gICAgICAgIDogUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwg
b3BlciwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5l
U3RhcnQpCisgICAgaW5saW5lIFBvc3RmaXhOb2RlOjpQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3Blciwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICA6IFByZWZpeE5v
ZGUobG9jYXRpb24sIGV4cHIsIG9wZXIsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAg
ICB7CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZl
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAg
aW5saW5lIERlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0
aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93
YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAg
LCBtX2lkZW50KGlkZW50KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRGVsZXRlQnJhY2tl
dE5vZGU6OkRlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRGVsZXRl
QnJhY2tldE5vZGU6OkRlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0
YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lv
bk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3Qs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAg
ICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5k
KQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlw
dCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2Us
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBk
aXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRGVsZXRlRG90Tm9kZTo6RGVsZXRlRG90Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVu
ZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZv
dCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAg
ICwgbV9pZGVudChpZGVudCkKICAgICB7CkBAIC0zNTAsOSArMzQ2LDkgQEAgaW5saW5lIFJlc29s
dmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
UHJlZml4Tm9kZTo6UHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwg
dW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIFByZWZpeE5vZGU6OlByZWZpeE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIs
IE9wZXJhdG9yIG9wZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAg
ICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVQcmVm
aXhlZFN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZVByZWZpeGVkU3ViRXhw
cmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fZXhw
cihleHByKQogICAgICAgICAsIG1fb3BlcmF0b3Iob3BlcikKICAgICB7CkBAIC01MzYsMTYgKzUz
MiwxNCBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewog
ICAgIH0KIAotICAgIGlubGluZSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OlJlYWRNb2RpZnlSZXNv
bHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCkKKyAgICBpbmxpbmUgUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90
TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZv
dFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1f
cmlnaHQocmlnaHQpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcGVyKQogICAgICAgICAsIG1fcmln
aHRIYXNBc3NpZ25tZW50cyhyaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgQVNTRVJUKGRpdm90IC0gc3Rh
cnRPZmZzZXQgPj0gZGl2b3RMaW5lU3RhcnQpOwogICAgIH0KIAogICAgIGlubGluZSBBc3NpZ25S
ZXNvbHZlTm9kZTo6QXNzaWduUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCkKQEAg
LTU1NSw5ICs1NDksMTAgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBK
UwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmVhZE1vZGlmeUJyYWNrZXROb2RlOjpSZWFk
TW9kaWZ5QnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9wZXIs
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZv
dExpbmVTdGFydCkKKworICAgIGlubGluZSBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OlJlYWRNb2Rp
ZnlCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3Igb3BlciwgRXhw
cmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkK
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVT
dWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShk
aXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAg
ICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQpCkBA
IC01NjcsOSArNTYyLDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBK
UwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduQnJhY2tldE5vZGU6OkFzc2lnbkJy
YWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5l
IEFzc2lnbkJyYWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNj
cmlwdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRz
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2
b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0
YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAg
ICAgICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQp
CkBAIC01NzgsOSArNTczLDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25z
dCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduRG90Tm9kZTo6QXNzaWduRG90
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgQXNzaWduRG90Tm9kZTo6QXNzaWduRG90Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDog
RXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3Rh
cnQpCisgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kKQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1faWRlbnQoaWRl
bnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKQEAgLTU4OCw5ICs1ODMsOSBAQCBpbmxpbmUg
UmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlu
bGluZSBSZWFkTW9kaWZ5RG90Tm9kZTo6UmVhZE1vZGlmeURvdE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQpCisgICAgaW5saW5lIFJlYWRNb2RpZnlEb3ROb2RlOjpSZWFkTW9kaWZ5RG90Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhy
b3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lv
bkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fYmFzZShiYXNl
KQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKQEAg
LTU5OSw5ICs1OTQsOSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpT
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBc3NpZ25FcnJvck5vZGU6OkFzc2lnbkVycm9y
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgQXNzaWduRXJyb3JOb2RlOjpB
c3NpZ25FcnJvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxv
Y2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICB7
CiAgICAgfQogCkBAIC03MDYsMTMgKzcwMSwxMSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29s
dmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBXaXRoTm9kZTo6V2l0
aE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdWludDMyX3QgZGl2b3QsIHVuc2lnbmVkIGRp
dm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5n
dGgpCisgICAgaW5saW5lIFdpdGhOb2RlOjpXaXRoTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgp
CiAgICAgICAgIDogU3RhdGVtZW50Tm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2V4cHIoZXhw
cikKICAgICAgICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgICAgICwgbV9kaXZvdChk
aXZvdCkKLSAgICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExpbmUpCi0gICAgICAgICwgbV9kaXZv
dExpbmVTdGFydChkaXZvdExpbmVTdGFydCkKICAgICAgICAgLCBtX2V4cHJlc3Npb25MZW5ndGgo
ZXhwcmVzc2lvbkxlbmd0aCkKICAgICB7CiAgICAgfQpAQCAtODIyLDE3ICs4MTUsMTcgQEAgaW5s
aW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgRm9ySW5Ob2RlOjpGb3JJbk5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGlu
LCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCB1bnNpZ25l
ZCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBGb3JJbk5vZGU6OkZvcklu
Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBT
dGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCkKICAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1faW5p
dCgwKQotICAgICAgICAsIG1fbGV4cHIobmV3ICh2bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlk
ZW50LCBkaXZvdCAtIHN0YXJ0T2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KSkKKyAg
ICAgICAgLCBtX2xleHByKG5ldyAodm0pIFJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwgZGl2
b3RTdGFydCkpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9zdGF0ZW1lbnQo
c3RhdGVtZW50KQogICAgIHsKICAgICAgICAgaWYgKGluKSB7CiAgICAgICAgICAgICBBc3NpZ25S
ZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAodm0pIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCBp
ZGVudCwgaW4pOwotICAgICAgICAgICAgQVNTRVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsK
LSAgICAgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90IC0g
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zm
c2V0KTsKKyAgICAgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRp
dm90U3RhcnQsIGRpdm90RW5kKTsKICAgICAgICAgICAgIG1faW5pdCA9IG5vZGU7CiAgICAgICAg
IH0KICAgICAgICAgLy8gZm9yKCB2YXIgZm9vID0gYmFyIGluIGJheiApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEx
ICs1NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIFN0YXRlbWVudE5vZGU6OnNldExvYyh1
bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCBsaW5lU3RhcnRPZmZzZXQpCiB7Ci0gICAgbV9saW5lTnVtYmVyID0gZmlyc3RMaW5lOwogICAg
IG1fbGFzdExpbmUgPSBsYXN0TGluZTsKLSAgICBtX3N0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7
Ci0gICAgbV9saW5lU3RhcnRPZmZzZXQgPSBsaW5lU3RhcnRPZmZzZXQ7Ci0gICAgQVNTRVJUKG1f
c3RhcnRPZmZzZXQgPj0gbV9saW5lU3RhcnRPZmZzZXQpOworICAgIG1fcG9zaXRpb24gPSBKU1Rl
eHRQb3NpdGlvbihmaXJzdExpbmUsIHN0YXJ0T2Zmc2V0LCBsaW5lU3RhcnRPZmZzZXQpOworICAg
IEFTU0VSVChtX3Bvc2l0aW9uLm9mZnNldCA+PSBtX3Bvc2l0aW9uLmxpbmVTdGFydE9mZnNldCk7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTb3VyY2VFbGVtZW50cyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTQgKzEyOSwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGUoKSB7IH0KIAot
ICAgICAgICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Ci0gICAg
ICAgIGludCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KLSAg
ICAgICAgaW50IGxpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVN0YXJ0T2Zm
c2V0OyB9CisgICAgICAgIGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLmxp
bmU7IH0KKyAgICAgICAgaW50IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bi5vZmZzZXQ7IH0KKyAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb24ubGluZVN0YXJ0T2Zmc2V0OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgaW50IG1fbGluZU51bWJlcjsKLSAgICAgICAgaW50IG1fc3RhcnRPZmZz
ZXQ7Ci0gICAgICAgIGludCBtX2xpbmVTdGFydE9mZnNldDsKKyAgICAgICAgSlNUZXh0UG9zaXRp
b24gbV9wb3NpdGlvbjsKICAgICB9OwogCiAgICAgY2xhc3MgRXhwcmVzc2lvbk5vZGUgOiBwdWJs
aWMgTm9kZSB7CkBAIC0yNTQsNDkgKzI1Myw0MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgogICAgICAgICBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YSgpCi0gICAgICAgICAgICA6IG1fZGl2b3Qoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdFN0YXJ0T2Zmc2V0KHN0YXRpY19jYXN0
PHVpbnQxNl90PigtMSkpCi0gICAgICAgICAgICAsIG1fZGl2b3RFbmRPZmZzZXQoc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmUoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmVTdGFydChzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oLTEpKQorICAgICAgICAgICAgOiBtX2Rpdm90KC0xLCAtMSwgLTEpCisgICAg
ICAgICAgICAsIG1fZGl2b3RTdGFydCgtMSwgLTEsIC0xKQorICAgICAgICAgICAgLCBtX2Rpdm90
RW5kKC0xLCAtMSwgLTEpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEodW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpCisgICAgICAgIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZW5kKQogICAgICAgICAgICAgOiBtX2Rpdm90KGRpdm90KQotICAgICAgICAg
ICAgLCBtX2Rpdm90U3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1fZGl2
b3RFbmRPZmZzZXQoZW5kT2Zmc2V0KQotICAgICAgICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExp
bmUpCi0gICAgICAgICAgICAsIG1fZGl2b3RMaW5lU3RhcnQoZGl2b3RMaW5lU3RhcnQpCisgICAg
ICAgICAgICAsIG1fZGl2b3RTdGFydChzdGFydCkKKyAgICAgICAgICAgICwgbV9kaXZvdEVuZChl
bmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90ID49IG1fZGl2b3RMaW5l
U3RhcnQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3Qub2Zmc2V0ID49IG1fZGl2b3QubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90U3RhcnQub2Zmc2V0ID49
IG1fZGl2b3RTdGFydC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2
b3RFbmQub2Zmc2V0ID49IG1fZGl2b3RFbmQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb25Tb3VyY2VDb2RlKHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBk
aXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorCisgICAgICAgIHZvaWQgc2V0RXhj
ZXB0aW9uU291cmNlQ29kZShjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChkaXZvdCA+PSBkaXZvdExpbmVTdGFydCk7Cisg
ICAgICAgICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90LmxpbmVTdGFydE9mZnNldCk7
CisgICAgICAgICAgICBBU1NFUlQoZGl2b3RTdGFydC5vZmZzZXQgPj0gZGl2b3RTdGFydC5saW5l
U3RhcnRPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKGRpdm90RW5kLm9mZnNldCA+PSBkaXZv
dEVuZC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgbV9kaXZvdCA9IGRpdm90OwotICAg
ICAgICAgICAgbV9kaXZvdFN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICBt
X2Rpdm90RW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotICAgICAgICAgICAgbV9kaXZvdExpbmUgPSBk
aXZvdExpbmU7Ci0gICAgICAgICAgICBtX2Rpdm90TGluZVN0YXJ0ID0gZGl2b3RMaW5lU3RhcnQ7
CisgICAgICAgICAgICBtX2Rpdm90U3RhcnQgPSBkaXZvdFN0YXJ0OworICAgICAgICAgICAgbV9k
aXZvdEVuZCA9IGRpdm90RW5kOwogICAgICAgICB9CiAKLSAgICAgICAgdWludDMyX3QgZGl2b3Qo
KSBjb25zdCB7IHJldHVybiBtX2Rpdm90OyB9Ci0gICAgICAgIHVpbnQxNl90IGRpdm90U3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90U3RhcnRPZmZzZXQ7IH0KLSAgICAgICAgdWlu
dDE2X3QgZGl2b3RFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90RW5kT2Zmc2V0OyB9
Ci0gICAgICAgIHVpbnQzMl90IGRpdm90TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RMaW5l
OyB9Ci0gICAgICAgIHVpbnQzMl90IGRpdm90TGluZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9k
aXZvdExpbmVTdGFydDsgfQorICAgICAgICBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QoKSBj
b25zdCB7IHJldHVybiBtX2Rpdm90OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9kaXZvdFN0YXJ0OyB9CisgICAgICAgIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RFbmQ7IH0K
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93UmVmZXJlbmNl
RXJyb3IoQnl0ZWNvZGVHZW5lcmF0b3ImLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdDsKLSAgICAgICAgdWludDE2X3QgbV9k
aXZvdFN0YXJ0T2Zmc2V0OwotICAgICAgICB1aW50MTZfdCBtX2Rpdm90RW5kT2Zmc2V0OwotICAg
ICAgICB1aW50MzJfdCBtX2Rpdm90TGluZTsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdExpbmVT
dGFydDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdDsKKyAgICAgICAgSlNUZXh0UG9z
aXRpb24gbV9kaXZvdFN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBtX2Rpdm90RW5kOwog
ICAgIH07CiAKICAgICBjbGFzcyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSA6IHB1YmxpYyBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CkBAIC0zMDksOCArMzAyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFRocm93YWJsZVN1YkV4cHJlc3Np
b25EYXRhKHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQotICAg
ICAgICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgVGhyb3dhYmxlU3Vi
RXhwcmVzc2lvbkRhdGEoY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAg
ICAgICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpCiAgICAgICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0KDApCiAgICAg
ICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgwKQogICAgICAgICAgICAgLCBtX3N1
YmV4cHJlc3Npb25MaW5lT2Zmc2V0KDApCkBAIC0zMTgsMjggKzMxMSwzNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRTdWJleHByZXNz
aW9uSW5mbyh1aW50MzJfdCBzdWJleHByZXNzaW9uRGl2b3QsIHVpbnQxNl90IHN1YmV4cHJlc3Np
b25PZmZzZXQsIHVpbnQzMl90IHN1YmV4cHJlc3Npb25MaW5lLCB1aW50MzJfdCBzdWJleHByZXNz
aW9uTGluZVN0YXJ0KQorICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25JbmZvKGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdWJleHByZXNzaW9uRGl2b3QsIGludCBzdWJleHByZXNzaW9uT2Zmc2V0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRpdm90IDw9IGRp
dm90KCkpOworICAgICAgICAgICAgQVNTRVJUKHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQgPD0g
ZGl2b3QoKS5vZmZzZXQpOwogICAgICAgICAgICAgLy8gT3ZlcmZsb3cgbWVhbnMgd2UgY2FuJ3Qg
ZG8gdGhpcyBzYWZlbHksIHNvIGp1c3QgcG9pbnQgYXQgdGhlIHByaW1hcnkgZGl2b3QsCiAgICAg
ICAgICAgICAvLyBkaXZvdExpbmUsIG9yIGRpdm90TGluZVN0YXJ0LgotICAgICAgICAgICAgaWYg
KChkaXZvdCgpIC0gc3ViZXhwcmVzc2lvbkRpdm90KSAmIH4weEZGRkYpCisgICAgICAgICAgICBp
ZiAoKGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0KSAmIH4weEZGRkYpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKChkaXZvdExpbmUoKSAtIHN1YmV4
cHJlc3Npb25MaW5lKSAmIH4weEZGRkYpCisgICAgICAgICAgICBpZiAoKGRpdm90KCkubGluZSAt
IHN1YmV4cHJlc3Npb25EaXZvdC5saW5lKSAmIH4weEZGRkYpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgaWYgKChkaXZvdExpbmVTdGFydCgpIC0gc3ViZXhwcmVzc2lvbkxp
bmVTdGFydCkgJiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChkaXZvdCgpLmxpbmVTdGFydE9m
ZnNldCAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5lU3RhcnRPZmZzZXQpICYgfjB4RkZGRikKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9m
ZnNldCA9IGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Q7Ci0gICAgICAgICAgICBtX3N1YmV4
cHJlc3Npb25FbmRPZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0OwotICAgICAgICAgICAgbV9z
dWJleHByZXNzaW9uTGluZU9mZnNldCA9IGRpdm90TGluZSgpIC0gc3ViZXhwcmVzc2lvbkxpbmU7
Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQgPSBkaXZvdExpbmVT
dGFydCgpIC0gc3ViZXhwcmVzc2lvbkxpbmVTdGFydDsKKyAgICAgICAgICAgIGlmICgoZGl2b3RF
bmQoKSAtIHN1YmV4cHJlc3Npb25PZmZzZXQpICYgfjB4RkZGRikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9IGRpdm90KCkg
LSBzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0OworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9u
RW5kT2Zmc2V0ID0gZGl2b3RFbmQoKSAtIHN1YmV4cHJlc3Npb25PZmZzZXQ7CisgICAgICAgICAg
ICBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0ID0gZGl2b3QoKS5saW5lIC0gc3ViZXhwcmVzc2lv
bkRpdm90LmxpbmU7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQg
PSBkaXZvdCgpLmxpbmVTdGFydE9mZnNldCAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5lU3RhcnRP
ZmZzZXQ7CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uRGl2b3Qo
KSB7IHJldHVybiBkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAg
ICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gZGl2b3RTdGFy
dE9mZnNldCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWdu
ZWQgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpIHsgcmV0dXJuIG1fc3ViZXhwcmVzc2lvbkVuZE9m
ZnNldDsgfQotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uTGluZSgpIHsgcmV0dXJuIGRp
dm90TGluZSgpIC0gbV9zdWJleHByZXNzaW9uTGluZU9mZnNldDsgfQotICAgICAgICB1bnNpZ25l
ZCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkgeyByZXR1cm4gZGl2b3RMaW5lU3RhcnQoKSAtIG1f
c3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNldDsgfQorICAgICAgICBKU1RleHRQb3NpdGlvbiBz
dWJleHByZXNzaW9uRGl2b3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbmV3TGluZSA9
IGRpdm90KCkubGluZSAtIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQ7CisgICAgICAgICAgICBp
bnQgbmV3T2Zmc2V0ID0gZGl2b3QoKS5vZmZzZXQgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNl
dDsKKyAgICAgICAgICAgIGludCBuZXdMaW5lU3RhcnRPZmZzZXQgPSBkaXZvdCgpLmxpbmVTdGFy
dE9mZnNldCAtIG1fc3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNldDsKKyAgICAgICAgICAgIHJl
dHVybiBKU1RleHRQb3NpdGlvbihuZXdMaW5lLCBuZXdPZmZzZXQsIG5ld0xpbmVTdGFydE9mZnNl
dCk7CisgICAgICAgIH0KKyAgICAgICAgSlNUZXh0UG9zaXRpb24gc3ViZXhwcmVzc2lvblN0YXJ0
KCkgeyByZXR1cm4gZGl2b3RTdGFydCgpOyB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN1YmV4
cHJlc3Npb25FbmQoKSB7IHJldHVybiBkaXZvdEVuZCgpIC0gc3RhdGljX2Nhc3Q8aW50PihtX3N1
YmV4cHJlc3Npb25FbmRPZmZzZXQpOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHVpbnQx
Nl90IG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0OwpAQCAtMzU4LDggKzM1Nyw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBUaHJvd2FibGVQcmVm
aXhlZFN1YkV4cHJlc3Npb25EYXRhKHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90
TGluZVN0YXJ0KQotICAgICAgICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAg
ICAgVGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YShjb25zdCBKU1RleHRQb3NpdGlv
biYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKKyAgICAgICAgICAgIDogVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0
YXJ0LCBlbmQpCiAgICAgICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0KDApCiAg
ICAgICAgICAgICAsIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KDApCiAgICAgICAgICAgICAs
IG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQoMCkKQEAgLTM2NywyOCArMzY2LDM0IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN1YmV4
cHJlc3Npb25JbmZvKHVpbnQzMl90IHN1YmV4cHJlc3Npb25EaXZvdCwgdWludDE2X3Qgc3ViZXhw
cmVzc2lvbk9mZnNldCwgdWludDMyX3Qgc3ViZXhwcmVzc2lvbkxpbmUsIHVpbnQzMl90IHN1YmV4
cHJlc3Npb25MaW5lU3RhcnQpCisgICAgICAgIHZvaWQgc2V0U3ViZXhwcmVzc2lvbkluZm8oY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN1YmV4cHJlc3Npb25EaXZvdCwgaW50IHN1YmV4cHJlc3Npb25P
ZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzdWJleHByZXNzaW9uRGl2b3Qg
Pj0gZGl2b3QoKSk7CisgICAgICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRpdm90Lm9mZnNl
dCA+PSBkaXZvdCgpLm9mZnNldCk7CiAgICAgICAgICAgICAvLyBPdmVyZmxvdyBtZWFucyB3ZSBj
YW4ndCBkbyB0aGlzIHNhZmVseSwgc28ganVzdCBwb2ludCBhdCB0aGUgcHJpbWFyeSBkaXZvdCwK
ICAgICAgICAgICAgIC8vIGRpdm90TGluZSwgb3IgZGl2b3RMaW5lU3RhcnQuCi0gICAgICAgICAg
ICBpZiAoKHN1YmV4cHJlc3Npb25EaXZvdCAtIGRpdm90KCkpICYgfjB4RkZGRikgCisgICAgICAg
ICAgICBpZiAoKHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQgLSBkaXZvdCgpKSAmIH4weEZGRkYp
IAorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lv
bkRpdm90LmxpbmUgLSBkaXZvdCgpLmxpbmUpICYgfjB4RkZGRikKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBpZiAoKHN1YmV4cHJlc3Npb25MaW5lIC0gZGl2b3RMaW5lKCkp
ICYgfjB4RkZGRikKKyAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90LmxpbmVTdGFy
dE9mZnNldCAtIGRpdm90KCkubGluZVN0YXJ0T2Zmc2V0KSAmIH4weEZGRkYpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uTGluZVN0YXJ0IC0g
ZGl2b3RMaW5lU3RhcnQoKSkgJiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChzdWJleHByZXNz
aW9uT2Zmc2V0IC0gZGl2b3RTdGFydCgpKSAmIH4weEZGRkYpIAogICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0ID0gc3ViZXhwcmVz
c2lvbkRpdm90IC0gZGl2b3QoKTsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zm
c2V0ID0gc3ViZXhwcmVzc2lvbk9mZnNldDsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkxp
bmVPZmZzZXQgPSBzdWJleHByZXNzaW9uTGluZSAtIGRpdm90TGluZSgpOwotICAgICAgICAgICAg
bV9zdWJleHByZXNzaW9uTGluZVN0YXJ0T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkxpbmVTdGFydCAt
IGRpdm90TGluZVN0YXJ0KCk7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNl
dCA9IHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQgLSBkaXZvdCgpOworICAgICAgICAgICAgbV9z
dWJleHByZXNzaW9uU3RhcnRPZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0IC0gZGl2b3RTdGFy
dCgpOworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uTGluZU9mZnNldCA9IHN1YmV4cHJlc3Np
b25EaXZvdC5saW5lIC0gZGl2b3QoKS5saW5lOworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9u
TGluZVN0YXJ0T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkRpdm90LmxpbmVTdGFydE9mZnNldCAtIGRp
dm90KCkubGluZVN0YXJ0T2Zmc2V0OwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgc3Vi
ZXhwcmVzc2lvbkRpdm90KCkgeyByZXR1cm4gZGl2b3QoKSArIG1fc3ViZXhwcmVzc2lvbkRpdm90
T2Zmc2V0OyB9Ci0gICAgICAgIHVuc2lnbmVkIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgpIHsg
cmV0dXJuIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0OyB9Ci0gICAgICAgIHVuc2lnbmVkIHN1
YmV4cHJlc3Npb25FbmRPZmZzZXQoKSB7IHJldHVybiBkaXZvdEVuZE9mZnNldCgpICsgbV9zdWJl
eHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvbkxp
bmUoKSB7IHJldHVybiBkaXZvdExpbmUoKSArIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQ7IH0K
LSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpIHsgcmV0dXJuIGRpdm90
TGluZVN0YXJ0KCkgKyBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7IH0KKyAgICAgICAg
SlNUZXh0UG9zaXRpb24gc3ViZXhwcmVzc2lvbkRpdm90KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IG5ld0xpbmUgPSBkaXZvdCgpLmxpbmUgKyBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0
OworICAgICAgICAgICAgaW50IG5ld09mZnNldCA9IGRpdm90KCkub2Zmc2V0ICsgbV9zdWJleHBy
ZXNzaW9uRGl2b3RPZmZzZXQ7CisgICAgICAgICAgICBpbnQgbmV3TGluZVN0YXJ0T2Zmc2V0ID0g
ZGl2b3QoKS5saW5lU3RhcnRPZmZzZXQgKyBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7
CisgICAgICAgICAgICByZXR1cm4gSlNUZXh0UG9zaXRpb24obmV3TGluZSwgbmV3T2Zmc2V0LCBu
ZXdMaW5lU3RhcnRPZmZzZXQpOworICAgICAgICB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN1
YmV4cHJlc3Npb25TdGFydCgpIHsgcmV0dXJuIGRpdm90U3RhcnQoKSArIHN0YXRpY19jYXN0PGlu
dD4obV9zdWJleHByZXNzaW9uU3RhcnRPZmZzZXQpOyB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9u
IHN1YmV4cHJlc3Npb25FbmQoKSB7IHJldHVybiBkaXZvdEVuZCgpOyB9CiAKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIHVpbnQxNl90IG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0OwpAQCAtNDE4
LDcgKzQyMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVzb2x2ZU5vZGUgOiBw
dWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVzb2x2ZU5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAg
ICAgICAgUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCk7CiAKICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnQ7IH0KIApAQCAtNDMwLDkg
KzQzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZXNvbHZl
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICBjb25zdCBJZGVudGlmaWVy
JiBtX2lkZW50OwotICAgICAgICB1aW50MzJfdCBtX3N0YXJ0T2Zmc2V0OwotICAgICAgICB1aW50
MzJfdCBtX2Rpdm90TGluZTsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdExpbmVTdGFydDsKKyAg
ICAgICAgSlNUZXh0UG9zaXRpb24gbV9zdGFydDsKICAgICB9OwogCiAgICAgY2xhc3MgRWxlbWVu
dE5vZGUgOiBwdWJsaWMgUGFyc2VyQXJlbmFGcmVlYWJsZSB7CkBAIC01NzksNyArNTgyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBFdmFsRnVuY3Rpb25DYWxsTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIEV2YWxGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCk7CisgICAgICAgIEV2YWxGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEFyZ3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RF
bmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTg5LDcgKzU5
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsVmFsdWVOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBk
aXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgRnVuY3Rpb25DYWxs
VmFsdWVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgQXJndW1l
bnRzTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02MDAsNyArNjAzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGlu
ZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBGdW5jdGlvbkNhbGxSZXNvbHZl
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRz
Tm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2
YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02MTEsNyArNjE0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUgOiBwdWJsaWMg
RXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAgICAg
cHVibGljOgotICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwg
QXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0
YXJ0KTsKKyAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEFy
Z3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjIzLDcgKzYyNiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsRG90Tm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2Rl
KiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAg
ICBGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCk7CkBAIC02MzYsNyArNjM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZSA6IHB1YmxpYyBGdW5jdGlvbkNhbGxEb3ROb2RlIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJn
dW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KTsKKyAgICAgICAgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2Rl
KiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY0NCw3ICs2NDcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAKICAgICBjbGFzcyBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUgOiBwdWJsaWMgRnVu
Y3Rpb25DYWxsRG90Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBBcHBseUZ1bmN0aW9uQ2Fs
bERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNv
bnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50
aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY1Miw3ICs2
NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERlbGV0ZVJlc29sdmVOb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgRGVsZXRlUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgRGVsZXRlUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02NjIs
NyArNjY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBEZWxldGVCcmFja2V0Tm9k
ZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRh
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0
LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAg
IERlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpA
QCAtNjczLDcgKzY3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVsZXRlRG90
Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25E
YXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlbGV0ZURvdE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIERlbGV0ZURv
dE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNzI2LDcgKzcyOSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJlZml4Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSwgcHVibGljIFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uTm9kZSosIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCk7CisgICAgICAgIFByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
RW5kKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNzQwLDcg
Kzc0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUG9zdGZpeE5vZGUgOiBwdWJs
aWMgUHJlZml4Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBQb3N0Zml4Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZv
dCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2
b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIFBvc3RmaXhOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCk7CkBAIC05ODMsNyArOTg2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1Ymxp
YyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBSZWFkTW9k
aWZ5UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYs
IE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVu
dHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpOworICAgICAgICBSZWFkTW9k
aWZ5UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYs
IE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVu
dHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDA3LDcgKzEwMTAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3Is
IEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZv
dExpbmVTdGFydCk7CisgICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlw
dCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3Np
Z25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpA
QCAtMTAyMiw3ICsxMDI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBc3NpZ25C
cmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFzc2lnbkJyYWNrZXROb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSog
c3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdu
bWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBBc3NpZ25CcmFja2V0Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1
YnNjcmlwdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1l
bnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0x
MDM2LDcgKzEwMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFzc2lnbkRvdE5v
ZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0
YSB7CiAgICAgcHVibGljOgotICAgICAgICBBc3NpZ25Eb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lv
bk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQXNzaWduRG90Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApOwpAQCAtMTA0OSw3ICsxMDUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBSZWFkTW9kaWZ5RG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVi
bGljIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJl
YWRNb2RpZnlEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBi
YXNlLCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBk
aXZvdExpbmVTdGFydCk7CisgICAgICAgIFJlYWRNb2RpZnlEb3ROb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0
b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApOwpAQCAtMTA2Myw3ICsxMDY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBBc3NpZ25FcnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1Ymxp
YyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBBc3NpZ25F
cnJvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBBc3NpZ25FcnJvck5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEyMzksNyArMTI0Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZvckluTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnRO
b2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAgICAg
ICAgRm9ySW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgRXhw
cmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKik7Ci0gICAgICAgIEZvckluTm9kZShWTSosIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSos
IEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIHVuc2lnbmVkIGRpdm90LCBpbnQgc3Rh
cnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpOworICAgICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSos
IFN0YXRlbWVudE5vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMjkyLDE2ICsxMjk1LDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgV2l0aE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9k
ZSB7CiAgICAgcHVibGljOgotICAgICAgICBXaXRoTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCB1aW50MzJfdCBkaXZvdCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCwgdWludDMyX3QgZXhwcmVzc2lv
bkxlbmd0aCk7CisgICAgICAgIFdpdGhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
dWludDMyX3QgZXhwcmVzc2lvbkxlbmd0aCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KTsKIAogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByOwogICAgICAgICBTdGF0ZW1lbnRO
b2RlKiBtX3N0YXRlbWVudDsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdDsKLSAgICAgICAgdWlu
dDMyX3QgbV9kaXZvdExpbmU7Ci0gICAgICAgIHVpbnQzMl90IG1fZGl2b3RMaW5lU3RhcnQ7Cisg
ICAgICAgIEpTVGV4dFBvc2l0aW9uIG1fZGl2b3Q7CiAgICAgICAgIHVpbnQzMl90IG1fZXhwcmVz
c2lvbkxlbmd0aDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCShyZXZpc2lvbiAxNTI1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDYgQEAgUGFyc2VyPExl
eGVyVHlwZT46OlBhcnNlcihWTSogdm0sIGNvbnN0IAogICAgICwgbV9zdGFjaygqdm0sIHd0ZlRo
cmVhZERhdGEoKS5zdGFjaygpKQogICAgICwgbV9oYXNTdGFja092ZXJmbG93KGZhbHNlKQogICAg
ICwgbV9hbGxvd3NJbih0cnVlKQotICAgICwgbV9sYXN0TGluZSgwKQotICAgICwgbV9sYXN0VG9r
ZW5FbmQoMCkKICAgICAsIG1fYXNzaWdubWVudENvdW50KDApCiAgICAgLCBtX25vbkxIU0NvdW50
KDApCiAgICAgLCBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQoc291cmNlLnByb3ZpZGVyKCktPmlz
VmFsaWQoKSkKQEAgLTEzMiwyMSArMTMwLDIwIEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VJbm5lcigpCiAgICAgICAgIGZlYXR1cmVzIHw9IFNoYWRvd3NBcmd1bWVudHNGZWF0dXJl
OwogCiAgICAgZGlkRmluaXNoUGFyc2luZyhzb3VyY2VFbGVtZW50cywgY29udGV4dC52YXJEZWNs
YXJhdGlvbnMoKSwgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCksIGZlYXR1cmVzLAotICAgICAg
ICAgICAgICAgICAgICAgbV9sYXN0TGluZSwgY29udGV4dC5udW1Db25zdGFudHMoKSwgY2FwdHVy
ZWRWYXJpYWJsZXMpOworICAgICAgICBjb250ZXh0Lm51bUNvbnN0YW50cygpLCBjYXB0dXJlZFZh
cmlhYmxlcyk7CiAKICAgICByZXR1cm4gcGFyc2VFcnJvcjsKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIExleGVyVHlwZT4KIHZvaWQgUGFyc2VyPExleGVyVHlwZT46OmRpZEZpbmlzaFBhcnNpbmco
U291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1lbnRzLCBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRp
b25TdGFja3M6OlZhclN0YWNrPiogdmFyU3RhY2ssIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiog
ZnVuY1N0YWNrLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBsYXN0TGluZSwgaW50IG51bUNv
bnN0YW50cywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJzKQorICAgIFBhcnNlckFyZW5hRGF0
YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFjaywgQ29kZUZlYXR1
cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZh
cnMpCiB7CiAgICAgbV9zb3VyY2VFbGVtZW50cyA9IHNvdXJjZUVsZW1lbnRzOwogICAgIG1fdmFy
RGVjbGFyYXRpb25zID0gdmFyU3RhY2s7CiAgICAgbV9mdW5jRGVjbGFyYXRpb25zID0gZnVuY1N0
YWNrOwogICAgIG1fY2FwdHVyZWRWYXJpYWJsZXMuc3dhcChjYXB0dXJlZFZhcnMpOwogICAgIG1f
ZmVhdHVyZXMgPSBmZWF0dXJlczsKLSAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CiAgICAgbV9u
dW1Db25zdGFudHMgPSBudW1Db25zdGFudHM7CiB9CiAKQEAgLTIwNCw3ICsyMDEsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgaW50IHNjcmF0Y2g7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogc2NyYXRjaDEgPSAwOwogICAgIFRyZWVFeHByZXNzaW9uIHNj
cmF0Y2gyID0gMDsKLSAgICBpbnQgc2NyYXRjaDMgPSAwOworICAgIEpTVGV4dFBvc2l0aW9uIHNj
cmF0Y2gzOwogICAgIFRyZWVFeHByZXNzaW9uIHZhckRlY2xzID0gcGFyc2VWYXJEZWNsYXJhdGlv
bkxpc3QoY29udGV4dCwgc2NyYXRjaCwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBzY3JhdGNoMywgc2Ny
YXRjaDMsIHNjcmF0Y2gzKTsKICAgICBmYWlsSWZUcnVlKGhhc0Vycm9yKCkpOwogICAgIGZhaWxJ
ZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7CkBAIC0yNzAsNyArMjY3LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4
ZXJUeXBlPgotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRl
eHQsIGludCYgZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVl
RXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0
YXJ0LCBpbnQmIGluaXRFbmQpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVp
bGRlciYgY29udGV4dCwgaW50JiBkZWNsYXJhdGlvbnMsIGNvbnN0IElkZW50aWZpZXIqJiBsYXN0
SWRlbnQsIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBp
ZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5p
dEVuZCkKIHsKICAgICBUcmVlRXhwcmVzc2lvbiB2YXJEZWNscyA9IDA7CiAgICAgZG8gewpAQCAt
Mjc5LDcgKzI3Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MK
ICAgICAgICAgbmV4dCgpOwogICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAgICAgIAot
ICAgICAgICBpbnQgdmFyU3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIEpTVGV4dFBvc2l0
aW9uIHZhclN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGlkZW50U3RhcnQg
PSB2YXJTdGFydDsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9IG1fdG9rZW4ubV9k
YXRhLmlkZW50OwogICAgICAgICBsYXN0SWRlbnQgPSBuYW1lOwpAQCAtMjg4LDE3ICsyODUsMTUg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBmYWls
SWZGYWxzZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGRlY2xhcmVWYXJpYWJsZShuYW1lKSwg
IkNhbm5vdCBkZWNsYXJlIGEgdmFyaWFibGUgbmFtZWQiLCBuYW1lLT5pbXBsKCksICJpbiBzdHJp
Y3QgbW9kZS4iKTsKICAgICAgICAgY29udGV4dC5hZGRWYXIobmFtZSwgKGhhc0luaXRpYWxpemVy
IHx8ICghbV9hbGxvd3NJbiAmJiBtYXRjaChJTlRPS0VOKSkpID8gRGVjbGFyYXRpb25TdGFja3M6
Okhhc0luaXRpYWxpemVyIDogMCk7CiAgICAgICAgIGlmIChoYXNJbml0aWFsaXplcikgewotICAg
ICAgICAgICAgaW50IHZhckRpdm90ID0gdG9rZW5TdGFydCgpICsgMTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHZhckxpbmUgPSB0b2tlbkxpbmUoKTsgCi0gICAgICAgICAgICB1bnNpZ25lZCB2YXJM
aW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOwotICAgICAgICAgICAgaW5pdFN0YXJ0ID0gdG9r
ZW5TdGFydCgpOworICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gdmFyRGl2b3QgPSB0b2tlblN0
YXJ0UG9zaXRpb24oKSArIDE7CisgICAgICAgICAgICBpbml0U3RhcnQgPSB0b2tlblN0YXJ0UG9z
aXRpb24oKTsKICAgICAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3Mp
OyAvLyBjb25zdW1lICc9JwogICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gaW5pdGlhbGl6ZXIg
PSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAgICAgaW5pdEVu
ZCA9IGxhc3RUb2tlbkVuZCgpOworICAgICAgICAgICAgaW5pdEVuZCA9IGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCk7CiAgICAgICAgICAgICBsYXN0SW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcjsKICAg
ICAgICAgICAgIGZhaWxJZkZhbHNlKGluaXRpYWxpemVyKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IGNvbnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShs
b2NhdGlvbiwgKm5hbWUsIGluaXRpYWxpemVyLCB2YXJTdGFydCwgdmFyRGl2b3QsIGxhc3RUb2tl
bkVuZCgpLCB2YXJMaW5lLCB2YXJMaW5lU3RhcnQpOworICAgICAgICAgICAgVHJlZUV4cHJlc3Np
b24gbm9kZSA9IGNvbnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgKm5hbWUsIGlu
aXRpYWxpemVyLCB2YXJTdGFydCwgdmFyRGl2b3QsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwog
ICAgICAgICAgICAgaWYgKCF2YXJEZWNscykKICAgICAgICAgICAgICAgICB2YXJEZWNscyA9IG5v
ZGU7CiAgICAgICAgICAgICBlbHNlCkBAIC0zNDYsMTAgKzM0MSw4IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJFTik7
CiAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKICAgICBpbnQgZGVjbGFyYXRp
b25zID0gMDsKLSAgICBpbnQgZGVjbHNTdGFydCA9IDA7Ci0gICAgaW50IGRlY2xzRW5kID0gMDsK
LSAgICB1bnNpZ25lZCBkZWNsc0xpbmUgPSAwOwotICAgIHVuc2lnbmVkIGRlY2xzTGluZVN0YXJ0
ID0gMDsKKyAgICBKU1RleHRQb3NpdGlvbiBkZWNsc1N0YXJ0OworICAgIEpTVGV4dFBvc2l0aW9u
IGRlY2xzRW5kOwogICAgIFRyZWVFeHByZXNzaW9uIGRlY2xzID0gMDsKICAgICBpZiAobWF0Y2go
VkFSKSkgewogICAgICAgICAvKgpAQCAtMzYwLDggKzM1Myw4IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogZm9ySW5U
YXJnZXQgPSAwOwogICAgICAgICBUcmVlRXhwcmVzc2lvbiBmb3JJbkluaXRpYWxpemVyID0gMDsK
ICAgICAgICAgbV9hbGxvd3NJbiA9IGZhbHNlOwotICAgICAgICBpbnQgaW5pdFN0YXJ0ID0gMDsK
LSAgICAgICAgaW50IGluaXRFbmQgPSAwOworICAgICAgICBKU1RleHRQb3NpdGlvbiBpbml0U3Rh
cnQ7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIGluaXRFbmQ7CiAgICAgICAgIGRlY2xzID0gcGFy
c2VWYXJEZWNsYXJhdGlvbkxpc3QoY29udGV4dCwgZGVjbGFyYXRpb25zLCBmb3JJblRhcmdldCwg
Zm9ySW5Jbml0aWFsaXplciwgZGVjbHNTdGFydCwgaW5pdFN0YXJ0LCBpbml0RW5kKTsKICAgICAg
ICAgbV9hbGxvd3NJbiA9IHRydWU7CiAgICAgICAgIGZhaWxJZlRydWUoaGFzRXJyb3IoKSk7CkBA
IC0zNzMsMTQgKzM2NiwxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lCiAgICAgICAgIGZhaWxJZkZhbHNlKGRlY2xhcmF0aW9ucyA9PSAxKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIEhhbmRsZSBmb3ItaW4gd2l0aCB2YXIgZGVjbGFyYXRpb24KLSAgICAgICAgaW50
IGluTG9jYXRpb24gPSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGluTGluZSA9IHRv
a2VuTGluZSgpOwotICAgICAgICB1bnNpZ25lZCBpbkxpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0
KCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIGluTG9jYXRpb24gPSB0b2tlblN0YXJ0UG9zaXRp
b24oKTsKICAgICAgICAgY29uc3VtZU9yRmFpbChJTlRPS0VOKTsKICAgICAgICAgCiAgICAgICAg
IFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAg
IGZhaWxJZkZhbHNlKGV4cHIpOwotICAgICAgICBpbnQgZXhwckVuZCA9IGxhc3RUb2tlbkVuZCgp
OworICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24o
KTsKICAgICAgICAgCiAgICAgICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CiAgICAgICAg
IGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7CkBAIC0zOTEsMTYgKzM4MiwxNCBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIGVuZExvb3AoKTsKICAg
ICAgICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZUZvckluTG9vcChsb2NhdGlvbiwgZm9ySW5UYXJnZXQsIGZvckluSW5pdGlh
bGl6ZXIsIGV4cHIsIHN0YXRlbWVudCwgZGVjbHNTdGFydCwgaW5Mb2NhdGlvbiwgZXhwckVuZCwg
aW5pdFN0YXJ0LCBpbml0RW5kLCBzdGFydExpbmUsIGVuZExpbmUsIGluTGluZSwgaW5MaW5lU3Rh
cnQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGb3JJbkxvb3AobG9jYXRpb24sIGZv
ckluVGFyZ2V0LCBmb3JJbkluaXRpYWxpemVyLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQs
IGluTG9jYXRpb24sIGV4cHJFbmQsIGluaXRTdGFydCwgaW5pdEVuZCwgc3RhcnRMaW5lLCBlbmRM
aW5lKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFtYXRjaChTRU1JQ09MT04pKSB7CiAgICAgICAg
IG1fYWxsb3dzSW4gPSBmYWxzZTsKLSAgICAgICAgZGVjbHNTdGFydCA9IHRva2VuU3RhcnQoKTsK
KyAgICAgICAgZGVjbHNTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBkZWNs
cyA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgZGVjbHNFbmQgPSBsYXN0VG9r
ZW5FbmQoKTsKLSAgICAgICAgZGVjbHNMaW5lID0gbGFzdFRva2VuTGluZSgpOwotICAgICAgICBk
ZWNsc0xpbmVTdGFydCA9IGxhc3RUb2tlbkxpbmVTdGFydCgpOworICAgICAgICBkZWNsc0VuZCA9
IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgIG1fYWxsb3dzSW4gPSB0cnVlOwogICAg
ICAgICBmYWlsSWZGYWxzZShkZWNscyk7CiAgICAgfQpAQCAtNDM3LDcgKzQyNiw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBjb25zdW1lT3JGYWlsKElO
VE9LRU4pOwogICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4
dCk7CiAgICAgZmFpbElmRmFsc2UoZXhwcik7Ci0gICAgaW50IGV4cHJFbmQgPSBsYXN0VG9rZW5F
bmQoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBleHByRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24o
KTsKICAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgpOwogICAgIGNvbnN1bWVPckZhaWwoQ0xP
U0VQQVJFTik7CiAgICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKQEAgLTQ0Niw3ICs0
MzUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgZW5k
TG9vcCgpOwogICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CiAgICAgCi0gICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBkZWNscywgZXhwciwgc3RhdGVtZW50LCBk
ZWNsc1N0YXJ0LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBkZWNsc0xp
bmUsIGRlY2xzTGluZVN0YXJ0KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGb3JJbkxvb3Ao
bG9jYXRpb24sIGRlY2xzLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQsIGRlY2xzRW5kLCBl
eHByRW5kLCBzdGFydExpbmUsIGVuZExpbmUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4
ZXJUeXBlPgpAQCAtNDU0LDI2ICs0NDMsMjEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZQogewogICAgIEFTU0VSVChtYXRjaChCUkVBSykpOwogICAgIEpTVG9rZW5M
b2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwotICAgIGludCBzdGFydENvbCA9IHRv
a2VuU3RhcnQoKTsKLSAgICBpbnQgZW5kQ29sID0gdG9rZW5FbmQoKTsKLSAgICBpbnQgc3RhcnRM
aW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICB1
bnNpZ25lZCBlbmRMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgIEpTVGV4dFBvc2l0
aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CisgICAgSlNUZXh0UG9zaXRpb24gZW5k
ID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQoKTsKICAgICAKICAgICBpZiAoYXV0b1Nl
bWlDb2xvbigpKSB7CiAgICAgICAgIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoYnJlYWtJc1ZhbGlk
KCksICInYnJlYWsnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgc3dpdGNoIG9yIGxvb3Agc3RhdGVt
ZW50Iik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxvY2F0
aW9uLCBzdGFydENvbCwgZW5kQ29sLCBzdGFydExpbmUsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7
CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxvY2F0aW9uLCBz
dGFydCwgZW5kKTsKICAgICB9CiAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgZmFpbElmRmFsc2VX
aXRoTmFtZUFuZE1lc3NhZ2UoZ2V0TGFiZWwoaWRlbnQpLCAiTGFiZWwiLCBpZGVudC0+aW1wbCgp
LCAiaXMgbm90IGRlZmluZWQiKTsKLSAgICBlbmRDb2wgPSB0b2tlbkVuZCgpOwotICAgIGVuZExp
bmUgPSB0b2tlbkxpbmUoKTsKLSAgICBlbmRMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOwor
ICAgIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBuZXh0KCk7CiAgICAgZmFpbElmRmFs
c2UoYXV0b1NlbWlDb2xvbigpKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVha1N0YXRl
bWVudChsb2NhdGlvbiwgaWRlbnQsIHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwgZW5kTGlu
ZSwgZW5kTGluZVN0YXJ0KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVha1N0YXRlbWVu
dChsb2NhdGlvbiwgaWRlbnQsIHN0YXJ0LCBlbmQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGV4ZXJUeXBlPgpAQCAtNDgxLDI4ICs0NjUsMjMgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZQogewogICAgIEFTU0VSVChtYXRjaChDT05USU5VRSkpOwogICAgIEpT
VG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwotICAgIGludCBzdGFydENv
bCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgZW5kQ29sID0gdG9rZW5FbmQoKTsKLSAgICBpbnQg
c3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsK
LSAgICB1bnNpZ25lZCBlbmRMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgIEpTVGV4
dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CisgICAgSlNUZXh0UG9zaXRp
b24gZW5kID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQoKTsKICAgICAKICAgICBpZiAo
YXV0b1NlbWlDb2xvbigpKSB7CiAgICAgICAgIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoY29udGlu
dWVJc1ZhbGlkKCksICInY29udGludWUnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBzdGF0
ZW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQo
bG9jYXRpb24sIHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwgZW5kTGluZSwgZW5kTGluZVN0
YXJ0KTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobG9j
YXRpb24sIHN0YXJ0LCBlbmQpOwogICAgIH0KICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICBTY29w
ZUxhYmVsSW5mbyogbGFiZWwgPSBnZXRMYWJlbChpZGVudCk7CiAgICAgZmFpbElmRmFsc2VXaXRo
TmFtZUFuZE1lc3NhZ2UobGFiZWwsICJMYWJlbCIsIGlkZW50LT5pbXBsKCksICJpcyBub3QgZGVm
aW5lZCIpOwogICAgIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UobGFiZWwtPm1faXNMb29wLCAiJ2Nv
bnRpbnVlJyBpcyBvbmx5IHZhbGlkIGluc2lkZSBhIGxvb3Agc3RhdGVtZW50Iik7Ci0gICAgZW5k
Q29sID0gdG9rZW5FbmQoKTsKLSAgICBlbmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgZW5kTGlu
ZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7
CiAgICAgbmV4dCgpOwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobG9jYXRpb24sIGlkZW50LCBzdGFy
dENvbCwgZW5kQ29sLCBzdGFydExpbmUsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7CisgICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobG9jYXRpb24sIGlkZW50LCBzdGFy
dCwgZW5kKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTUxMSwyOSAr
NDkwLDI0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBB
U1NFUlQobWF0Y2goUkVUVVJOKSk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2Vu
TG9jYXRpb24oKSk7CiAgICAgZmFpbElmRmFsc2UoY3VycmVudFNjb3BlKCktPmlzRnVuY3Rpb24o
KSk7Ci0gICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBlbmRMaW5lID0g
c3RhcnRMaW5lOwotICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgZW5kID0g
dG9rZW5FbmQoKTsKLSAgICB1bnNpZ25lZCBkaXZvdExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICB1
bnNpZ25lZCBkaXZvdExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgSlNUZXh0UG9z
aXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICBKU1RleHRQb3NpdGlvbiBl
bmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwogICAgIC8vIFdlIGRvIHRoZSBh
dXRvIHNlbWljb2xvbiBjaGVjayBiZWZvcmUgYXR0ZW1wdGluZyB0byBwYXJzZSBhbiBleHByZXNz
aW9uCiAgICAgLy8gYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGEgbGluZSBicmVhayBhZnRlciB0
aGUgcmV0dXJuIGNvcnJlY3RseSB0ZXJtaW5hdGVzCiAgICAgLy8gdGhlIHN0YXRlbWVudAogICAg
IGlmIChtYXRjaChTRU1JQ09MT04pKQotICAgICAgICBlbmRMaW5lICA9IHRva2VuTGluZSgpOwor
ICAgICAgICBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CisKICAgICBpZiAoYXV0b1NlbWlDb2xv
bigpKQotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQobG9jYXRp
b24sIDAsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJldHVyblN0YXRlbWVudChs
b2NhdGlvbiwgMCwgc3RhcnQsIGVuZCk7CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNl
RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBlbmQgPSBs
YXN0VG9rZW5FbmQoKTsKLSAgICBkaXZvdExpbmUgPSBsYXN0VG9rZW5MaW5lKCk7Ci0gICAgZGl2
b3RMaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKKyAgICBlbmQgPSBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpOwogICAgIGlmIChtYXRjaChTRU1JQ09MT04pKQotICAgICAgICBlbmRMaW5l
ICA9IHRva2VuTGluZSgpOworICAgICAgICBlbmQgID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAg
IGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
UmV0dXJuU3RhdGVtZW50KGxvY2F0aW9uLCBleHByLCBzdGFydCwgZW5kLCBzdGFydExpbmUsIGVu
ZExpbmUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZVJldHVyblN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgc3RhcnQsIGVuZCk7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC01NDEsMjEgKzUxNSwxNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB7CiAgICAgQVNTRVJUKG1hdGNoKFRI
Uk9XKSk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7Ci0g
ICAgaW50IGVTdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5M
aW5lKCk7CisgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsK
ICAgICBuZXh0KCk7CiAgICAgCiAgICAgZmFpbElmVHJ1ZShhdXRvU2VtaUNvbG9uKCkpOwogICAg
IAogICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAg
ICAgZmFpbElmRmFsc2UoZXhwcik7Ci0gICAgaW50IGVFbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAg
ICB1bnNpZ25lZCBkaXZvdExpbmUgPSBsYXN0VG9rZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKLSAgICBpbnQgZW5kTGluZSA9IHRv
a2VuTGluZSgpOworICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9u
KCk7CiAgICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKICAgICAKLSAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVUaHJvd1N0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgZVN0YXJ0LCBlRW5k
LCBzdGFydExpbmUsIGVuZExpbmUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZVRocm93U3RhdGVtZW50KGxvY2F0aW9uLCBleHByLCBzdGFydCwg
ZW5kKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTU3MSwxNiArNTQx
LDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBpbnQg
c3RhcnQgPSB0b2tlblN0YXJ0KCk7CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhw
cmVzc2lvbihjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBpbnQgZW5kID0g
bGFzdFRva2VuRW5kKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lID0gbGFzdFRva2VuTGluZSgp
OwotICAgIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7Cisg
ICAgSlNUZXh0UG9zaXRpb24gZW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICBpbnQg
ZW5kTGluZSA9IHRva2VuTGluZSgpOwogICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKICAgICBUcmVlU3RhdGVtZW50IHN0YXRl
bWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7CiAgICAgZmFpbElmRmFsc2Uo
c3RhdGVtZW50KTsKICAgICAKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVXaXRoU3RhdGVtZW50
KGxvY2F0aW9uLCBleHByLCBzdGF0ZW1lbnQsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGlu
ZSwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
V2l0aFN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBzdGFydCwgZW5kLCBzdGFy
dExpbmUsIGVuZExpbmUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAt
NjY3LDcgKzYzNSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUK
ICAgICAKICAgICB0cnlCbG9jayA9IHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7CiAgICAg
ZmFpbElmRmFsc2UodHJ5QmxvY2spOwotICAgIGludCBsYXN0TGluZSA9IG1fbGFzdExpbmU7Cisg
ICAgaW50IGxhc3RMaW5lID0gbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lOwogICAgIAogICAg
IGlmIChtYXRjaChDQVRDSCkpIHsKICAgICAgICAgY3VycmVudFNjb3BlKCktPnNldE5lZWRzRnVs
bEFjdGl2YXRpb24oKTsKQEAgLTcxOSwxMyArNjg3LDEzIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBuZXh0KCk7CiAgICAgaWYgKG1hdGNoKENMT1NFQlJB
Q0UpKSB7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQmxv
Y2tTdGF0ZW1lbnQobG9jYXRpb24sIDAsIHN0YXJ0LCBtX2xhc3RMaW5lKTsKKyAgICAgICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlQmxvY2tTdGF0ZW1lbnQobG9jYXRpb24sIDAsIHN0YXJ0LCBtX2xh
c3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUpOwogICAgIH0KICAgICBUcmVlU291cmNlRWxlbWVudHMg
c3VidHJlZSA9IHBhcnNlU291cmNlRWxlbWVudHM8RG9udENoZWNrRm9yU3RyaWN0TW9kZT4oY29u
dGV4dCk7CiAgICAgZmFpbElmRmFsc2Uoc3VidHJlZSk7CiAgICAgbWF0Y2hPckZhaWwoQ0xPU0VC
UkFDRSk7CiAgICAgbmV4dCgpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVt
ZW50KGxvY2F0aW9uLCBzdWJ0cmVlLCBzdGFydCwgbV9sYXN0TGluZSk7CisgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlQmxvY2tTdGF0ZW1lbnQobG9jYXRpb24sIHN1YnRyZWUsIHN0YXJ0LCBtX2xh
c3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJU
eXBlPgpAQCAtOTM4LDI0ICs5MDYsMjAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZQogICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5l
ZWRzTmFtZSwgdHJ1ZT4oY29udGV4dCwgbmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNl
T2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4p
KSk7CiAgICAgZmFpbElmRmFsc2UobmFtZSk7CiAgICAgZmFpbElmRmFsc2VJZlN0cmljdChkZWNs
YXJlVmFyaWFibGUobmFtZSkpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3Rh
dGVtZW50KGxvY2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VPZmZzZXQs
IGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUsIGJvZHlTdGFydENv
bHVtbik7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9jYXRp
b24sIG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9m
ZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBib2R5U3Rh
cnRDb2x1bW4pOwogfQogCiBzdHJ1Y3QgTGFiZWxJbmZvIHsKLSAgICBMYWJlbEluZm8oY29uc3Qg
SWRlbnRpZmllciogaWRlbnQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgTGFiZWxJbmZvKGNvbnN0
IElkZW50aWZpZXIqIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgOiBtX2lkZW50KGlkZW50KQogICAgICwgbV9zdGFydChz
dGFydCkKICAgICAsIG1fZW5kKGVuZCkKLSAgICAsIG1fZGl2b3RMaW5lKGRpdm90TGluZSkKLSAg
ICAsIG1fZGl2b3RMaW5lU3RhcnQoZGl2b3RMaW5lU3RhcnQpCiAgICAgewogICAgIH0KICAgICAK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBtX2lkZW50OwotICAgIHVuc2lnbmVkIG1fc3RhcnQ7Ci0g
ICAgdW5zaWduZWQgbV9lbmQ7Ci0gICAgdW5zaWduZWQgbV9kaXZvdExpbmU7Ci0gICAgdW5zaWdu
ZWQgbV9kaXZvdExpbmVTdGFydDsKKyAgICBKU1RleHRQb3NpdGlvbiBtX3N0YXJ0OworICAgIEpT
VGV4dFBvc2l0aW9uIG1fZW5kOwogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4K
QEAgLTk2OCw4ICs5MzIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lCiAgICAgVmVjdG9yPExhYmVsSW5mbz4gbGFiZWxzOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBs
b2NhdGlvbihtX3NvdXJjZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAgZG8gewotICAgICAgICBpbnQg
c3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIGludCBzdGFydGluZ0xpbmUgPSB0b2tlbkxp
bmUoKTsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24o
KTsKICAgICAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CiAgICAgICAgIGlmICghbmV4
dFRva2VuSXNDb2xvbigpKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoaXQgdGhpcyBwYXRoIHdl
J3JlIG1ha2luZyBhIGV4cHJlc3Npb24gc3RhdGVtZW50LCB3aGljaApAQCAtOTc4LDEyICs5NDEs
MTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAg
ICAgVHJlZUV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsK
ICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGV4cHJlc3Npb24pOwogICAgICAgICAgICAgZmFpbElm
RmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUV4cHJTdGF0ZW1lbnQobG9jYXRpb24sIGV4cHJlc3Npb24sIHN0YXJ0aW5nTGluZSwgbV9sYXN0
TGluZSk7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHByU3RhdGVtZW50KGxv
Y2F0aW9uLCBleHByZXNzaW9uLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lKTsK
ICAgICAgICAgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9k
YXRhLmlkZW50OwotICAgICAgICBpbnQgZW5kID0gdG9rZW5FbmQoKTsKLSAgICAgICAgdW5zaWdu
ZWQgZGl2b3RMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgICAgIHVuc2lnbmVkIGRpdm90TGluZVN0
YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gZW5kID0gdG9r
ZW5FbmRQb3NpdGlvbigpOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGNvbnN1bWVPckZhaWwo
Q09MT04pOwogICAgICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgewpAQCAtOTky
LDcgKzk1Myw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFiZWxzLnNpemUoKTsgaSsrKQogICAg
ICAgICAgICAgICAgIGZhaWxJZlRydWUoaWRlbnQtPmltcGwoKSA9PSBsYWJlbHNbaV0ubV9pZGVu
dC0+aW1wbCgpKTsKICAgICAgICAgICAgIGZhaWxJZlRydWUoZ2V0TGFiZWwoaWRlbnQpKTsKLSAg
ICAgICAgICAgIGxhYmVscy5hcHBlbmQoTGFiZWxJbmZvKGlkZW50LCBzdGFydCwgZW5kLCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KSk7CisgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKExhYmVs
SW5mbyhpZGVudCwgc3RhcnQsIGVuZCkpOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAobWF0Y2go
SURFTlQpKTsKICAgICBib29sIGlzTG9vcCA9IGZhbHNlOwpAQCAtMTAxOSw3ICs5ODAsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgZmFpbElmRmFsc2Uo
c3RhdGVtZW50KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhYmVscy5zaXplKCk7IGkr
KykgewogICAgICAgICBjb25zdCBMYWJlbEluZm8mIGluZm8gPSBsYWJlbHNbbGFiZWxzLnNpemUo
KSAtIGkgLSAxXTsKLSAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5jcmVhdGVMYWJlbFN0YXRl
bWVudChsb2NhdGlvbiwgaW5mby5tX2lkZW50LCBzdGF0ZW1lbnQsIGluZm8ubV9zdGFydCwgaW5m
by5tX2VuZCwgaW5mby5tX2Rpdm90TGluZSwgaW5mby5tX2Rpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgc3RhdGVtZW50ID0gY29udGV4dC5jcmVhdGVMYWJlbFN0YXRlbWVudChsb2NhdGlvbiwgaW5m
by5tX2lkZW50LCBzdGF0ZW1lbnQsIGluZm8ubV9zdGFydCwgaW5mby5tX2VuZCk7CiAgICAgfQog
ICAgIHJldHVybiBzdGF0ZW1lbnQ7CiB9CkBAIC0xMDI3LDEyICs5ODgsMTIgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVy
VHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0
KQogewotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBKU1RleHRQb3NpdGlv
biBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2Nh
dGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIFRyZWVFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBw
YXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgZmFpbElmRmFsc2UoZXhwcmVzc2lvbik7CiAg
ICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVFeHByU3RhdGVtZW50KGxvY2F0aW9uLCBleHByZXNzaW9uLCBzdGFydExpbmUsIG1fbGFzdExp
bmUpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUV4cHJTdGF0ZW1lbnQobG9jYXRpb24sIGV4
cHJlc3Npb24sIHN0YXJ0LCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAtMTE0OCw5ICsxMTA5LDcgQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
VHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgZmFpbElmU3RhY2tPdmVyZmxvdygpOwotICAg
IGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICB1bnNpZ25lZCBsaW5lID0gdG9rZW5MaW5l
KCk7Ci0gICAgdW5zaWduZWQgbGluZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICBKU1Rl
eHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgIEpTVG9rZW5Mb2Nh
dGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIGludCBpbml0aWFsQXNzaWdubWVu
dENvdW50ID0gbV9hc3NpZ25tZW50Q291bnQ7CiAgICAgaW50IGluaXRpYWxOb25MSFNDb3VudCA9
IG1fbm9uTEhTQ291bnQ7CkBAIC0xMTgxLDEwICsxMTQwLDggQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcgogICAgICAgICB9CiAgICAgICAgIG1fbm9uVHJpdmlhbEV4
cHJlc3Npb25Db3VudCsrOwogICAgICAgICBoYWRBc3NpZ25tZW50ID0gdHJ1ZTsKLSAgICAgICAg
Y29udGV4dC5hc3NpZ25tZW50U3RhY2tBcHBlbmQoYXNzaWdubWVudFN0YWNrLCBsaHMsIHN0YXJ0
LCB0b2tlblN0YXJ0KCksIGxpbmUsIGxpbmVTdGFydCwgbV9hc3NpZ25tZW50Q291bnQsIG9wKTsK
LSAgICAgICAgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIGxpbmUgPSB0b2tlbkxpbmUo
KTsKLSAgICAgICAgbGluZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgY29udGV4
dC5hc3NpZ25tZW50U3RhY2tBcHBlbmQoYXNzaWdubWVudFN0YWNrLCBsaHMsIHN0YXJ0LCB0b2tl
blN0YXJ0UG9zaXRpb24oKSwgbV9hc3NpZ25tZW50Q291bnQsIG9wKTsKKyAgICAgICAgc3RhcnQg
PSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAg
ICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CiAgICAgICAgIGlmIChz
dHJpY3RNb2RlKCkgJiYgbV9sYXN0SWRlbnRpZmllciAmJiBjb250ZXh0LmlzUmVzb2x2ZShsaHMp
KSB7CkBAIC0xMjA2LDcgKzExNjMsNyBAQCBlbmQ6CiAgICAgICAgIHJldHVybiBsaHM7CiAgICAg
CiAgICAgd2hpbGUgKGFzc2lnbm1lbnRTdGFjaykKLSAgICAgICAgbGhzID0gY29udGV4dC5jcmVh
dGVBc3NpZ25tZW50KGxvY2F0aW9uLCBhc3NpZ25tZW50U3RhY2ssIGxocywgaW5pdGlhbEFzc2ln
bm1lbnRDb3VudCwgbV9hc3NpZ25tZW50Q291bnQsIGxhc3RUb2tlbkVuZCgpKTsKKyAgICAgICAg
bGhzID0gY29udGV4dC5jcmVhdGVBc3NpZ25tZW50KGxvY2F0aW9uLCBhc3NpZ25tZW50U3RhY2ss
IGxocywgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCwgbV9hc3NpZ25tZW50Q291bnQsIGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCkpOwogICAgIAogICAgIHJldHVybiBsaHM7CiB9CkBAIC0xMjUyLDEyICsx
MjA5LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICB0
eXBlbmFtZSBUcmVlQnVpbGRlcjo6QmluYXJ5RXhwckNvbnRleHQgYmluYXJ5RXhwckNvbnRleHQo
Y29udGV4dCk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7
CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaW50IGV4cHJTdGFydCA9IHRva2VuU3RhcnQo
KTsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwclN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9u
KCk7CiAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX2Fzc2lnbm1lbnRDb3VudDsK
ICAgICAgICAgVHJlZUV4cHJlc3Npb24gY3VycmVudCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKGNv
bnRleHQpOwogICAgICAgICBmYWlsSWZGYWxzZShjdXJyZW50KTsKICAgICAgICAgCi0gICAgICAg
IGNvbnRleHQuYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8ob3BlcmFuZFN0YWNrRGVwdGgsIGN1
cnJlbnQsIGV4cHJTdGFydCwgbGFzdFRva2VuRW5kKCksIGxhc3RUb2tlbkVuZCgpLCBsYXN0VG9r
ZW5MaW5lKCksIGxhc3RUb2tlbkxpbmVTdGFydCgpLCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9h
c3NpZ25tZW50Q291bnQpOworICAgICAgICBjb250ZXh0LmFwcGVuZEJpbmFyeUV4cHJlc3Npb25J
bmZvKG9wZXJhbmRTdGFja0RlcHRoLCBjdXJyZW50LCBleHByU3RhcnQsIGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCksIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBt
X2Fzc2lnbm1lbnRDb3VudCk7CiAgICAgICAgIGludCBwcmVjZWRlbmNlID0gaXNCaW5hcnlPcGVy
YXRvcihtX3Rva2VuLm1fdHlwZSk7CiAgICAgICAgIGlmICghcHJlY2VkZW5jZSkKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTMzNyw4ICsxMjk0LDggQEAgdGVtcGxhdGUgPGJvb2wgY29tcGxldGUs
IGNsYXNzIFRyZWVCdWlsZAogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKChw
YXJzZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBmYWxzZT4oY29udGV4dCwg
YWNjZXNzb3JOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJh
Y2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIGJvZHlTdGFydENvbHVtbikpKTsKICAgICAgICAgaWYg
KHN0cmluZ1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRl
IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHk8Y29tcGxldGU+KGxvY2F0aW9uLCB0eXBlLCBz
dHJpbmdQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xv
c2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSwgYm9keVN0YXJ0Q29sdW1u
KTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxhdGUgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQ
cm9wZXJ0eTxjb21wbGV0ZT4oY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBsb2NhdGlvbiwgdHlwZSwg
bnVtZXJpY1Byb3BlcnR5TmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBj
bG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xhc3RMaW5lLCBib2R5U3RhcnRDb2x1
bW4pOworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxhdGUgY3JlYXRlR2V0dGVyT3JT
ZXR0ZXJQcm9wZXJ0eTxjb21wbGV0ZT4obG9jYXRpb24sIHR5cGUsIHN0cmluZ1Byb3BlcnR5TmFt
ZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBi
b2R5U3RhcnRMaW5lLCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIGJvZHlTdGFydENvbHVt
bik7CisgICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlIGNyZWF0ZUdldHRlck9yU2V0dGVy
UHJvcGVydHk8Y29tcGxldGU+KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbG9jYXRpb24sIHR5cGUs
IG51bWVyaWNQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwg
Y2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5s
aW5lLCBib2R5U3RhcnRDb2x1bW4pOwogICAgIH0KICAgICBjYXNlIE5VTUJFUjogewogICAgICAg
ICBkb3VibGUgcHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CkBAIC0x
NTM2LDE1ICsxNDkzLDEzIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3MKICAgICAgICAgcmV0dXJuIGNvbnRleHQudGhpc0V4cHIobG9jYXRpb24pOwogICAgIH0KICAg
ICBjYXNlIElERU5UOiB7Ci0gICAgICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICAg
ICAgaW50IGxpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICAgICAgaW50IGxpbmVTdGFydCA9IHRva2Vu
TGluZVN0YXJ0KCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBv
c2l0aW9uKCk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2Rh
dGEuaWRlbnQ7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9u
KCkpOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJs
ZShpZGVudCwgbV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaWRlbnQpOwogICAgICAgICBt
X2xhc3RJZGVudGlmaWVyID0gaWRlbnQ7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJl
c29sdmUobG9jYXRpb24sIGlkZW50LCBzdGFydCwgbGluZSwgbGluZVN0YXJ0KTsKKyAgICAgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlUmVzb2x2ZShsb2NhdGlvbiwgaWRlbnQsIHN0YXJ0KTsKICAg
ICB9CiAgICAgY2FzZSBTVFJJTkc6IHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKQEAgLTE1ODMsMTIgKzE1MzgsMTAgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBmYWlsSWZGYWxzZShtX2xleGVyLT5zY2FuUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSk7CiAgICAg
ICAgIAotICAgICAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIGludCBsaW5l
ID0gdG9rZW5MaW5lKCk7Ci0gICAgICAgIGludCBsaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgp
OworICAgICAgICBKU1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwog
ICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAg
ICAgbmV4dCgpOwotICAgICAgICBUcmVlRXhwcmVzc2lvbiByZSA9IGNvbnRleHQuY3JlYXRlUmVn
RXhwKGxvY2F0aW9uLCAqcGF0dGVybiwgKmZsYWdzLCBzdGFydCwgbGluZSwgbGluZVN0YXJ0KTsK
KyAgICAgICAgVHJlZUV4cHJlc3Npb24gcmUgPSBjb250ZXh0LmNyZWF0ZVJlZ0V4cChsb2NhdGlv
biwgKnBhdHRlcm4sICpmbGFncywgc3RhcnQpOwogICAgICAgICBpZiAoIXJlKSB7CiAgICAgICAg
ICAgICBjb25zdCBjaGFyKiB5YXJyRXJyb3JNc2cgPSBZYXJyOjpjaGVja1N5bnRheChwYXR0ZXJu
LT5zdHJpbmcoKSk7CiAgICAgICAgICAgICBmYWlsV2l0aE1lc3NhZ2UoeWFyckVycm9yTXNnKTsK
QEAgLTE2MjksMTAgKzE1ODIsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VNZW1iZXJFeHByZXNzaW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIFRy
ZWVFeHByZXNzaW9uIGJhc2UgPSAwOwotICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAg
ICBpbnQgZXhwcmVzc2lvblN0YXJ0ID0gc3RhcnQ7Ci0gICAgaW50IGV4cHJlc3Npb25MaW5lID0g
dG9rZW5MaW5lKCk7Ci0gICAgaW50IGV4cHJlc3Npb25MaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFy
dCgpOworICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25TdGFydCA9IHRva2VuU3RhcnRQb3Np
dGlvbigpOwogICAgIGludCBuZXdDb3VudCA9IDA7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0
aW9uKG1fc291cmNlLT5zdGFydE9mZnNldCgpKTsKICAgICB3aGlsZSAobWF0Y2goTkVXKSkgewpA
QCAtMTY1MSw3ICsxNjAxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzcwogICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKICAgICAgICAgbmV4dCgp
OwogICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm88RnVuY3Rpb25Ob1JlcXVp
cmVtZW50cywgZmFsc2U+KGNvbnRleHQsIG5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFj
ZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgYm9keVN0YXJ0Q29sdW1u
KSkpOwotICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkV4cHIobG9jYXRpb24s
IG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNl
dCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKKyAgICAgICAg
YmFzZSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKGxvY2F0aW9uLCBuYW1lLCBib2R5LCBw
YXJhbWV0ZXJzLCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExp
bmUsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKICAgICB9
IGVsc2UKICAgICAgICAgYmFzZSA9IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7CiAg
ICAgCkBAIC0xNjYxLDE1ICsxNjExLDEzIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3MKICAgICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewogICAgICAgICBj
YXNlIE9QRU5CUkFDS0VUOiB7CiAgICAgICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291
bnQrKzsKLSAgICAgICAgICAgIGludCBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kKCk7Ci0g
ICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkxpbmUgPSBsYXN0VG9rZW5MaW5lKCk7Ci0gICAgICAg
ICAgICBpbnQgZXhwcmVzc2lvbkxpbmVTdGFydCA9IGxhc3RUb2tlbkxpbmVTdGFydCgpOworICAg
ICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0
aW9uKCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQg
PSBtX25vbkxIU0NvdW50OwogICAgICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1f
YXNzaWdubWVudENvdW50OwogICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gcHJvcGVydHkgPSBw
YXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0
eSk7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKGxvY2F0
aW9uLCBiYXNlLCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENv
dW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kKCksIGV4cHJlc3Np
b25MaW5lLCBleHByZXNzaW9uTGluZVN0YXJ0KTsKKyAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0
LmNyZWF0ZUJyYWNrZXRBY2Nlc3MobG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBpbml0aWFsQXNz
aWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lv
bkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIGNvbnN1bWVPckZhaWwoQ0xP
U0VCUkFDS0VUKTsKICAgICAgICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTY3OSwzMCArMTYyNywyNSBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgICAgICBpbnQgbm9uTEhTQ291bnQgPSBt
X25vbkxIU0NvdW50OwogICAgICAgICAgICAgaWYgKG5ld0NvdW50KSB7CiAgICAgICAgICAgICAg
ICAgbmV3Q291bnQtLTsKLSAgICAgICAgICAgICAgICBpbnQgZXhwckVuZCA9IGxhc3RUb2tlbkVu
ZCgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4cHJlc3Npb25MaW5lID0gbGFzdFRva2Vu
TGluZSgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4cHJlc3Npb25MaW5lU3RhcnQgPSBs
YXN0VG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHBy
ZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICBUcmVl
QXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOwogICAgICAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGNv
bnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBzdGFydCwgZXhw
ckVuZCwgbGFzdFRva2VuRW5kKCksIGV4cHJlc3Npb25MaW5lLCBleHByZXNzaW9uTGluZVN0YXJ0
KTsKKyAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9u
LCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRv
a2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGludCBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgZXhwcmVzc2lvbkxpbmUgPSBsYXN0VG9rZW5MaW5lKCk7Ci0gICAgICAgICAgICAgICAg
aW50IGV4cHJlc3Npb25MaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAg
ICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRp
b24oKTsKICAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJn
dW1lbnRzKGNvbnRleHQpOwogICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cyk7
Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUobG9j
YXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBs
YXN0VG9rZW5FbmQoKSwgZXhwcmVzc2lvbkxpbmUsIGV4cHJlc3Npb25MaW5lU3RhcnQpOworICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9u
LCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRv
a2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX25vbkxIU0Nv
dW50ID0gbm9uTEhTQ291bnQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIERPVDogewogICAgICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7
Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAg
ICAgICAgZXhwcmVzc2lvbkxpbmVTdGFydCA9IGxhc3RUb2tlbkxpbmVTdGFydCgpOworICAgICAg
ICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9u
KCk7CiAgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVz
ZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CiAgICAgICAgICAg
ICBtYXRjaE9yRmFpbChJREVOVCk7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVE
b3RBY2Nlc3MobG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9u
U3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kKCksIGV4cHJlc3Npb25MaW5lLCBleHByZXNz
aW9uTGluZVN0YXJ0KTsKKyAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZURvdEFjY2Vz
cyhsb2NhdGlvbiwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRlbnQsIGV4cHJlc3Npb25TdGFydCwg
ZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIG5leHQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNzEyLDcgKzE2NTUsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgfQogZW5kTWVtYmVyRXhw
cmVzc2lvbjoKICAgICB3aGlsZSAobmV3Q291bnQtLSkKLSAgICAgICAgYmFzZSA9IGNvbnRleHQu
Y3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgc3RhcnQsIGxhc3RUb2tlbkVuZCgpLCBleHBy
ZXNzaW9uTGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAgICAgIGJhc2UgPSBjb250ZXh0
LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGV4cHJlc3Npb25TdGFydCwgbGFzdFRva2Vu
RW5kUG9zaXRpb24oKSk7CiAgICAgcmV0dXJuIGJhc2U7CiB9CiAKQEAgLTE3NDUsMTQgKzE2ODgs
MTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIG1fbm9uTEhTQ291bnQrKzsKLSAgICAgICAgY29udGV4
dC5hcHBlbmRVbmFyeVRva2VuKHRva2VuU3RhY2tEZXB0aCwgbV90b2tlbi5tX3R5cGUsIHRva2Vu
U3RhcnQoKSwgdG9rZW5MaW5lKCksIHRva2VuTGluZVN0YXJ0KCkpOworICAgICAgICBjb250ZXh0
LmFwcGVuZFVuYXJ5VG9rZW4odG9rZW5TdGFja0RlcHRoLCBtX3Rva2VuLm1fdHlwZSwgdG9rZW5T
dGFydFBvc2l0aW9uKCkpOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIG1fbm9uVHJpdmlhbEV4
cHJlc3Npb25Db3VudCsrOwogICAgIH0KLSAgICBpbnQgc3ViRXhwclN0YXJ0ID0gdG9rZW5TdGFy
dCgpOwotICAgIGludCBzdWJFeHByTGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBzdWJFeHBy
TGluZVN0YXJ0UG9zaXRpb24gPSB0b2tlbkxpbmVTdGFydCgpOwotICAgIEFTU0VSVChzdWJFeHBy
U3RhcnQgPj0gc3ViRXhwckxpbmVTdGFydFBvc2l0aW9uKTsKKyAgICBKU1RleHRQb3NpdGlvbiBz
dWJFeHByU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICBBU1NFUlQoc3ViRXhwclN0
YXJ0Lm9mZnNldCA+PSBzdWJFeHByU3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICBKU1Rva2Vu
TG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICBUcmVlRXhwcmVzc2lvbiBl
eHByID0gcGFyc2VNZW1iZXJFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGV4
cHIpOwpAQCAtMTc2Niw3ICsxNzA3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzcwogICAgIGNhc2UgUExVU1BMVVM6CiAgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJl
c3Npb25Db3VudCsrOwogICAgICAgICBtX25vbkxIU0NvdW50Kys7Ci0gICAgICAgIGV4cHIgPSBj
b250ZXh0Lm1ha2VQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BQbHVzUGx1cywgc3ViRXhw
clN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwgdG9rZW5FbmQoKSwgdG9rZW5MaW5lKCksIHRva2VuTGlu
ZVN0YXJ0KCkpOworICAgICAgICBleHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRp
b24sIGV4cHIsIE9wUGx1c1BsdXMsIHN1YkV4cHJTdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24o
KSwgdG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAg
ICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGlzRXZhbE9yQXJndW1l
bnRzLCAiJyIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlmaWVk
IGluIHN0cmljdCBtb2RlIik7CiAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChyZXF1aXJlc0xF
eHByKTsKQEAgLTE3NzUsNyArMTcxNiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3MKICAgICBjYXNlIE1JTlVTTUlOVVM6CiAgICAgICAgIG1fbm9uVHJpdmlhbEV4
cHJlc3Npb25Db3VudCsrOwogICAgICAgICBtX25vbkxIU0NvdW50Kys7Ci0gICAgICAgIGV4cHIg
PSBjb250ZXh0Lm1ha2VQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BNaW51c01pbnVzLCBz
dWJFeHByU3RhcnQsIGxhc3RUb2tlbkVuZCgpLCB0b2tlbkVuZCgpLCB0b2tlbkxpbmUoKSwgdG9r
ZW5MaW5lU3RhcnQoKSk7CisgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQb3N0Zml4Tm9kZShs
b2NhdGlvbiwgZXhwciwgT3BNaW51c01pbnVzLCBzdWJFeHByU3RhcnQsIGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCksIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgIG1fYXNzaWdubWVudENvdW50
Kys7CiAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShpc0V2YWxP
ckFyZ3VtZW50cywgIiciLCBtX2xhc3RJZGVudGlmaWVyLT5pbXBsKCksICInIGNhbm5vdCBiZSBt
b2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QocmVx
dWlyZXNMRXhwcik7CkBAIC0xNzg1LDkgKzE3MjYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBpbnQg
ZW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgaW50IGVuZExpbmUgPSBsYXN0VG9rZW5MaW5lKCk7
Ci0gICAgaW50IGVuZExpbmVTdGFydFBvc2l0aW9uID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7Cisg
ICAgSlNUZXh0UG9zaXRpb24gZW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKIAogICAgIGlm
ICghVHJlZUJ1aWxkZXI6OkNyZWF0ZXNBU1QgJiYgKG1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCB8
fCAhc3RyaWN0TW9kZSgpKSkKICAgICAgICAgcmV0dXJuIGV4cHI7CkBAIC0xODEwLDEyICsxNzQ5
LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBMVVNQTFVTOgogICAgICAgICBjYXNlIEFVVE9QTFVT
UExVUzoKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhOb2RlKGxvY2F0aW9u
LCBleHByLCBPcFBsdXNQbHVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tl
blN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQsIHN1YkV4cHJMaW5lLCBzdWJFeHBy
TGluZVN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVByZWZp
eE5vZGUobG9jYXRpb24sIGV4cHIsIE9wUGx1c1BsdXMsIGNvbnRleHQudW5hcnlUb2tlblN0YWNr
TGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCksIHN1YkV4cHJTdGFydCArIDEsIGVuZCk7CiAgICAg
ICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCsrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgTUlOVVNNSU5VUzoKICAgICAgICAgY2FzZSBBVVRPTUlOVVNNSU5VUzoKLSAgICAgICAg
ICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBPcE1pbnVz
TWludXMsIGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCks
IHN1YkV4cHJTdGFydCArIDEsIGVuZCwgc3ViRXhwckxpbmUsIHN1YkV4cHJMaW5lU3RhcnRQb3Np
dGlvbik7CisgICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlUHJlZml4Tm9kZShsb2NhdGlv
biwgZXhwciwgT3BNaW51c01pbnVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0
b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQpOwogICAgICAgICAgICAgbV9h
c3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVP
RjoKQEAgLTE4MjYsMTQgKzE3NjUsMTMgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgREVMRVRFVE9LRU46
CiAgICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoY29udGV4
dC5pc1Jlc29sdmUoZXhwciksICJDYW5ub3QgZGVsZXRlIHVucXVhbGlmaWVkIHByb3BlcnR5Iiwg
bV9sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgICAg
IGV4cHIgPSBjb250ZXh0Lm1ha2VEZWxldGVOb2RlKGxvY2F0aW9uLCBleHByLCBjb250ZXh0LnVu
YXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBlbmQsIGVuZCwgZW5kTGlu
ZSwgZW5kTGluZVN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFr
ZURlbGV0ZU5vZGUobG9jYXRpb24sIGV4cHIsIGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0
YXJ0KHRva2VuU3RhY2tEZXB0aCksIGVuZCwgZW5kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgc29tZXRoaW5nIGhh
cyBnb25lIGhvcnJpYmx5IGhvcnJpYmx5IHdyb25nCiAgICAgICAgICAgICBDUkFTSCgpOwogICAg
ICAgICB9CiAgICAgICAgIHN1YkV4cHJTdGFydCA9IGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFz
dFN0YXJ0KHRva2VuU3RhY2tEZXB0aCk7Ci0gICAgICAgIHN1YkV4cHJMaW5lU3RhcnRQb3NpdGlv
biA9IGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdExpbmVTdGFydFBvc2l0aW9uKHRva2VuU3Rh
Y2tEZXB0aCk7CiAgICAgICAgIGNvbnRleHQudW5hcnlUb2tlblN0YWNrUmVtb3ZlTGFzdCh0b2tl
blN0YWNrRGVwdGgpOwogICAgIH0KICAgICByZXR1cm4gZXhwcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDc1LDggKzQ3NSw3
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHBhcnNlSW5uZXIoKTsKIAogICAgIHZvaWQgZGlkRmlu
aXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyosIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0
YWNrczo6VmFyU3RhY2s+KiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckFyZW5h
RGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qLCBDb2RlRmVhdHVyZXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBJZGVudGlmaWVyU2V0Jik7CisgICAg
ICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qLCBD
b2RlRmVhdHVyZXMsIGludCwgSWRlbnRpZmllclNldCYpOwogCiAgICAgLy8gVXNlZCB0byBkZXRl
cm1pbmUgdHlwZSBvZiBlcnJvciB0byByZXBvcnQuCiAgICAgYm9vbCBpc0Z1bmN0aW9uQm9keU5v
ZGUoU2NvcGVOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTQ4NCwyMCArNDgzLDIyIEBAIHBy
aXZhdGU6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbmV4dCh1bnNpZ25lZCBsZXhlckZsYWdz
ID0gMCkKICAgICB7Ci0gICAgICAgIG1fbGFzdExpbmUgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGlu
ZTsKLSAgICAgICAgbV9sYXN0VG9rZW5FbmQgPSBtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0
OwotICAgICAgICBtX2xhc3RUb2tlbkxpbmVTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQ7Ci0gICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKG1fbGFzdExp
bmUpOwotICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleCgmbV90b2tlbi5tX2Rh
dGEsICZtX3Rva2VuLm1fbG9jYXRpb24sIGxleGVyRmxhZ3MsIHN0cmljdE1vZGUoKSk7CisgICAg
ICAgIGludCBsYXN0TGluZSA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lOworICAgICAgICBpbnQg
bGFzdFRva2VuRW5kID0gbV90b2tlbi5tX2xvY2F0aW9uLmVuZE9mZnNldDsKKyAgICAgICAgaW50
IGxhc3RUb2tlbkxpbmVTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7
CisgICAgICAgIG1fbGFzdFRva2VuRW5kUG9zaXRpb24gPSBKU1RleHRQb3NpdGlvbihsYXN0TGlu
ZSwgbGFzdFRva2VuRW5kLCBsYXN0VG9rZW5MaW5lU3RhcnQpOworICAgICAgICBtX2xleGVyLT5z
ZXRMYXN0TGluZU51bWJlcihsYXN0TGluZSk7CisgICAgICAgIG1fdG9rZW4ubV90eXBlID0gbV9s
ZXhlci0+bGV4KCZtX3Rva2VuLCBsZXhlckZsYWdzLCBzdHJpY3RNb2RlKCkpOwogICAgIH0KIAog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBuZXh0RXhwZWN0SWRlbnRpZmllcih1bnNpZ25lZCBsZXhl
ckZsYWdzID0gMCkKICAgICB7Ci0gICAgICAgIG1fbGFzdExpbmUgPSBtX3Rva2VuLm1fbG9jYXRp
b24ubGluZTsKLSAgICAgICAgbV9sYXN0VG9rZW5FbmQgPSBtX3Rva2VuLm1fbG9jYXRpb24uZW5k
T2Zmc2V0OwotICAgICAgICBtX2xhc3RUb2tlbkxpbmVTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlv
bi5saW5lU3RhcnRPZmZzZXQ7Ci0gICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKG1f
bGFzdExpbmUpOwotICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleEV4cGVjdElk
ZW50aWZpZXIoJm1fdG9rZW4ubV9kYXRhLCAmbV90b2tlbi5tX2xvY2F0aW9uLCBsZXhlckZsYWdz
LCBzdHJpY3RNb2RlKCkpOworICAgICAgICBpbnQgbGFzdExpbmUgPSBtX3Rva2VuLm1fbG9jYXRp
b24ubGluZTsKKyAgICAgICAgaW50IGxhc3RUb2tlbkVuZCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5l
bmRPZmZzZXQ7CisgICAgICAgIGludCBsYXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9j
YXRpb24ubGluZVN0YXJ0T2Zmc2V0OworICAgICAgICBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uID0g
SlNUZXh0UG9zaXRpb24obGFzdExpbmUsIGxhc3RUb2tlbkVuZCwgbGFzdFRva2VuTGluZVN0YXJ0
KTsKKyAgICAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIobGFzdExpbmUpOworICAgICAg
ICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleEV4cGVjdElkZW50aWZpZXIoJm1fdG9rZW4s
IGxleGVyRmxhZ3MsIHN0cmljdE1vZGUoKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBi
b29sIG5leHRUb2tlbklzQ29sb24oKQpAQCAtNTE1LDcgKzUxNiw3IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgQUxXQVlTX0lOTElORSBTdHJpbmcgZ2V0VG9rZW4oKSB7CiAgICAgICAgIFNvdXJjZVBy
b3ZpZGVyKiBzb3VyY2VQcm92aWRlciA9IG1fc291cmNlLT5wcm92aWRlcigpOwotICAgICAgICBy
ZXR1cm4gc291cmNlUHJvdmlkZXItPmdldFJhbmdlKHRva2VuU3RhcnQoKSwgdG9rZW5FbmQoKSk7
CisgICAgICAgIHJldHVybiBzb3VyY2VQcm92aWRlci0+Z2V0UmFuZ2UodG9rZW5TdGFydCgpLCB0
b2tlbkVuZFBvc2l0aW9uKCkub2Zmc2V0KTsKICAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElO
RSBib29sIG1hdGNoKEpTVG9rZW5UeXBlIGV4cGVjdGVkKQpAQCAtNTI4LDYgKzUyOSwxMSBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0Owog
ICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiB0b2tl
blN0YXJ0UG9zaXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9zdGFydFBv
c2l0aW9uOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgaW50IHRva2VuTGluZSgpCiAgICAg
ewogICAgICAgICByZXR1cm4gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7CkBAIC01MzgsOSArNTQ0
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRva2VuU3RhcnQoKSAtIHRva2VuTGluZVN0
YXJ0KCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCB0b2tlbkVuZCgpCisg
ICAgQUxXQVlTX0lOTElORSBjb25zdCBKU1RleHRQb3NpdGlvbiYgdG9rZW5FbmRQb3NpdGlvbigp
CiAgICAgewotICAgICAgICByZXR1cm4gbV90b2tlbi5tX2xvY2F0aW9uLmVuZE9mZnNldDsKKyAg
ICAgICAgcmV0dXJuIG1fdG9rZW4ubV9lbmRQb3NpdGlvbjsKICAgICB9CiAgICAgCiAgICAgQUxX
QVlTX0lOTElORSB1bnNpZ25lZCB0b2tlbkxpbmVTdGFydCgpCkBAIC05MTUsNyArOTIxLDcgQEAg
cHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Ym9vbCBzdHJpY3QsIGNsYXNzIFRyZWVCdWlsZGVyPiBB
TFdBWVNfSU5MSU5FIFRyZWVQcm9wZXJ0eSBwYXJzZVByb3BlcnR5KFRyZWVCdWlsZGVyJik7CiAg
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlv
bkJvZHkgcGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFy
c2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9uIHBhcnNlVmFyRGVjbGFyYXRp
b25MaXN0KFRyZWVCdWlsZGVyJiwgaW50JiBkZWNsYXJhdGlvbnMsIGNvbnN0IElkZW50aWZpZXIq
JiBsYXN0SWRlbnQsIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIGludCYgaWRlbnRT
dGFydCwgaW50JiBpbml0U3RhcnQsIGludCYgaW5pdEVuZCk7CisgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9uIHBhcnNlVmFyRGVjbGFy
YXRpb25MaXN0KFRyZWVCdWlsZGVyJiwgaW50JiBkZWNsYXJhdGlvbnMsIGNvbnN0IElkZW50aWZp
ZXIqJiBsYXN0SWRlbnQsIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIEpTVGV4dFBv
c2l0aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdFN0YXJ0LCBKU1RleHRQb3Np
dGlvbiYgaW5pdEVuZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNf
SU5MSU5FIFRyZWVDb25zdERlY2xMaXN0IHBhcnNlQ29uc3REZWNsYXJhdGlvbkxpc3QoVHJlZUJ1
aWxkZXImIGNvbnRleHQpOwogICAgIHRlbXBsYXRlIDxGdW5jdGlvblJlcXVpcmVtZW50cywgYm9v
bCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgY2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgcGFyc2VG
dW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImLCBjb25zdCBJZGVudGlmaWVyKiYsIFRyZWVGb3JtYWxQ
YXJhbWV0ZXJMaXN0JiwgVHJlZUZ1bmN0aW9uQm9keSYsIHVuc2lnbmVkJiBvcGVuQnJhY2VPZmZz
ZXQsIHVuc2lnbmVkJiBjbG9zZUJyYWNlT2Zmc2V0LCBpbnQmIGJvZHlTdGFydExpbmUsIHVuc2ln
bmVkJiBib2R5U3RhcnRDb2x1bW4pOwogICAgIEFMV0FZU19JTkxJTkUgaW50IGlzQmluYXJ5T3Bl
cmF0b3IoSlNUb2tlblR5cGUpOwpAQCAtOTM1LDE5ICs5NDEsOSBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gbV9zdGFjay5pc1NhZmVUb1JlY3Vyc2UoKTsKICAgICB9CiAgICAgCi0gICAgaW50
IGxhc3RUb2tlbkVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9sYXN0VG9rZW5F
bmQ7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGFzdFRva2VuTGluZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9sYXN0TGluZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBsYXN0VG9r
ZW5MaW5lU3RhcnQoKSBjb25zdAorICAgIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9sYXN0VG9rZW5MaW5l
U3RhcnQ7CisgICAgICAgIHJldHVybiBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uOwogICAgIH0KIAog
ICAgIGJvb2wgaGFzRXJyb3IoKSBjb25zdApAQCAtOTY1LDEwICs5NjEsNyBAQCBwcml2YXRlOgog
ICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBKU1Rva2VuIG1fdG9rZW47CiAgICAgYm9v
bCBtX2FsbG93c0luOwotICAgIHVuc2lnbmVkIG1fbGFzdExpbmU7Ci0gICAgaW50IG1fbGFzdFRv
a2VuRW5kOwotICAgIHVuc2lnbmVkIG1fbGFzdFRva2VuTGluZTsKLSAgICB1bnNpZ25lZCBtX2xh
c3RUb2tlbkxpbmVTdGFydDsKKyAgICBKU1RleHRQb3NpdGlvbiBtX2xhc3RUb2tlbkVuZFBvc2l0
aW9uOwogICAgIGludCBtX2Fzc2lnbm1lbnRDb3VudDsKICAgICBpbnQgbV9ub25MSFNDb3VudDsK
ICAgICBib29sIG1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZDsKQEAgLTEwNTEsNyArMTA0NCw3IEBA
IFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICptX3NvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX251bUNvbnN0YW50cyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKG1fc291cmNlLT5m
aXJzdExpbmUoKSwgbV9sYXN0TGluZSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVy
LT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCkpOworICAgICAgICByZXN1bHQtPnNldExvYyhtX3Nv
dXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgbV9sZXhlci0+
Y3VycmVudE9mZnNldCgpLCBtX2xleGVyLT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCkpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGNhbiBuZXZlciBzZWUgYSBzeW50YXggZXJyb3Igd2hl
biByZXBhcnNpbmcgYSBmdW5jdGlvbiwgc2luY2Ugd2Ugc2hvdWxkIGhhdmUKICAgICAgICAgLy8g
cmVwb3J0ZWQgdGhlIGVycm9yIHdoZW4gcGFyc2luZyB0aGUgY29udGFpbmluZyBwcm9ncmFtIG9y
IGV2YWwgY29kZS4gU28gaWYgd2UncmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyVG9rZW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJUb2tlbnMuaAkocmV2aXNpb24gMTUyNTgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCwyMyBAQCBlbnVtIEpTVG9rZW5UeXBlIHsKICAgICBJTlZBTElEX1NUUklOR19MSVRFUkFMX0VS
Uk9SVE9LID0gOSB8IEVycm9yVG9rZW5GbGFnLAogfTsKIAorc3RydWN0IEpTVGV4dFBvc2l0aW9u
IHsKKyAgICBKU1RleHRQb3NpdGlvbigpIDogbGluZSgwKSwgb2Zmc2V0KDApLCBsaW5lU3RhcnRP
ZmZzZXQoMCkgeyB9CisgICAgSlNUZXh0UG9zaXRpb24oaW50IF9saW5lLCBpbnQgX29mZnNldCwg
aW50IF9saW5lU3RhcnRPZmZzZXQpIDogbGluZShfbGluZSksIG9mZnNldChfb2Zmc2V0KSwgbGlu
ZVN0YXJ0T2Zmc2V0KF9saW5lU3RhcnRPZmZzZXQpIHsgfQorICAgIEpTVGV4dFBvc2l0aW9uKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBvdGhlcikgOiBsaW5lKG90aGVyLmxpbmUpLCBvZmZzZXQob3Ro
ZXIub2Zmc2V0KSwgbGluZVN0YXJ0T2Zmc2V0KG90aGVyLmxpbmVTdGFydE9mZnNldCkgeyB9CisK
KyAgICBKU1RleHRQb3NpdGlvbiBvcGVyYXRvcisoaW50IGFkanVzdG1lbnQpIGNvbnN0IHsgcmV0
dXJuIEpTVGV4dFBvc2l0aW9uKGxpbmUsIG9mZnNldCArIGFkanVzdG1lbnQsIGxpbmVTdGFydE9m
ZnNldCk7IH0KKyAgICBKU1RleHRQb3NpdGlvbiBvcGVyYXRvcisodW5zaWduZWQgYWRqdXN0bWVu
dCkgY29uc3QgeyByZXR1cm4gKnRoaXMgKyBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdG1lbnQpOyB9
CisgICAgSlNUZXh0UG9zaXRpb24gb3BlcmF0b3ItKGludCBhZGp1c3RtZW50KSBjb25zdCB7IHJl
dHVybiAqdGhpcyArICgtIGFkanVzdG1lbnQpOyB9CisgICAgSlNUZXh0UG9zaXRpb24gb3BlcmF0
b3ItKHVuc2lnbmVkIGFkanVzdG1lbnQpIGNvbnN0IHsgcmV0dXJuICp0aGlzICsgKC0gc3RhdGlj
X2Nhc3Q8aW50PihhZGp1c3RtZW50KSk7IH0KKworICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsg
cmV0dXJuIG9mZnNldDsgfQorCisgICAgaW50IGxpbmU7CisgICAgaW50IG9mZnNldDsKKyAgICBp
bnQgbGluZVN0YXJ0T2Zmc2V0OworfTsKKwogdW5pb24gSlNUb2tlbkRhdGEgewogICAgIHN0cnVj
dCB7CiAgICAgICAgIHVpbnQzMl90IGxpbmU7CkBAIC0xODcsNiArMjA0LDggQEAgc3RydWN0IEpT
VG9rZW4gewogICAgIEpTVG9rZW5UeXBlIG1fdHlwZTsKICAgICBKU1Rva2VuRGF0YSBtX2RhdGE7
CiAgICAgSlNUb2tlbkxvY2F0aW9uIG1fbG9jYXRpb247CisgICAgSlNUZXh0UG9zaXRpb24gbV9z
dGFydFBvc2l0aW9uOworICAgIEpTVGV4dFBvc2l0aW9uIG1fZW5kUG9zaXRpb247CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxNTI1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDIxICsxMTks
MjEgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEb250QnVpbGRTdHJpbmdz
ID0gTGV4ZXJGbGFnc0RvbnRCdWlsZFN0cmluZ3M7CiAKICAgICBpbnQgY3JlYXRlU291cmNlRWxl
bWVudHMoKSB7IHJldHVybiAxOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2Fs
bE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiBDYWxsRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VGdW5j
dGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBDYWxsRXhwcjsgfQogICAgIHZvaWQgYXBwZW5kVG9Db21tYShFeHByZXNz
aW9uVHlwZSYgYmFzZSwgRXhwcmVzc2lvblR5cGUgcmlnaHQpIHsgYmFzZSA9IHJpZ2h0OyB9CiAg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29tbWFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSByaWdodCkgeyByZXR1cm4gcmlnaHQ7IH0K
LSAgICBFeHByZXNzaW9uVHlwZSBtYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIEV4cHJlc3Npb25UeXBlLCBib29sLCBib29sLCBp
bnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KLSAgICBF
eHByZXNzaW9uVHlwZSBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uVHlwZSwgT3BlcmF0b3IsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBQ
cmVFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQpIHsgcmV0dXJuIFBvc3RFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZUFzc2ln
bk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBF
eHByZXNzaW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdu
bWVudEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIFByZUV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtlUG9zdGZpeE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBQb3N0RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIG1ha2VUeXBlT2ZO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBUeXBl
b2ZFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZURlbGV0ZU5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiBEZWxldGVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZURlbGV0ZU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0
dXJuIERlbGV0ZUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlTmVnYXRlTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9
CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZUJpdHdpc2VOb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVMb2dpY2FsTm90KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Np
b25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVV
bmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJu
IFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVZvaWQoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4
cHJlc3Npb25UeXBlIHRoaXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFRo
aXNFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVzb2x2ZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gUmVz
b2x2ZUV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQpIHsgcmV0dXJuIFJlc29sdmVFeHBy
OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mKSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJl
dHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFycmF5
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gQXJyYXlMaXRlcmFsRXhwcjsg
fQpAQCAtMTQyLDEzICsxNDIsMTMgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZVN0cmluZyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKikgeyByZXR1
cm4gU3RyaW5nRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUJvb2xlYW4oY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgYm9vbCkgeyByZXR1cm4gQm9vbEV4cHI7IH0KICAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVOdWxsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIE51bGxF
eHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQnJhY2tldEFjY2Vzcyhjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwg
aW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBCcmFja2V0RXhwcjsgfQotICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZURvdEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
VHlwZSwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVy
biBEb3RFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVnRXhwKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXIm
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBZYXJyOjpjaGVja1N5bnRheChwYXR0ZXJuLnN0cmlu
ZygpKSA/IDAgOiBSZWdFeHBFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTmV3RXhw
cihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZUJyYWNrZXRBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUs
IEV4cHJlc3Npb25UeXBlLCBib29sLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBCcmFja2V0RXhw
cjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZURvdEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uVHlwZSwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQp
IHsgcmV0dXJuIERvdEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZWdFeHAoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYgcGF0dGVybiwgY29uc3QgSWRl
bnRpZmllciYsIGludCkgeyByZXR1cm4gWWFycjo6Y2hlY2tTeW50YXgocGF0dGVybi5zdHJpbmco
KSkgPyAwIDogUmVnRXhwRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU5ld0V4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gTmV3RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU5ld0V4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50KSB7IHJldHVy
biBOZXdFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhw
cmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQotICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRl
bnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1
cm4gQXNzaWdubWVudEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBc3NpZ25SZXNv
bHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9u
VHlwZSwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KICAgICBFeHBy
ZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29u
c3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1
cm4gRnVuY3Rpb25FeHByOyB9CiAgICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGJvb2wpIHsgcmV0dXJu
IDE7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uU3RhcnQoaW50LCBpbnQpIHsgfQpAQCAtMTg1LDIy
ICsxODUsMjIgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVJZlN0YXRlbWVudChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQg
Y3JlYXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRm9yTG9vcChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9
Ci0gICAgaW50IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJ
ZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVGb3JJbkxvb3AoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUZvckluTG9vcChjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNy
ZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVFbXB0eVN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNy
ZWF0ZVZhclN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50KSB7
IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZVJldHVyblN0YXRlbWVudChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7
IH0KLSAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlQnJl
YWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGlu
dCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUNvbnRp
bnVlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwg
aW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBj
cmVhdGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyBy
ZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBp
bnQgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBp
bnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50KSB7IHJldHVybiAx
OyB9CiAgICAgaW50IGNyZWF0ZVRyeVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBp
bnQsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
ICAgICBpbnQgY3JlYXRlU3dpdGNoU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRl
V2hpbGVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50
KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0
dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlV2l0aFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50
IGNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQs
IGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUxhYmVsU3RhdGVtZW50KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBp
bnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVUaHJvd1N0YXRlbWVudChjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlTGFiZWxTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0K
KyAgICBpbnQgY3JlYXRlVGhyb3dTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVEZWJ1Z2dlcihjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVD
b25zdFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiAxOyB9CiAgICAgaW50IGFwcGVuZENvbnN0RGVjbChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQpIHsgcmV0dXJuIDE7IH0KQEAgLTIyMiw3ICsy
MjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciosIGJvb2wp
IHsgfQogICAgIGludCBjb21iaW5lQ29tbWFOb2Rlcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBp
bnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBldmFsQ291bnQoKSBjb25zdCB7IHJldHVy
biAwOyB9Ci0gICAgdm9pZCBhcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhpbnQmIG9wZXJhbmRT
dGFja0RlcHRoLCBpbnQgZXhwciwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGJvb2wpCisgICAg
dm9pZCBhcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhpbnQmIG9wZXJhbmRTdGFja0RlcHRoLCBp
bnQgZXhwciwgaW50LCBpbnQsIGludCwgYm9vbCkKICAgICB7CiAgICAgICAgIGlmICghbV90b3BC
aW5hcnlFeHByKQogICAgICAgICAgICAgbV90b3BCaW5hcnlFeHByID0gZXhwcjsKQEAgLTI0MCwx
MyArMjQwLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9yU3RhY2tBcHBlbmQoaW50JiBv
cGVyYXRvclN0YWNrRGVwdGgsIGludCwgaW50KSB7IG9wZXJhdG9yU3RhY2tEZXB0aCsrOyB9CiAg
ICAgaW50IHBvcE9wZXJhbmRTdGFjayhpbnQmKSB7IGludCByZXMgPSBtX3RvcEJpbmFyeUV4cHI7
IG1fdG9wQmluYXJ5RXhwciA9IDA7IHJldHVybiByZXM7IH0KICAgICAKLSAgICB2b2lkIGFwcGVu
ZFVuYXJ5VG9rZW4oaW50JiBzdGFja0RlcHRoLCBpbnQgdG9rLCBpbnQsIGludCwgaW50KSB7IHN0
YWNrRGVwdGggPSAxOyBtX3RvcFVuYXJ5VG9rZW4gPSB0b2s7IH0KKyAgICB2b2lkIGFwcGVuZFVu
YXJ5VG9rZW4oaW50JiBzdGFja0RlcHRoLCBpbnQgdG9rLCBpbnQpIHsgc3RhY2tEZXB0aCA9IDE7
IG1fdG9wVW5hcnlUb2tlbiA9IHRvazsgfQogICAgIGludCB1bmFyeVRva2VuU3RhY2tMYXN0VHlw
ZShpbnQmKSB7IHJldHVybiBtX3RvcFVuYXJ5VG9rZW47IH0KLSAgICB1bnNpZ25lZCB1bmFyeVRv
a2VuU3RhY2tMYXN0U3RhcnQoaW50JikgeyByZXR1cm4gMDsgfQotICAgIHVuc2lnbmVkIHVuYXJ5
VG9rZW5TdGFja0xhc3RMaW5lU3RhcnRQb3NpdGlvbihpbnQmKSB7IHJldHVybiAwOyB9CisgICAg
SlNUZXh0UG9zaXRpb24gdW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KGludCYpIHsgcmV0dXJuIEpT
VGV4dFBvc2l0aW9uKDAsIDAsIDApOyB9CiAgICAgdm9pZCB1bmFyeVRva2VuU3RhY2tSZW1vdmVM
YXN0KGludCYgc3RhY2tEZXB0aCkgeyBzdGFja0RlcHRoID0gMDsgfQogICAgIAotICAgIHZvaWQg
YXNzaWdubWVudFN0YWNrQXBwZW5kKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwg
T3BlcmF0b3IpIHsgfQorICAgIHZvaWQgYXNzaWdubWVudFN0YWNrQXBwZW5kKGludCwgaW50LCBp
bnQsIGludCwgaW50LCBPcGVyYXRvcikgeyB9CiAgICAgaW50IGNyZWF0ZUFzc2lnbm1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDE7IH0KICAgICBjb25zdCBJZGVudGlmaWVyJiBn
ZXROYW1lKGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0eSkgY29uc3QgeyBBU1NFUlQocHJvcGVydHku
bmFtZSk7IHJldHVybiAqcHJvcGVydHkubmFtZTsgfQogICAgIFByb3BlcnR5Tm9kZTo6VHlwZSBn
ZXRUeXBlKGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0eSkgY29uc3QgeyByZXR1cm4gcHJvcGVydHku
dHlwZTsgfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMDctMjIgIE1hcmsgTGFt
ICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEZpeCBwcm9ibGVtcyB3aXRoIGRpdm90
IGFuZCBsaW5lU3RhcnQgbWlzbWF0Y2hlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExODY2Mi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCByZWdyZXNzaW9uIHRlc3QgY2FzZXMgZnJvbSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjYyCisgICAgICAgIGFuZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjY0LgorCisgICAgICAg
ICogZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2pzL3Njcmlw
dC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpzOgorICAgICAgICAodHJ5LnRvRnV6ejEpOgor
ICAgICAgICAodHJ5LnRvRnV6ejIpOgorCiAyMDEzLTA3LTExICBSb2dlciBGb25nICA8cm9nZXJf
Zm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBzaW1wbGVfYmxhbmsuc3dmIHdpdGgg
bGluZXMuc3dmIGZvciBzbmFwc2hvdHRpbmcgdGVzdHMuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2pzL2xpbmUtY29sdW1uLW51bWJlcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDE1MjU4MykKKysrIExheW91dFRlc3RzL2Zhc3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDE0IEBAIE9uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKICAgICAyICAgZXZhbCBhdCBbbmF0aXZlIGNvZGVd
CiAgICAgMyAgIGdsb2JhbCBjb2RlIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoxNTU6NQog
CistLT4gQ2FzZSAxOSBTdGFjayBUcmFjZToKKyAgICAwICAgdG9GdXp6MSBhdCBsaW5lLWNvbHVt
bi1udW1iZXJzLmh0bWw6MTY5OjI2CisgICAgMSAgIGdsb2JhbCBjb2RlIGF0IGxpbmUtY29sdW1u
LW51bWJlcnMuaHRtbDoxNzI6MTIKKworLS0+IENhc2UgMjAgU3RhY2sgVHJhY2U6CisgICAgMCAg
IHRvRnV6ejIgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE4Mzo0MQorICAgIDEgICBnbG9i
YWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTg3OjEyCisKIC0tPiBDYXNlIDEg
U3RhY2sgVHJhY2U6CiAgICAgMCAgIGdsb2JhbCBjb2RlIGF0IGxpbmUtY29sdW1uLW51bWJlcnMu
anM6MzoyOAogCkBAIC0xODMsNiArMTkxLDE0IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEEKICAgICAyICAgZXZhbCBhdCBbbmF0aXZlIGNvZGVdCiAgICAgMyAgIGds
b2JhbCBjb2RlIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6OTY6NQogCistLT4gQ2FzZSAxOSBT
dGFjayBUcmFjZToKKyAgICAwICAgdG9GdXp6MSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEw
ODoyNgorICAgIDEgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjExMTox
MgorCistLT4gQ2FzZSAyMCBTdGFjayBUcmFjZToKKyAgICAwICAgdG9GdXp6MiBhdCBsaW5lLWNv
bHVtbi1udW1iZXJzLmpzOjEyMDo0MQorICAgIDEgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVt
bi1udW1iZXJzLmpzOjEyNDoxMgorCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAK
IFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvbGluZS1jb2x1bW4tbnVt
YmVycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvbGluZS1jb2x1bW4t
bnVtYmVycy5odG1sCShyZXZpc2lvbiAxNTI1ODMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2xp
bmUtY29sdW1uLW51bWJlcnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSwzNSBA
QCBldmFsKCJcbiIgKwogIiIpOwogPC9zY3JpcHQ+CiAKKzwhLS0gQ2FzZSAxOTogUmVncmVzc2lv
biB0ZXN0IGZyb20gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODY2
MiAtLT4KKzxzY3JpcHQ+dGVzdElkKys7PC9zY3JpcHQ+Cis8c2NyaXB0PgordHJ5IHsKKyAgICBm
dW5jdGlvbiB0b0Z1enoxKCkgeworICAgICAgICBpZiAoUHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUu
ZG9Tb3J0KCkgaW5zdGFuY2VvZiAodGhpcyBePSBmdW5jdGlvbigpIHsKKyAgICAgICAgfSkpIHJl
dHVybiAyOyAKKyAgICB9CisgICAgdG9GdXp6MSgpOworfSBjYXRjaChlKSB7CisgICAgcHJpbnRT
dGFjayhlLnN0YWNrKTsKK30KKzwvc2NyaXB0PgorCis8IS0tIENhc2UgMjA6IFJlZ3Jlc3Npb24g
dGVzdCBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2NjQg
LS0+Cis8c2NyaXB0PnRlc3RJZCsrOzwvc2NyaXB0PgorPHNjcmlwdD4KK3RyeSB7CisgICAgZnVu
Y3Rpb24gdG9GdXp6MigpIHsKKyAgICAgICAgZm9yICh2YXIgY29uZiA9IG5ldyBDb25maWdPYmpl
Y3QoeworICAgICAgICB9KSBpbiBzdHIxLmxvY2FsZUNvbXBhcmUpIHsKKyAgICAgICAgfQorICAg
IH0KKyAgICB0b0Z1enoyKCk7Cit9IGNhdGNoKGUpIHsKKyAgICBwcmludFN0YWNrKGUuc3RhY2sp
OworfQorPC9zY3JpcHQ+CisKIDwhLS0gTm93IGRvIGl0IGFsbCBvdmVyIHdpdGggYSBsb2FkZWQg
c2NyaXB0IGZpbGUuIC0tPgogPHNjcmlwdD50ZXN0SWQgPSAwOzwvc2NyaXB0PgogCTxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvbGluZS1jb2x1bW4tbnVtYmVycy5qcyI+PC9zY3JpcHQ+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2xpbmUtY29s
dW1uLW51bWJlcnMuanMJKHJldmlzaW9uIDE1MjU4MykKKysrIExheW91dFRlc3RzL2Zhc3QvanMv
c2NyaXB0LXRlc3RzL2xpbmUtY29sdW1uLW51bWJlcnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw0ICsxMDEsMjkgQEAgZXZhbCgiXG4iICsKICJ9XG4iICsKICIiKTsKIAorLy8gQ2FzZSAxOTog
UmVncmVzc2lvbiB0ZXN0IGZyb20gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExODY2MgordGVzdElkKys7Cit0cnkgeworICAgIGZ1bmN0aW9uIHRvRnV6ejEoKSB7Cisg
ICAgICAgIGlmIChQcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5kb1NvcnQoKSBpbnN0YW5jZW9mICh0
aGlzIF49IGZ1bmN0aW9uKCkgeworICAgICAgICB9KSkgcmV0dXJuIDI7IAorICAgIH0KKyAgICB0
b0Z1enoxKCk7Cit9IGNhdGNoKGUpIHsKKyAgICBwcmludFN0YWNrKGUuc3RhY2spOworfQorCisv
LyBDYXNlIDIwOiBSZWdyZXNzaW9uIHRlc3QgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE4NjY0Cit0ZXN0SWQrKzsKK3RyeSB7CisgICAgZnVuY3Rpb24gdG9G
dXp6MigpIHsKKyAgICAgICAgZm9yICh2YXIgY29uZiA9IG5ldyBDb25maWdPYmplY3QoeworICAg
ICAgICB9KSBpbiBzdHIxLmxvY2FsZUNvbXBhcmUpIHsKKyAgICAgICAgfQorICAgIH0KKyAgICB0
b0Z1enoyKCk7Cit9IGNhdGNoKGUpIHsKKyAgICBwcmludFN0YWNrKGUuc3RhY2spOworfQorCiBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207398</attachid>
            <date>2013-07-24 09:05:56 -0700</date>
            <delta_ts>2013-07-29 09:02:14 -0700</delta_ts>
            <desc>patch 5: svn up&apos;ed to r153074 to resolve conflicts with some recent parser changes</desc>
            <filename>bug-118662c.patch</filename>
            <type>text/plain</type>
            <size>199902</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzMDc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxMy0wNy0yMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Rml4IHByb2JsZW1zIHdpdGggZGl2b3QgYW5kIGxpbmVTdGFydCBtaXNtYXRjaGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjYyLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIxNTI0OTQgYWRkZWQg
dGhlIHJlY29yZGluZyBvZiBsaW5lU3RhcnQgdmFsdWVzIGZvciBkaXZvdCBwb3NpdGlvbnMuCisg
ICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgY29tcHV0YXRpb24gb2YgY29sdW1uIG51bWJl
cnMuIFNpbWlsYXJseSwgaXQgYWxzbworICAgICAgICBhZGRlZCB0aGUgcmVjb3JkaW5nIG9mIGxp
bmUgbnVtYmVycyBmb3IgdGhlIGRpdm90IHBvc2l0aW9ucy4gT25lIHByb2JsZW0KKyAgICAgICAg
d2l0aCB0aGUgYXBwcm9hY2ggdGFrZW4gd2FzIHRoYXQgdGhlIGxpbmUgYW5kIGxpbmVTdGFydCB2
YWx1ZXMgd2VyZQorICAgICAgICByZWNvcmRlZCBpbmRlcGVuZGVudGx5LCBhbmQgaGVuY2Ugd2Vy
ZSBub3QgYWx3YXlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICAgc2FtcGxlZCBhdCB0aGUgc2Ft
ZSBwbGFjZSB0aGF0IHRoZSBkaXZvdCBwb3NpdGlvbiBpcyByZWNvcmRlZC4gVGhpcworICAgICAg
ICByZXN1bHRlZCBpbiBwb3RlbnRpYWwgbWlzbWF0Y2hlcyB0aGF0IGNhdXNlIHNvbWUgYXNzZXJ0
aW9ucyB0byBmYWlsLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgYSBK
U1RleHRQb3NpdGlvbiBhYnN0cmFjdGlvbiB0aGF0IHJlY29yZHMKKyAgICAgICAgdGhlIGRpdm90
IHBvc2l0aW9uLCBsaW5lLCBhbmQgbGluZVN0YXJ0IGFzIGEgc2luZ2xlIHF1YW50aXR5LiBXaGVy
ZXZlcgorICAgICAgICB3ZSByZWNvcmQgdGhlIGRpdm90IHBvc2l0aW9uIGFzIGFuIHVuc2lnbmVk
IGludCBwcmV2aW91c2x5LCB3ZSBub3cgcmVjb3JkCisgICAgICAgIGl0cyBKU1RleHRQb3NpdGlv
biB3aGljaCBjYXB0dXJlcyBhbGwgMyB2YWx1ZXMgaW4gb25lIGdvLiBUaGlzIGVuc3VyZXMKKyAg
ICAgICAgdGhhdCB0aGUgY2FwdHVyZWQgbGluZSBhbmQgbGluZVN0YXJ0IHdpbGwgYWx3YXlzIG1h
dGNoIHRoZSBjYXB0dXJlZCBkaXZvdAorICAgICAgICBwb3NpdGlvbi4KKworICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxW
YXJhcmdzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayk6CisgICAg
ICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5l
U3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHByZXNzaW9uSW5m
byk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5l
IGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OmVtaXRU
aHJvd1JlZmVyZW5jZUVycm9yKToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6TmV3RXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkV2YWxGdW5j
dGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAg
ICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9z
dGZpeE5vZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpEZWxldGVSZXNvbHZlTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OlByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6UHJlZml4Tm9k
ZTo6ZW1pdEJyYWNrZXQpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0RG90KToKKyAg
ICAgICAgKEpTQzo6VW5hcnlPcE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkJp
bmFyeU9wTm9kZTo6ZW1pdFN0cmNhdCk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUJpbmFyeU9w
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZk5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OmVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudCk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFz
c2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlEb3RO
b2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OldpdGhOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpUaHJvd05vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2Yg
cGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIv
QVNUQnVpbGRlci5oOgorICAgICAgICAtIFJlcGxhY2VkIEFTVEJ1aWxkZXI6OlBvc2l0aW9uSW5m
byB3aXRoIEpTVGV4dFBvc2l0aW9uLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpCaW5hcnlP
cEluZm86OkJpbmFyeU9wSW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OkFzc2lnbm1l
bnRJbmZvOjpBc3NpZ25tZW50SW5mbyk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZVJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCcmFja2V0QWNjZXNz
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG90QWNjZXNzKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVnRXhwKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y3JlYXRlTmV3RXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUFzc2ln
blJlc29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFeHByU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZUxhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
V2l0aFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVRocm93U3Rh
dGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6YXBwZW5kQmluYXJ5RXhwcmVzc2lv
bkluZm8pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphcHBlbmRVbmFyeVRva2VuKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6dW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6YXNzaWdubWVudFN0YWNrQXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWdubWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OnNldEV4Y2VwdGlvbkxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFr
ZURlbGV0ZU5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxs
Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VCaW5hcnlOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlUHJlZml4Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VQ
b3N0Zml4Tm9kZSk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFz
c2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvTGV4
ZXIuY3BwOgorICAgICAgICAoSlNDOjo6OmxleCk6CisgICAgICAgIC0gQWRkZWQgc3VwcG9ydCBm
b3IgY2FwdHVyaW5nIHRoZSBhcHByb3ByaWF0ZSBKU1RleHRQb3NpdGlvbnMgaW5zdGVhZAorICAg
ICAgICAgIG9mIGp1c3QgdGhlIGNoYXJhY3RlciBvZmZzZXQuCisgICAgICAgICogcGFyc2VyL0xl
eGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50UG9zaXRpb24pOgorICAgICAgICAo
SlNDOjo6OmxleEV4cGVjdElkZW50aWZpZXIpOgorICAgICAgICAtIEFkZGVkIHN1cHBvcnQgZm9y
IGNhcHR1cmluZyB0aGUgYXBwcm9wcmlhdGUgSlNUZXh0UG9zaXRpb25zIGluc3RlYWQKKyAgICAg
ICAgICBvZiBqdXN0IHRoZSBjaGFyYWN0ZXIgb2Zmc2V0LgorICAgICAgICAqIHBhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlND
OjpSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpFdmFsRnVuY3Rpb25D
YWxsTm9kZTo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNh
bGxWYWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5vZGU6OkZ1bmN0aW9uQ2FsbERvdE5vZGUpOgor
ICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6Q2FsbEZ1bmN0aW9uQ2FsbERv
dE5vZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OkFwcGx5RnVu
Y3Rpb25DYWxsRG90Tm9kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjpQb3N0Zml4Tm9k
ZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZSk6
CisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2RlOjpEZWxldGVCcmFja2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5vZGUpOgorICAgICAgICAoSlND
OjpQcmVmaXhOb2RlOjpQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeVJlc29s
dmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5
QnJhY2tldE5vZGU6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2ln
bkJyYWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRv
dE5vZGU6OkFzc2lnbkRvdE5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5RG90Tm9kZTo6
UmVhZE1vZGlmeURvdE5vZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25FcnJvck5vZGU6OkFzc2ln
bkVycm9yTm9kZSk6CisgICAgICAgIChKU0M6OldpdGhOb2RlOjpXaXRoTm9kZSk6CisgICAgICAg
IChKU0M6OkZvckluTm9kZTo6Rm9ySW5Ob2RlKToKKyAgICAgICAgLSBVc2UgSlNUZXh0UG9zaXRp
b24gaW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUgYW5kIGxpbmVTdGFydCBleHBsaWNpdGx5LgorICAg
ICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlN0YXRlbWVudE5vZGU6OnNl
dExvYyk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBs
aW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoK
KyAgICAgICAgKEpTQzo6Tm9kZTo6bGluZU5vKToKKyAgICAgICAgKEpTQzo6Tm9kZTo6c3RhcnRP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpOb2RlOjpsaW5lU3RhcnRPZmZzZXQpOgorICAgICAgICAo
SlNDOjpOb2RlOjpwb3NpdGlvbik6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4cHJlc3Npb25E
YXRhOjpUaHJvd2FibGVFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4
cHJlc3Npb25EYXRhOjpzZXRFeGNlcHRpb25Tb3VyY2VDb2RlKToKKyAgICAgICAgKEpTQzo6VGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGE6OmRpdm90KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhw
cmVzc2lvbkRhdGE6OmRpdm90U3RhcnQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVFeHByZXNz
aW9uRGF0YTo6ZGl2b3RFbmQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVTdWJFeHByZXNzaW9u
RGF0YTo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEpOgorICAgICAgICAoSlNDOjpUaHJvd2Fi
bGVTdWJFeHByZXNzaW9uRGF0YTo6c2V0U3ViZXhwcmVzc2lvbkluZm8pOgorICAgICAgICAoSlND
OjpUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVzc2lvbkRpdm90KToKKyAgICAg
ICAgKEpTQzo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGE6OnN1YmV4cHJlc3Npb25TdGFydCk6
CisgICAgICAgIChKU0M6OlRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhOjpzdWJleHByZXNzaW9u
RW5kKToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YTo6
VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChKU0M6OlRocm93
YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGE6OnNldFN1YmV4cHJlc3Npb25JbmZvKToKKyAg
ICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVz
c2lvbkRpdm90KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9u
RGF0YTo6c3ViZXhwcmVzc2lvblN0YXJ0KToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4
ZWRTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVzc2lvbkVuZCk6CisgICAgICAgIC0gVXNlIEpT
VGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGlj
aXRseS4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQYXJz
ZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAtIFVzZSBKU1RleHRQ
b3NpdGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHku
CisgICAgICAgIChKU0M6Ojo6ZGlkRmluaXNoUGFyc2luZyk6CisgICAgICAgIC0gUmVtb3ZlIHNl
dHRpbmcgb2YgbV9sYXN0TGluZSB2YWx1ZS4gV2UgYWx3YXlzIHBhc3MgaW4gdGhlIHZhbHVlIGZy
b20KKyAgICAgICAgICBtX2xhc3RMaW5lIGFueXdheS4gU28sIHRoaXMgYXNzaWdubWVudCBpcyBl
ZmZlY3RpdmVseSBhIG5vcC4KKyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uKToK
KyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdCk6CisgICAgICAgIChKU0M6
Ojo6cGFyc2VGb3JTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQnJlYWtTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjo6OnBhcnNlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVRocm93
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVdpdGhTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJsb2Nr
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24pOgor
ICAgICAgICAoSlNDOjpMYWJlbEluZm86OkxhYmVsSW5mbyk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VFeHBy
ZXNzaW9uU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUJpbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAo
SlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJpbWFyeUV4cHJl
c3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6CisgICAgICAg
IChKU0M6Ojo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAtIFVzZSBKU1RleHRQb3Np
dGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHQpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI6Om5leHRFeHBlY3RJZGVudGlmaWVyKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyOjpnZXRUb2tlbik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6dG9rZW5TdGFydFBv
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjp0b2tlbkVuZFBvc2l0aW9uKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyOjpsYXN0VG9rZW5FbmRQb3NpdGlvbik6CisgICAgICAgIChKU0M6Ojo6
cGFyc2UpOgorICAgICAgICAtIFVzZSBKU1RleHRQb3NpdGlvbiBpbnN0ZWFkIG9mIHBhc3Npbmcg
bGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisgICAgICAgICogcGFyc2VyL1BhcnNlclRv
a2Vucy5oOgorICAgICAgICAoSlNDOjpKU1RleHRQb3NpdGlvbjo6SlNUZXh0UG9zaXRpb24pOgor
ICAgICAgICAoSlNDOjpKU1RleHRQb3NpdGlvbjo6b3BlcmF0b3IrKToKKyAgICAgICAgKEpTQzo6
SlNUZXh0UG9zaXRpb246Om9wZXJhdG9yLSk6CisgICAgICAgIChKU0M6OkpTVGV4dFBvc2l0aW9u
OjpvcGVyYXRvciBpbnQpOgorICAgICAgICAtIEFkZGVkIEpTVGV4dFBvc2l0aW9uLgorICAgICAg
ICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFr
ZUFzc2lnbk5vZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjptYWtlUHJlZml4Tm9k
ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VQb3N0Zml4Tm9kZSk6CisgICAg
ICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VEZWxldGVOb2RlKToKKyAgICAgICAgKEpTQzo6
U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNr
ZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpj
cmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVSZWdF
eHApOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVOZXdFeHByKToKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQXNzaWduUmVzb2x2ZSk6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZvckluTG9vcCk6CisgICAgICAgIChKU0M6OlN5bnRh
eENoZWNrZXI6OmNyZWF0ZVJldHVyblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6OmNyZWF0ZUJyZWFrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tl
cjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpjcmVhdGVXaXRoU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3Jl
YXRlTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVU
aHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmFwcGVuZEJpbmFy
eUV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6b3BlcmF0b3JT
dGFja1BvcCk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2lu
ZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKwogMjAxMy0wNy0xMCAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTmVlZCBFeHByZXNzaW9uUmFuZ2VJbmZv
IGJlZm9yZSBSZXNvbHZlRm9yUHV0cyBpbiBzdHJpY3QgbW9kZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAxNTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwMSw5ICsxNzAx
LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdQogICAgIHJldHVy
biByMDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1
bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5z
aWduZWQgbGluZVN0YXJ0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBl
Y3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiB7Ci0gICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGws
IGRzdCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgcmV0dXJuIGVtaXRDYWxs
KG9wX2NhbGwsIGRzdCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
Y3JlYXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKQpAQCAtMTczNCw5ICsxNzM0LDkgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbgogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChtX2FjdGl2YXRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5z
aWduZWQgbGluZVN0YXJ0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
RXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVudHMmIGNh
bGxBcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKIHsKLSAg
ICByZXR1cm4gZW1pdENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1bmMsIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUs
IGxpbmVTdGFydCk7CisgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGxfZXZhbCwgZHN0LCBmdW5j
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7CiB9CiAKIEV4cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmV4cGVj
dGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCkBA
IC0xODE0LDcgKzE4MTQsNyBAQCBFeHBlY3RlZEZ1bmN0aW9uIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0CiAgICAgcmV0dXJuIGV4cGVjdGVkRnVuY3Rpb247CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENh
bGxBcmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5l
U3RhcnQpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5j
dGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiB7CiAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKTsKICAgICBBU1NFUlQoZnVu
Yy0+cmVmQ291bnQoKSk7CkBAIC0xODM3LDcgKzE4MzcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjYWxs
QXJndW1lbnRzLnByb2ZpbGVIb29rUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CiAgICAgfQogCi0gICAg
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBs
aW5lU3RhcnQpOworICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpOwogCiAgICAgUmVmUHRyPExhYmVsPiBkb25lID0gbmV3TGFiZWwoKTsKICAgICBleHBl
Y3RlZEZ1bmN0aW9uID0gZW1pdEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0KGRzdCwgZnVuYywgZXhw
ZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZG9uZS5nZXQoKSk7CkBAIC0xODcxLDcgKzE4
NzEsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAgICAgcmV0
dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFy
YXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNS
ZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdp
c3RlciwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgdW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVu
c2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0
aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJRCogZmlyc3RGcmVl
UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb2ZpbGVIb29rUmVnaXN0ZXIsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKIHsKICAgICBpZiAobV9zaG91bGRFbWl0UHJvZmlsZUhv
b2tzKSB7CiAgICAgICAgIGVtaXRNb3ZlKHByb2ZpbGVIb29rUmVnaXN0ZXIsIGZ1bmMpOwpAQCAt
MTg3OSw3ICsxODc5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
VgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZUhvb2tSZWdpc3Rlci0+aW5k
ZXgoKSk7CiAgICAgfQogICAgIAotICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgbGluZVN0YXJ0KTsKKyAgICBlbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIAogICAgIC8vIEVtaXQgY2FsbC4KICAg
ICBlbWl0T3Bjb2RlKG9wX2NhbGxfdmFyYXJncyk7CkBAIC0xOTMxLDcgKzE5MzEsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgcmV0dXJuIHNyYzsKIH0K
IAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rp
b24sIENhbGxBcmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25l
ZCBsaW5lU3RhcnQpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVj
dChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24gZXhw
ZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogewogICAgIEFTU0VSVChmdW5jLT5yZWZDb3VudCgp
KTsKIApAQCAtMTk1NSw3ICsxOTU1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDb25zdAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsgKytpKQogICAgICAgICBjYWxsRnJhbWUuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsK
IAotICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwg
bGluZSwgbGluZVN0YXJ0KTsKKyAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIGRpdm90U3Rh
cnQsIGRpdm90RW5kKTsKICAgICAKICAgICBSZWZQdHI8TGFiZWw+IGRvbmUgPSBuZXdMYWJlbCgp
OwogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBlbWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoZHN0
LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkb25lLmdldCgpKTsKQEAg
LTIwMzQsNyArMjAzNCw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWJ1Z0hvb2so
RGUKICAgICBpZiAoIW1fc2hvdWxkRW1pdERlYnVnSG9va3MpCiAgICAgICAgIHJldHVybjsKICNl
bmRpZgotICAgIGVtaXRFeHByZXNzaW9uSW5mbyhjaGFyT2Zmc2V0LCAwLCAwLCBmaXJzdExpbmUs
IGxpbmVTdGFydCk7CisgICAgSlNUZXh0UG9zaXRpb24gZGl2b3QoZmlyc3RMaW5lLCBjaGFyT2Zm
c2V0LCBsaW5lU3RhcnQpOworICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3QsIGRp
dm90KTsKICAgICB1bnNpZ25lZCBjaGFyUG9zaXRpb24gPSBjaGFyT2Zmc2V0IC0gbV9zY29wZU5v
ZGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgZW1pdE9wY29kZShvcF9kZWJ1Zyk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRlYnVnSG9va0lEKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE1MzA3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDI3ICszNzUsMzIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBuLT5lbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNv
bnRleHQoKnRoaXMsIHRydWVUYXJnZXQsIGZhbHNlVGFyZ2V0LCBmYWxsVGhyb3VnaE1vZGUpOwog
ICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBlbWl0RXhwcmVzc2lvbkluZm8oaW50IGRpdm90LCBp
bnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIGludCBsaW5lU3Rh
cnQpCi0gICAgICAgIHsKKyAgICAgICAgdm9pZCBlbWl0RXhwcmVzc2lvbkluZm8oY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICB7ICAgICAgICAgICAgCisgICAg
ICAgICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90U3RhcnQub2Zmc2V0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChkaXZvdEVuZC5vZmZzZXQgPj0gZGl2b3Qub2Zmc2V0KTsKKwogICAgICAg
ICAgICAgaW50IHNvdXJjZU9mZnNldCA9IG1fc2NvcGVOb2RlLT5zb3VyY2UoKS5zdGFydE9mZnNl
dCgpOwogICAgICAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gbV9zY29wZU5vZGUtPnNvdXJj
ZSgpLmZpcnN0TGluZSgpOwogCi0gICAgICAgICAgICBBU1NFUlQoZGl2b3QgPj0gbGluZVN0YXJ0
KTsKLSAgICAgICAgICAgIEFTU0VSVChkaXZvdCA+PSBzb3VyY2VPZmZzZXQpOwotICAgICAgICAg
ICAgZGl2b3QgLT0gc291cmNlT2Zmc2V0OworICAgICAgICAgICAgaW50IGRpdm90T2Zmc2V0ID0g
ZGl2b3Qub2Zmc2V0IC0gc291cmNlT2Zmc2V0OworICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0
ID0gZGl2b3Qub2Zmc2V0IC0gZGl2b3RTdGFydC5vZmZzZXQ7CisgICAgICAgICAgICBpbnQgZW5k
T2Zmc2V0ID0gZGl2b3RFbmQub2Zmc2V0IC0gZGl2b3Qub2Zmc2V0OworCisgICAgICAgICAgICB1
bnNpZ25lZCBsaW5lID0gZGl2b3QubGluZTsKKyAgICAgICAgICAgIEFTU0VSVChsaW5lID49IGZp
cnN0TGluZSk7CisgICAgICAgICAgICBsaW5lIC09IGZpcnN0TGluZTsKIAorICAgICAgICAgICAg
aW50IGxpbmVTdGFydCA9IGRpdm90LmxpbmVTdGFydE9mZnNldDsKICAgICAgICAgICAgIGlmIChs
aW5lU3RhcnQgPiBzb3VyY2VPZmZzZXQpCiAgICAgICAgICAgICAgICAgbGluZVN0YXJ0IC09IHNv
dXJjZU9mZnNldDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBsaW5lU3RhcnQg
PSAwOwotCi0gICAgICAgICAgICBBU1NFUlQobGluZSA+PSBmaXJzdExpbmUpOwotICAgICAgICAg
ICAgbGluZSAtPSBmaXJzdExpbmU7CisgICAgICAgICAgICBBU1NFUlQoZGl2b3RPZmZzZXQgPj0g
bGluZVN0YXJ0KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbHVtbiA9IGRpdm90T2Zmc2V0IC0g
bGluZVN0YXJ0OwogCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IGlu
c3RydWN0aW9ucygpLnNpemUoKTsKLSAgICAgICAgICAgIEFTU0VSVChkaXZvdCA+PSBsaW5lU3Rh
cnQpOwotICAgICAgICAgICAgdW5zaWduZWQgY29sdW1uID0gZGl2b3QgLSBsaW5lU3RhcnQ7Ci0g
ICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkRXhwcmVzc2lvbkluZm8oaW5zdHJ1Y3Rpb25PZmZz
ZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPmFkZEV4cHJlc3Npb25JbmZvKGluc3RydWN0aW9uT2Zmc2V0LCBk
aXZvdE9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBsZWZ0SGFuZFNpZGVOZWVkc0NvcHko
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SXNQdXJlKQpAQCAtNDcxLDE1ICs0
NzYsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdldHRlclNldHRl
cihSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJ
RCogZ2V0dGVyLCBSZWdpc3RlcklEKiBzZXR0ZXIpOwogICAgICAgICAKICAgICAgICAgRXhwZWN0
ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uRm9ySWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVy
Jik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBs
aW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbEV2
YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiwgdW5z
aWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVu
c2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVy
SUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJz
dEZyZWVSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgdW5zaWduZWQg
ZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVk
IGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxs
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2Fs
bEFyZ3VtZW50cyYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CisgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGZ1bmMsIENhbGxBcmd1bWVudHMmLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RF
bmQpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQq
IGFyZ3VtZW50cywgUmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHBy
b2ZpbGVIb29rUmVnaXN0ZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkVmFyYXJncyhSZWdpc3RlcklEKiBhcmdDb3Vu
dERzdCwgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmdzKTsKIAogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UmV0dXJuKFJlZ2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRFbmQoUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5hcnlOb0Rz
dE9wKG9wX2VuZCwgc3JjKTsgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb25zdHJ1Y3Qo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxs
QXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCk7CisgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRDb25zdHJ1Y3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBm
dW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFN0cmNhdChSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgaW50IGNvdW50KTsKICAgICAgICAgdm9pZCBl
bWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogCkBAIC01
ODMsNyArNTg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIChpLmUuICJPYmplY3Qo
KSIgaXMgaWRlbnRpY2FsIHRvICJuZXcgT2JqZWN0KCkiKS4KICAgICAgICAgRXhwZWN0ZWRGdW5j
dGlvbiBlbWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgTGFiZWwqIGRvbmUp
OwogICAgICAgICAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3Vt
ZW50cyYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpOworICAgICAgICBSZWdp
c3RlcklEKiBlbWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBm
dW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBuZXdSZWdpc3Rlcigp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcg
Kzg3LDcgQEAgdm9pZCBFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaQogCiBSZWdp
c3RlcklEKiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YTo6ZW1pdFRocm93UmVmZXJlbmNlRXJyb3Io
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewot
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNl
dCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihtZXNzYWdl
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogfQpAQCAtMTUzLDggKzE1
Myw4IEBAIFJlZ2lzdGVySUQqIFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKICAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwpOwog
ICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBkaXZvdCA9IG1fc3RhcnRPZmZzZXQgKyBtX2lkZW50
Lmxlbmd0aCgpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIG1faWRl
bnQubGVuZ3RoKCksIDAsIG1fZGl2b3RMaW5lLCBtX2Rpdm90TGluZVN0YXJ0KTsKKyAgICBKU1Rl
eHRQb3NpdGlvbiBkaXZvdCA9IG1fc3RhcnQgKyBtX2lkZW50Lmxlbmd0aCgpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIG1fc3RhcnQsIGRpdm90KTsKICAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IHJlc29sdmVSZXN1bHQsIG1faWRlbnQpOwogfQogCkBAIC0zMjUsMTMgKzMyNSwxMyBAQCBSZWdp
c3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0CiAgICAgICAgICYmIGdlbmVyYXRv
ci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNl
KS0+aWRlbnRpZmllcigpKQogICAgICAgICAmJiAhZ2VuZXJhdG9yLnN5bWJvbFRhYmxlKCkuc2xv
d0FyZ3VtZW50cygpKSB7CiAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90
TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRHZXRBcmd1bWVudEJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpLCBwcm9w
ZXJ0eSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRz
LCBtX3N1YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAgIFJlZ2lzdGVySUQqIHByb3Bl
cnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKLSAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZz
ZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7CiB9CiAKQEAgLTM0NSwxMyArMzQ1LDEzIEBAIFJl
Z2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2QKICAgICAgICAgUmVzb2x2ZU5v
ZGUqIHJlc29sdmVOb2RlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpOwogICAg
ICAgICBpZiAoIWdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHJlc29sdmVOb2RlLT5p
ZGVudGlmaWVyKCkpKQogICAgICAgICAgICAgZ290byBub25Bcmd1bWVudHNQYXRoOwotICAgICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQo
KSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50c0xl
bmd0aChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBnZW5lcmF0b3IudW5jaGVja2Vk
UmVnaXN0ZXJGb3JBcmd1bWVudHMoKSk7CiAgICAgfQogCiBub25Bcmd1bWVudHNQYXRoOgogICAg
IFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCksIGJhc2UsIG1faWRlbnQpOwogfQogCkBAIC0zNzQsNyArMzc0LDcgQEAgUmVn
aXN0ZXJJRCogTmV3RXhwck5vZGU6OmVtaXRCeXRlY29kZShCeQogICAgICAgICBleHBlY3RlZEZ1
bmN0aW9uID0gTm9FeHBlY3RlZEZ1bmN0aW9uOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5j
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJn
dW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDb25z
dHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0KSwgZnVuYy5nZXQo
KSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9m
ZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7
CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uT3JJZ25vcmVkKGRzdCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiB9CiAKIGlubGlu
ZSBDYWxsQXJndW1lbnRzOjpDYWxsQXJndW1lbnRzKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUpCkBAIC00MDksOSArNDA5LDEwIEBAIFJl
Z2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0QnkKIHsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSAtIGRpdm90U3RhcnRPZmZzZXQoKSArIDQsIDQs
IDAsIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBKU1RleHRQb3NpdGlvbiBu
ZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIDQ7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlV2l0aFRoaXMoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZnVuYy5nZXQo
KSwgZ2VuZXJhdG9yLnJlc29sdmUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsKSwgZ2Vu
ZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRD
YWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5j
LmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90
RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1
bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
RnVuY3Rpb25DYWxsVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTQyMSw3ICs0MjIsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVt
aXRCCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9l
eHByKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3Mp
OwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBq
c1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIE5v
RXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNl
dCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiB9CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MzcsNyArNDM4LDcgQEAg
UmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgICAgICBnZW5lcmF0
b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7
CiAgICAgICAgIC8vIFRoaXMgcGFzc2VzIE5vRXhwZWN0ZWRGdW5jdGlvbiBiZWNhdXNlIHdlIGV4
cGVjdCB0aGF0IGlmIHRoZSBmdW5jdGlvbiBpcyBpbiBhCiAgICAgICAgIC8vIGxvY2FsIHZhcmlh
YmxlLCB0aGVuIGl0J3Mgbm90IG9uZSBvZiBvdXIgYnVpbHQtaW4gY29uc3RydWN0b3JzLgotICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
T3JJZ25vcmVkKGRzdCwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSksIGZ1bmMuZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9m
ZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7
CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb25Pcklnbm9yZWQoZHN0LCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpKSwgZnVuYy5n
ZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KIAogICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzU3Rh
dGljKCkpIHsKQEAgLTQ0NSwxNiArNDQ2LDE2IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJl
c29sdmVOb2RlOjplbWkKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVy
YXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRTdGF0aWNWYXIoZnVuYy5n
ZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9h
ZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdu
b3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCks
IGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMu
Z2V0KCkpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIENhbGxBcmd1bWVu
dHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7Ci0gICAgaW50IGlkZW50aWZpZXJT
dGFydCA9IGRpdm90KCkgLSBkaXZvdFN0YXJ0T2Zmc2V0KCk7CiAKLSAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGlkZW50aWZpZXJTdGFydCArIG1faWRlbnQubGVuZ3RoKCksIG1faWRl
bnQubGVuZ3RoKCksIDAsIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBKU1Rl
eHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3RhcnQoKSArIG1faWRlbnQubGVuZ3RoKCk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBu
ZXdEaXZvdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aFRoaXMoY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSwgZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7Ci0g
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0
KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5n
ZXQoKSksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC00NjMsMTEgKzQ2NCwxMSBAQCBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxCcmFja2V0Tm9kZTo6ZW1pCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCks
IHN1YmV4cHJlc3Npb25FbmRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhwcmVz
c2lvbkxpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4
cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgp
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5
VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkp
OwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2Uu
Z2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25P
cklnbm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxE
b3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ3Nyw5ICs0Nzgs
OSBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwog
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwg
c3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQoKSwgc3Vi
ZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9u
U3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQo
ZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25P
cklnbm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQo
ZHN0LCBmdW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiB9CiAK
IFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDg3LDcgKzQ4OCw3
IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICBSZWZQdHI8
TGFiZWw+IHJlYWxDYWxsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPExhYmVs
PiBlbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgp
LCBzdWJleHByZXNzaW9uRW5kT2Zmc2V0KCksIHN1YmV4cHJlc3Npb25MaW5lKCksIHN1YmV4cHJl
c3Npb25MaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJl
eHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQo
KSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQgPSBnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAg
ICBnZW5lcmF0b3IuZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChmdW5jdGlvbi5nZXQoKSwgcmVh
bENhbGwuZ2V0KCkpOwpAQCAtNDk5LDcgKzUwMCw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlv
bkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVu
Y3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
LCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhn
ZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xkTGlzdC0+bV9leHByKTsKLSAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RM
aW5lU3RhcnQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5h
dGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rp
b24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKIAogICAgICAgICAgICAg
bV9hcmdzLT5tX2xpc3ROb2RlID0gb2xkTGlzdDsKQEAgLTUwNyw3ICs1MDgsNyBAQCBSZWdpc3Rl
cklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1w
RGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQu
Z2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90
TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2Fs
bChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5v
RXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBk
aXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtNTE1LDcgKzUxNiw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5j
dGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICB7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFy
Z3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShj
YWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0aW9uLmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3Rh
cnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3Jl
ZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50
cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uT3JJ
Z25vcmVkLmdldCgpOwpAQCAtNTM3LDcgKzUzOCw3IEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rp
b25DYWxsRG90Tm9kZTo6ZW0KICAgICBSZWZQdHI8TGFiZWw+IHJlYWxDYWxsID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jh
c2UpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90
KCksIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgpLCBzdWJleHByZXNzaW9uRW5kT2Zmc2V0KCks
IHN1YmV4cHJlc3Npb25MaW5lKCksIHN1YmV4cHJlc3Npb25MaW5lU3RhcnQoKSk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVz
c2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRp
b24oZHN0KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZp
bmFsRGVzdGluYXRpb25Pcklnbm9yZWQgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdu
b3JlZChkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZk5vdEZ1
bmN0aW9uQXBwbHkoZnVuY3Rpb24uZ2V0KCksIHJlYWxDYWxsLmdldCgpKTsKQEAgLTU1MiwyMCAr
NTUzLDIwIEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRv
ci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwog
ICAgICAgICAgICAgICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9y
LCBtX2FyZ3MpOwogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xkTGlzdC0+bV9leHByKTsKLSAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCks
IHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgp
LCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRD
YWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwg
Tm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0OwogICAg
ICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJh
dG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7
CiAgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0
b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwotICAgICAgICAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQo
KSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5l
KCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1fYXJn
cy0+bV9saXN0Tm9kZSA9IG9sZExpc3Q7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1v
dmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAg
ICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwog
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENh
bGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3MtPm1fbGlzdE5v
ZGUgJiYgbV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQpOwpAQCAtNTg2LDcgKzU4Nyw3IEBAIFJl
Z2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICAgICAgICAgIHdoaWxl
ICgoYXJncyA9IGFyZ3MtPm1fbmV4dCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRO
b2RlKGFyZ3MtPm1fZXhwcik7CiAKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbFZhcmFy
Z3MoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCB0
aGlzUmVnaXN0ZXIuZ2V0KCksIGFyZ3NSZWdpc3Rlci5nZXQoKSwgZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBwcm9maWxlSG9va1JlZ2lzdGVyLmdldCgpLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zm
c2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbFZhcmFyZ3MoZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIGFy
Z3NSZWdpc3Rlci5nZXQoKSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9maWxlSG9va1Jl
Z2lzdGVyLmdldCgpLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAg
ICB9CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogICAgIH0KQEAgLTU5
NCw3ICs1OTUsNyBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAg
ICAgewogICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2Fy
Z3MpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgYmFzZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3Rp
bmF0aW9uT3JJZ25vcmVkLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zm
c2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0aW9uLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgp
KTsKICAgICByZXR1cm4gZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKTsKQEAgLTY0Miw3
ICs2NDMsNyBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdFJlc29sdmUoQnl0CiAgICAg
ICAgIHJldHVybiBvbGRWYWx1ZS5nZXQoKTsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQo
KSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgTm9u
bG9jYWxSZXNvbHZlSW5mbyByZXNvbHZlSW5mbzsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlRm9yUHV0KGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgdmFsdWUuZ2V0KCksIHJlc29sdmVSZXN1bHQsIGlkZW50LCByZXNvbHZlSW5mbyk7
CkBAIC02NjQsMTAgKzY2NSwxMCBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdEJyYWNr
ZXQoQnl0CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVG
b3JMZWZ0SGFuZFNpZGUoYmFzZU5vZGUsIGJyYWNrZXRBY2Nlc3Nvci0+c3Vic2NyaXB0SGFzQXNz
aWdubWVudHMoKSwgc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKHN1YnNjcmlwdCk7CiAKLSAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3QoKSwg
YnJhY2tldEFjY2Vzc29yLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2
b3RFbmRPZmZzZXQoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdExpbmUoKSwgYnJhY2tldEFjY2Vz
c29yLT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3QoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdFN0YXJ0KCks
IGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGVt
aXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCks
IHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RM
aW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1p
dFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZS5nZXQoKSk7CiAgICAg
cmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgb2xkVmFsdWUp
OwogfQpAQCAtNjg0LDEwICs2ODUsMTAgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRE
b3QoQnl0ZWNvZAogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1p
dE5vZGUoYmFzZU5vZGUpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkb3RB
Y2Nlc3Nvci0+ZGl2b3QoKSwgZG90QWNjZXNzb3ItPmRpdm90U3RhcnRPZmZzZXQoKSwgZG90QWNj
ZXNzb3ItPmRpdm90RW5kT2Zmc2V0KCksIGRvdEFjY2Vzc29yLT5kaXZvdExpbmUoKSwgZG90QWNj
ZXNzb3ItPmRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZG90QWNjZXNzb3ItPmRpdm90KCksIGRvdEFjY2Vzc29yLT5kaXZvdFN0YXJ0KCksIGRvdEFj
Y2Vzc29yLT5kaXZvdEVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBp
ZGVudCk7CiAgICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBlbWl0UG9zdEluY09yRGVjKGdlbmVy
YXRvciwgZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSwgbV9vcGVy
YXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFy
dCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCks
IGlkZW50LCB2YWx1ZS5nZXQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5h
dGlvbklmTmVlZGVkKGRzdCwgb2xkVmFsdWUpOwogfQpAQCAtNzE2LDcgKzcxNyw3IEBAIFJlZ2lz
dGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Qnl0ZWMKICAgICBpZiAocmVzb2x2ZVJlc3Vs
dC5pc1JlZ2lzdGVyKCkpCiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZmFsc2UpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0
KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2UoZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFz
ZSksIGJhc2UsIG1faWRlbnQpOwogfQpAQCAtNzI4LDcgKzcyOSw3IEBAIFJlZ2lzdGVySUQqIERl
bGV0ZUJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBSZWdpc3RlcklEKiByMSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RM
aW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5n
ZXQoKSwgcjEpOwogfQogCkBAIC03MzgsNyArNzM5LDcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlRG90
Tm9kZTo6ZW1pdEJ5dGVjb2RlKAogewogICAgIFJlZ2lzdGVySUQqIHIwID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRp
dm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRE
ZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLCBtX2lkZW50KTsK
IH0KIApAQCAtODI0LDcgKzgyNSw3IEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXRSZXNv
bHZlKEJ5dGUKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCks
IGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAg
ICAgTm9ubG9jYWxSZXNvbHZlSW5mbyByZXNvbHZlVmVyaWZpZXI7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZUZvclB1dChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BEc3QuZ2V0KCksIHJlc29sdmVSZXN1bHQsIGlkZW50LCBy
ZXNvbHZlVmVyaWZpZXIpOwpAQCAtODQ0LDEwICs4NDUsMTAgQEAgUmVnaXN0ZXJJRCogUHJlZml4
Tm9kZTo6ZW1pdEJyYWNrZXQoQnl0ZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShzdWJzY3JpcHQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBw
cm9wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwogCi0gICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhicmFja2V0QWNjZXNzb3ItPmRpdm90KCksIGJyYWNrZXRBY2Nl
c3Nvci0+ZGl2b3RTdGFydE9mZnNldCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90RW5kT2Zmc2V0
KCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RMaW5lKCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RM
aW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhicmFja2V0QWNj
ZXNzb3ItPmRpdm90KCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RTdGFydCgpLCBicmFja2V0QWNj
ZXNzb3ItPmRpdm90RW5kKCkpOwogICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVt
aXRHZXRCeVZhbChwcm9wRHN0LmdldCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAg
ICAgZW1pdEluY09yRGVjKGdlbmVyYXRvciwgdmFsdWUsIG1fb3BlcmF0b3IpOwotICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZv
dEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCks
IHZhbHVlKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQo
ZHN0LCBwcm9wRHN0LmdldCgpKTsKIH0KQEAgLTg2MiwxMCArODYzLDEwIEBAIFJlZ2lzdGVySUQq
IFByZWZpeE5vZGU6OmVtaXREb3QoQnl0ZWNvZGUKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlTm9kZSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAKLSAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBkb3RBY2Nlc3Nvci0+
ZGl2b3RTdGFydE9mZnNldCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RFbmRPZmZzZXQoKSwgZG90QWNj
ZXNzb3ItPmRpdm90TGluZSgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkb3RBY2Nlc3Nvci0+ZGl2b3QoKSwgZG90QWNj
ZXNzb3ItPmRpdm90U3RhcnQoKSwgZG90QWNjZXNzb3ItPmRpdm90RW5kKCkpOwogICAgIFJlZ2lz
dGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHByb3BEc3QuZ2V0KCksIGJhc2Uu
Z2V0KCksIGlkZW50KTsKICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB2YWx1ZSwgbV9vcGVy
YXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFy
dCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCks
IGlkZW50LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CiB9CkBAIC04OTEsNyArODkyLDcgQEAgUmVnaXN0
ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAogUmVnaXN0ZXJJRCogVW5hcnlPcE5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7CiAgICAgUmVnaXN0ZXJJRCogc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhw
cik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdGFydE9mZnNldCgpLCAwLCAw
LCBsaW5lTm8oKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8ocG9zaXRpb24oKSwgcG9zaXRpb24oKSwgcG9zaXRpb24oKSk7CiAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcGNvZGVJRCgpLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCBzcmMpOwogfQogCkBAIC0xMDIzLDggKzEwMjQsNyBAQCBSZWdpc3RlcklEKiBC
aW5hcnlPcE5vZGU6OmVtaXRTdHJjYXQoQnl0CiAgICAgLy8gQ2VydGFpbiByZWFkLW1vZGlmeSBu
b2RlcyByZXF1aXJlIGV4cHJlc3Npb24gaW5mbyB0byBiZSBlbWl0dGVkICphZnRlciogbV9yaWdo
dCBoYXMgYmVlbiBnZW5lcmF0ZWQuCiAgICAgLy8gSWYgdGhpcyBpcyByZXF1aXJlZCB0aGUgbm9k
ZSBpcyBwYXNzZWQgYXMgJ2VtaXRFeHByZXNzaW9uSW5mb0Zvck1lJzsgZG8gc28gbm93LgogICAg
IGlmIChlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZSkKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3QoKSwgZW1pdEV4cHJlc3Np
b25JbmZvRm9yTWUtPmRpdm90U3RhcnRPZmZzZXQoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUt
PmRpdm90RW5kT2Zmc2V0KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdExpbmUoKSwg
ZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90TGluZVN0YXJ0KCkpOwotCisgICAgICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90
KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdFN0YXJ0KCksIGVtaXRFeHByZXNzaW9u
SW5mb0Zvck1lLT5kaXZvdEVuZCgpKTsKICAgICAvLyBJZiB0aGVyZSBpcyBhbiBhc3NpZ25tZW50
IGNvbnZlcnQgdGhlIGxocyBub3cuICBUaGlzIHdpbGwgYWxzbyBjb3B5IGxocyB0bwogICAgIC8v
IHRoZSB0ZW1wb3JhcnkgcmVnaXN0ZXIgd2UgYWxsb2NhdGVkIGZvciBpdC4KICAgICBpZiAobGhz
KQpAQCAtMTA5Niw3ICsxMDk2LDcgQEAgUmVnaXN0ZXJJRCogQmluYXJ5T3BOb2RlOjplbWl0Qnl0
ZWNvZGUoQgogICAgIE9wY29kZUlEIG9wY29kZUlEID0gdGhpcy0+b3Bjb2RlSUQoKTsKIAogICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9hZGQgJiYgbV9leHByMS0+aXNBZGQoKSAmJiBtX2V4cHIxLT5y
ZXN1bHREZXNjcmlwdG9yKCkuZGVmaW5pdGVseUlzU3RyaW5nKCkpIHsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdGFydE9mZnNldCgpLCAwLCAwLCBsaW5lTm8oKSwgbGlu
ZVN0YXJ0T2Zmc2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHBv
c2l0aW9uKCksIHBvc2l0aW9uKCksIHBvc2l0aW9uKCkpOwogICAgICAgICByZXR1cm4gZW1pdFN0
cmNhdChnZW5lcmF0b3IsIGRzdCk7CiAgICAgfQogCkBAIC0xMTE4LDcgKzExMTgsNyBAQCBSZWdp
c3RlcklEKiBCaW5hcnlPcE5vZGU6OmVtaXRCeXRlY29kZShCCiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobGVmdCwgbV9yaWdo
dEhhc0Fzc2lnbm1lbnRzLCByaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAgIGJvb2wgd2Fz
VHlwZW9mID0gZ2VuZXJhdG9yLm1fbGFzdE9wY29kZUlEID09IG9wX3R5cGVvZjsKICAgICBSZWdp
c3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKHJpZ2h0KTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKHN0YXJ0T2Zmc2V0KCksIDAsIDAsIGxpbmVObygpLCBsaW5lU3Rh
cnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhwb3NpdGlvbigp
LCBwb3NpdGlvbigpLCBwb3NpdGlvbigpKTsKICAgICBpZiAod2FzVHlwZW9mICYmIChvcGNvZGVJ
RCA9PSBvcF9uZXEgfHwgb3Bjb2RlSUQgPT0gb3BfbnN0cmljdGVxKSkgewogICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdG1wID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwogICAg
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmVxKQpAQCAtMTE2Niw3ICsxMTY2LDcgQEAgUmVnaXN0
ZXJJRCogVGhyb3dhYmxlQmluYXJ5T3BOb2RlOjplbWl0QgogewogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fZXhwcjEsIG1f
cmlnaHRIYXNBc3NpZ25tZW50cywgbV9leHByMi0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAgIFJl
Z2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMik7Ci0gICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90
RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QmluYXJ5T3Aob3Bjb2RlSUQoKSwgZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMiwgT3Bl
cmFuZFR5cGVzKG1fZXhwcjEtPnJlc3VsdERlc2NyaXB0b3IoKSwgbV9leHByMi0+cmVzdWx0RGVz
Y3JpcHRvcigpKSk7CiB9CiAKQEAgLTExNzgsMTMgKzExNzgsMTMgQEAgUmVnaXN0ZXJJRCogSW5z
dGFuY2VPZk5vZGU6OmVtaXRCeXRlY29kZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBkc3RSZWcg
PSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpOwogICAgIFJlZlB0
cjxMYWJlbD4gdGFyZ2V0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRP
ZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICBnZW5lcmF0b3IuZW1pdENoZWNrSGFzSW5zdGFuY2UoZHN0UmVnLmdldCgpLCBzcmMxLmdldCgp
LCBzcmMyLmdldCgpLCB0YXJnZXQuZ2V0KCkpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRHZXRCeUlkKHByb3RvdHlwZS5nZXQoKSwgc3JjMi5nZXQoKSwgZ2VuZXJhdG9yLnZtKCkt
PnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2
b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklE
KiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdEluc3RhbmNlT2YoZHN0UmVnLmdldCgpLCBzcmMxLmdl
dCgpLCBwcm90b3R5cGUuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodGFyZ2V0Lmdl
dCgpKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTI5NSw4ICsxMjk1LDcgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgUmVnaXN0ZXJJRCogZW1pdFJlYQogICAgIC8vIENlcnRhaW4gcmVhZC1tb2Rp
Znkgbm9kZXMgcmVxdWlyZSBleHByZXNzaW9uIGluZm8gdG8gYmUgZW1pdHRlZCAqYWZ0ZXIqIG1f
cmlnaHQgaGFzIGJlZW4gZ2VuZXJhdGVkLgogICAgIC8vIElmIHRoaXMgaXMgcmVxdWlyZWQgdGhl
IG5vZGUgaXMgcGFzc2VkIGFzICdlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZSc7IGRvIHNvIG5vdy4K
ICAgICBpZiAoZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUpCi0gICAgICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90KCksIGVtaXRFeHBy
ZXNzaW9uSW5mb0Zvck1lLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zv
ck1lLT5kaXZvdEVuZE9mZnNldCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RMaW5l
KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdExpbmVTdGFydCgpKTsKLQorICAgICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5k
aXZvdCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RTdGFydCgpLCBlbWl0RXhwcmVz
c2lvbkluZm9Gb3JNZS0+ZGl2b3RFbmQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Qmlu
YXJ5T3Aob3Bjb2RlSUQsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOwogfQogCkBAIC0xMzMwLDcg
KzEzMjksOCBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCCiAgICAg
fQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpIC0gZGl2
b3RTdGFydE9mZnNldCgpICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCwg
ZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rp
dm90ID0gZGl2b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKKyAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKICAgICBO
b25sb2NhbFJlc29sdmVJbmZvIHJlc29sdmVWZXJpZmllcjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlRm9yUHV0KGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgc3JjMS5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCwgcmVzb2x2
ZVZlcmlmaWVyKTsKICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2ln
bm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0
KCkpLCBzcmMxLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0
VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSwgdGhpcyk7
CkBAIC0xMzYyLDEyICsxMzYyLDEyIEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjpl
bWl0Qnl0ZWMKIAogICAgIE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAg
IGlmIChnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgp
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQdXQo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50LCByZXNvbHZl
VmVyaWZpZXIpOwogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAg
ICAgICAgZHN0ID0gMDsKICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShkc3QsIG1fcmlnaHQpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2
b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1
dFRvQmFzZShiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZSwgcmVzb2x2ZVZlcmlmaWVyKTsKIH0K
IApAQCAtMTM3OCw3ICsxMzc4LDcgQEAgUmVnaXN0ZXJJRCogQXNzaWduRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2Rl
Rm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5p
c1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJh
dG9yLmRlc3RpbmF0aW9uRm9yQXNzaWduUmVzdWx0KGRzdCk7CiAgICAgUmVnaXN0ZXJJRCogcmVz
dWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKHZhbHVlLmdldCgpLCBtX3JpZ2h0KTsKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICBSZWdpc3RlcklEKiBmb3J3YXJkUmVzdWx0ID0gKGRzdCA9PSBnZW5lcmF0b3IuaWdu
b3JlZFJlc3VsdCgpKSA/IHJlc3VsdCA6IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24ocmVzdWx0KSwgcmVzdWx0KTsKICAgICBnZW5l
cmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgZm9yd2FyZFJlc3VsdCk7CiAg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgZm9yd2Fy
ZFJlc3VsdCk7CkBAIC0xMzkwLDExICsxMzkwLDExIEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlE
b3ROb2RlOjplbWl0Qnl0ZWMKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UsIG1fcmlnaHRIYXNBc3NpZ25tZW50
cywgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0
KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhw
cmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1
YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVu
ZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5
SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsK
ICAgICBSZWdpc3RlcklEKiB1cGRhdGVkVmFsdWUgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQo
Z2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdldCgpKSwg
dmFsdWUuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBl
Ojp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKIAotICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBk
aXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVu
dCwgdXBkYXRlZFZhbHVlKTsKIH0KIApAQCAtMTQxNCw3ICsxNDE0LDcgQEAgUmVnaXN0ZXJJRCog
QXNzaWduQnJhY2tldE5vZGU6OmVtaXRCeXRlYwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1
ZSA9IGdlbmVyYXRvci5kZXN0aW5hdGlvbkZvckFzc2lnblJlc3VsdChkc3QpOwogICAgIFJlZ2lz
dGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZSh2YWx1ZS5nZXQoKSwgbV9yaWdodCk7
CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRP
ZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkp
OworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiBmb3J3YXJkUmVzdWx0ID0gKGRzdCA9PSBn
ZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKSA/IHJlc3VsdCA6IGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24ocmVzdWx0KSwgcmVzdWx0
KTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgp
LCBmb3J3YXJkUmVzdWx0KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9u
SWZOZWVkZWQoZHN0LCBmb3J3YXJkUmVzdWx0KTsKQEAgLTE0MjcsMTEgKzE0MjcsMTEgQEAgUmVn
aXN0ZXJJRCogUmVhZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0QgogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9z
dWJzY3JpcHRIYXNBc3NpZ25tZW50cyB8fCBtX3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fc3Vic2Ny
aXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSAmJiBtX3JpZ2h0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVm
dEhhbmRTaWRlKG1fc3Vic2NyaXB0LCBtX3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fcmlnaHQtPmlz
UHVyZShnZW5lcmF0b3IpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3Vi
ZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgpLCBzdWJleHByZXNz
aW9uRW5kT2Zmc2V0KCksIHN1YmV4cHJlc3Npb25MaW5lKCksIHN1YmV4cHJlc3Npb25MaW5lU3Rh
cnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2
b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICBS
ZWdpc3RlcklEKiB1cGRhdGVkVmFsdWUgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJh
dG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdldCgpKSwgdmFsdWUu
Z2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtu
b3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKIAotICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVu
ZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCksIHVw
ZGF0ZWRWYWx1ZSk7CiAKICAgICByZXR1cm4gdXBkYXRlZFZhbHVlOwpAQCAtMTc0MiwxMCArMTc0
MiwxMCBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAgICAgICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdGVjdCA9IHByb3BlcnR5TmFtZTsKICAgICAgICAg
ICAgIE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwogICAgICAgICAgICAgaWYg
KGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZz
ZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29s
dmVCYXNlRm9yUHV0KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcmVzb2x2ZVJlc3VsdCwgaWRl
bnQsIHJlc29sdmVWZXJpZmllcik7CiAKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBk
aXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvQmFzZShiYXNlLCBpZGVudCwgcHJvcGVydHlOYW1l
LCByZXNvbHZlVmVyaWZpZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZXhwZWN0
ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTc1OSw3ICsxNzU5LDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbgogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdGVj
dCA9IHByb3BlcnR5TmFtZTsKICAgICAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShhc3NpZ25Ob2RlLT5iYXNlKCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydE9m
ZnNldCgpLCBhc3NpZ25Ob2RlLT5kaXZvdEVuZE9mZnNldCgpLCBhc3NpZ25Ob2RlLT5kaXZvdExp
bmUoKSwgYXNzaWduTm9kZS0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RT
dGFydCgpLCBhc3NpZ25Ob2RlLT5kaXZvdEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
dXRCeUlkKGJhc2UsIGlkZW50LCBwcm9wZXJ0eU5hbWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEFTU0VSVChtX2xleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSk7CkBAIC0xNzY5LDcgKzE3
NjksNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUt
PmJhc2UoKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0
Tm9kZShhc3NpZ25Ob2RlLT5zdWJzY3JpcHQoKSk7CiAgICAgICAgIAotICAgICAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRp
dm90U3RhcnRPZmZzZXQoKSwgYXNzaWduTm9kZS0+ZGl2b3RFbmRPZmZzZXQoKSwgYXNzaWduTm9k
ZS0+ZGl2b3RMaW5lKCksIGFzc2lnbk5vZGUtPmRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5v
ZGUtPmRpdm90U3RhcnQoKSwgYXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgc3Vic2NyaXB0LCBwcm9wZXJ0eU5hbWUpOwog
ICAgIH0gICAKIApAQCAtMTg2NSw3ICsxODY1LDcgQEAgdm9pZCBXaXRoTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZQogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0
YXJ0T2Zmc2V0KCkpOwogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fZXhwcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rp
dm90LCBtX2V4cHJlc3Npb25MZW5ndGgsIDAsIG1fZGl2b3RMaW5lLCBtX2Rpdm90TGluZVN0YXJ0
KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fZGl2b3QgLSBt
X2V4cHJlc3Npb25MZW5ndGgsIG1fZGl2b3QpOwogICAgIGdlbmVyYXRvci5lbWl0UHVzaFdpdGhT
Y29wZShzY29wZS5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1l
bnQpOwogICAgIGdlbmVyYXRvci5lbWl0UG9wU2NvcGUoKTsKQEAgLTIwNjksNyArMjA2OSw3IEBA
IHZvaWQgVGhyb3dOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAgICBpZiAoZHN0ID09
IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgIGRzdCA9IDA7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGV4cHIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICBnZW5lcmF0b3IuZW1pdFRocm93KGV4cHIuZ2V0KCkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNpb24gMTUzMDc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDIwICszMywxMiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFTVEJ1aWxk
ZXIgewotICAgIHN0cnVjdCBQb3NpdGlvbkluZm8gewotICAgICAgICB1bnNpZ25lZCBzdGFydFBv
czsKLSAgICAgICAgdW5zaWduZWQgbGluZTsKLSAgICAgICAgdW5zaWduZWQgbGluZVN0YXJ0UG9z
OwotICAgIH07Ci0KICAgICBzdHJ1Y3QgQmluYXJ5T3BJbmZvIHsKICAgICAgICAgQmluYXJ5T3BJ
bmZvKCkge30KLSAgICAgICAgQmluYXJ5T3BJbmZvKGludCBvdGhlclN0YXJ0LCBpbnQgb3RoZXJE
aXZvdCwgaW50IG90aGVyRW5kLCB1bnNpZ25lZCBvdGhlckRpdm90TGluZSwgdW5zaWduZWQgb3Ro
ZXJEaXZvdExpbmVTdGFydCwgYm9vbCByaHNIYXNBc3NpZ25tZW50KQorICAgICAgICBCaW5hcnlP
cEluZm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIG90aGVyU3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBvdGhlckRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgb3RoZXJFbmQsIGJvb2wgcmhz
SGFzQXNzaWdubWVudCkKICAgICAgICAgICAgIDogc3RhcnQob3RoZXJTdGFydCkKICAgICAgICAg
ICAgICwgZGl2b3Qob3RoZXJEaXZvdCkKICAgICAgICAgICAgICwgZW5kKG90aGVyRW5kKQotICAg
ICAgICAgICAgLCBkaXZvdExpbmUob3RoZXJEaXZvdExpbmUpCi0gICAgICAgICAgICAsIGRpdm90
TGluZVN0YXJ0KG90aGVyRGl2b3RMaW5lU3RhcnQpCiAgICAgICAgICAgICAsIGhhc0Fzc2lnbm1l
bnQocmhzSGFzQXNzaWdubWVudCkKICAgICAgICAgewogICAgICAgICB9CkBAIC01NCwzOSArNDYs
MzEgQEAgY2xhc3MgQVNUQnVpbGRlciB7CiAgICAgICAgICAgICA6IHN0YXJ0KGxocy5zdGFydCkK
ICAgICAgICAgICAgICwgZGl2b3QocmhzLnN0YXJ0KQogICAgICAgICAgICAgLCBlbmQocmhzLmVu
ZCkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lKHJocy5kaXZvdExpbmUpCi0gICAgICAgICAgICAs
IGRpdm90TGluZVN0YXJ0KHJocy5kaXZvdExpbmVTdGFydCkKICAgICAgICAgICAgICwgaGFzQXNz
aWdubWVudChsaHMuaGFzQXNzaWdubWVudCB8fCByaHMuaGFzQXNzaWdubWVudCkKICAgICAgICAg
ewogICAgICAgICB9Ci0gICAgICAgIGludCBzdGFydDsKLSAgICAgICAgaW50IGRpdm90OwotICAg
ICAgICBpbnQgZW5kOwotICAgICAgICB1bnNpZ25lZCBkaXZvdExpbmU7Ci0gICAgICAgIHVuc2ln
bmVkIGRpdm90TGluZVN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBzdGFydDsKKyAgICAg
ICAgSlNUZXh0UG9zaXRpb24gZGl2b3Q7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIGVuZDsKICAg
ICAgICAgYm9vbCBoYXNBc3NpZ25tZW50OwogICAgIH07CiAgICAgCiAgICAgCiAgICAgc3RydWN0
IEFzc2lnbm1lbnRJbmZvIHsKICAgICAgICAgQXNzaWdubWVudEluZm8oKSB7fQotICAgICAgICBB
c3NpZ25tZW50SW5mbyhFeHByZXNzaW9uTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0LCBp
bnQgaW5pdEFzc2lnbm1lbnRzLCBPcGVyYXRvciBvcCkKKyAgICAgICAgQXNzaWdubWVudEluZm8o
RXhwcmVzc2lvbk5vZGUqIG5vZGUsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBpbnQgaW5pdEFzc2lnbm1lbnRzLCBPcGVyYXRvciBvcCkK
ICAgICAgICAgICAgIDogbV9ub2RlKG5vZGUpCiAgICAgICAgICAgICAsIG1fc3RhcnQoc3RhcnQp
CiAgICAgICAgICAgICAsIG1fZGl2b3QoZGl2b3QpCi0gICAgICAgICAgICAsIG1fZGl2b3RMaW5l
KGRpdm90TGluZSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmVTdGFydChkaXZvdExpbmVTdGFy
dCkKICAgICAgICAgICAgICwgbV9pbml0QXNzaWdubWVudHMoaW5pdEFzc2lnbm1lbnRzKQogICAg
ICAgICAgICAgLCBtX29wKG9wKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9kaXZv
dCA+PSBtX2Rpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0YXJ0ID49IG1f
ZGl2b3RMaW5lU3RhcnQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3Qub2Zmc2V0ID49IG1f
ZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0YXJ0Lm9mZnNl
dCA+PSBtX3N0YXJ0LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgRXhwcmVz
c2lvbk5vZGUqIG1fbm9kZTsKLSAgICAgICAgdW5zaWduZWQgbV9zdGFydDsKLSAgICAgICAgdW5z
aWduZWQgbV9kaXZvdDsKLSAgICAgICAgdW5zaWduZWQgbV9kaXZvdExpbmU7Ci0gICAgICAgIHVu
c2lnbmVkIG1fZGl2b3RMaW5lU3RhcnQ7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG1fc3RhcnQ7
CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIG1fZGl2b3Q7CiAgICAgICAgIGludCBtX2luaXRBc3Np
Z25tZW50czsKICAgICAgICAgT3BlcmF0b3IgbV9vcDsKICAgICB9OwpAQCAtMTMxLDcgKzExNSw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgaW50ICBEb250QnVpbGRTdHJpbmdzID0gMDsK
IAogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBpbnQgdG9rZW4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4s
IHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4pOwotICAgIEV4cHJlc3Np
b25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uTm9kZSogZnVuYywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCB1bnNpZ25l
ZCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdz
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgSlNDOjpTb3Vy
Y2VFbGVtZW50cyogY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fdm0pIEpT
Qzo6U291cmNlRWxlbWVudHMoKTsgfQogCkBAIC0xNDQsMTEgKzEyOCwxMSBAQCBwdWJsaWM6CiAK
ICAgICBDb21tYU5vZGUqIGNyZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKSB7IHJldHVy
biBuZXcgKG1fdm0pIENvbW1hTm9kZShsb2NhdGlvbiwgbGhzLCByaHMpOyB9CiAKLSAgICBFeHBy
ZXNzaW9uTm9kZSogbWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvbk5vZGUqIGxlZnQsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgbGVm
dEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50
IGRpdm90LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0
YXJ0KTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgaW50IHN0YXJ0LCBpbnQgZGl2b3Qs
IGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOwot
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUG9zdGZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBl
bmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgIEV4
cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBs
ZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlbmQpOworICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUHJlZml4Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VQb3N0Zml4Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGVuZCk7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VUeXBlT2ZOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7Ci0gICAgRXhwcmVzc2lv
bk5vZGUqIG1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwg
dW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOyAKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZURlbGV0
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCk7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VOZWdhdGVOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VCaXR3aXNlTm90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
Tm9kZSopOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlTXVsdE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKQEAgLTE4MSwxMSArMTY1LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgdXNlc1RoaXMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgVGhpc05vZGUobG9j
YXRpb24pOwogICAgIH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlUmVzb2x2ZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisg
ICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBz
dGFydCkKICAgICB7CiAgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMg
PT0gKmlkZW50KQogICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4g
bmV3IChtX3ZtKSBSZXNvbHZlTm9kZShsb2NhdGlvbiwgKmlkZW50LCBzdGFydCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFJlc29sdmVOb2Rl
KGxvY2F0aW9uLCAqaWRlbnQsIHN0YXJ0KTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikgeyByZXR1
cm4gbmV3IChtX3ZtKSBPYmplY3RMaXRlcmFsTm9kZShsb2NhdGlvbik7IH0KICAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBQcm9wZXJ0eUxpc3ROb2RlKiBwcm9wZXJ0aWVzKSB7IHJldHVybiBuZXcgKG1fdm0pIE9i
amVjdExpdGVyYWxOb2RlKGxvY2F0aW9uLCBwcm9wZXJ0aWVzKTsgfQpAQCAtMjI4LDQxICsyMTIs
NDIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBOdWxsTm9kZShsb2NhdGlv
bik7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUJyYWNrZXRBY2Nlc3MoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJl
c3Npb25Ob2RlKiBwcm9wZXJ0eSwgYm9vbCBwcm9wZXJ0eUhhc0Fzc2lnbm1lbnRzLCBpbnQgc3Rh
cnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZv
dExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQnJhY2tldEFjY2Vzcyhjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVz
c2lvbk5vZGUqIHByb3BlcnR5LCBib29sIHByb3BlcnR5SGFzQXNzaWdubWVudHMsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSog
bm9kZSA9IG5ldyAobV92bSkgQnJhY2tldEFjY2Vzc29yTm9kZShsb2NhdGlvbiwgYmFzZSwgcHJv
cGVydHksIHByb3BlcnR5SGFzQXNzaWdubWVudHMpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2Nh
dGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7
CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kKTsK
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0
ZURvdEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciogcHJvcGVydHksIGludCBzdGFydCwgaW50IGRpdm90
LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQor
ICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVEb3RBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIqIHByb3Bl
cnR5LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIERvdEFjY2Vz
c29yTm9kZSogbm9kZSA9IG5ldyAobV92bSkgRG90QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNl
LCAqcHJvcGVydHkpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwg
ZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5v
ZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJ
ZGVudGlmaWVyJiBmbGFncywgaW50IHN0YXJ0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVk
IGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZWdFeHAoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgcGF0dGVybiwgY29u
c3QgSWRlbnRpZmllciYgZmxhZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCkKICAgICB7
CiAgICAgICAgIGlmIChZYXJyOjpjaGVja1N5bnRheChwYXR0ZXJuLnN0cmluZygpKSkKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICBSZWdFeHBOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBS
ZWdFeHBOb2RlKGxvY2F0aW9uLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgICAgIGludCBzaXplID0g
cGF0dGVybi5sZW5ndGgoKSArIDI7IC8vICsgMiBmb3IgdGhlIHR3byAvJ3MKLSAgICAgICAgc2V0
RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSwgc3RhcnQgKyBzaXpl
LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gZW5k
ID0gc3RhcnQgKyBzaXplOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFy
dCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzLCBpbnQgc3RhcnQs
IGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSog
YXJndW1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIE5l
d0V4cHJOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBOZXdFeHByTm9kZShsb2NhdGlvbiwgZXhwciwg
YXJndW1lbnRzKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRp
dm90LCBlbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzZXRFeGNlcHRp
b25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBub2Rl
OwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAg
RXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIE5ld0V4cHJOb2RlKiBu
b2RlID0gbmV3IChtX3ZtKSBOZXdFeHByTm9kZShsb2NhdGlvbiwgZXhwcik7Ci0gICAgICAgIHNl
dEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBlbmQsIGVuZCwgZGl2b3RMaW5lLCBkaXZv
dExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBl
bmQsIGVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtMjcxLDEyICsyNTYs
MTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBDb25kaXRpb25hbE5vZGUo
bG9jYXRpb24sIGNvbmRpdGlvbiwgbGhzLCByaHMpOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmhzLCBpbnQgc3RhcnQs
IGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXNzaWduUmVzb2x2ZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVz
c2lvbk5vZGUqIHJocywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAg
ICBpZiAocmhzLT5pc0Z1bmNFeHByTm9kZSgpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnVu
Y0V4cHJOb2RlKj4ocmhzKS0+Ym9keSgpLT5zZXRJbmZlcnJlZE5hbWUoaWRlbnQpOwogICAgICAg
ICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV92bSkgQXNzaWduUmVzb2x2ZU5vZGUo
bG9jYXRpb24sIGlkZW50LCByaHMpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2Rl
LCBzdGFydCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAg
IHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kKTsKICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC0zNTUsMTAgKzM0MCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBibG9jazsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFeHBy
U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBpbnQgc3RhcnQsIGludCBlbmQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRXhw
clN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKICAg
ICAgICAgRXhwclN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgRXhwclN0YXRlbWVu
dE5vZGUobG9jYXRpb24sIGV4cHIpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5k
LCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLCBzdGFydC5vZmZzZXQsIHN0YXJ0Lmxp
bmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0zNzYs
MTkgKzM2MSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0g
ICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlh
bGl6ZXIsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBp
bnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgaW50IGluaXRTdGFydCwgaW50IGluaXRFbmQs
IGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVk
IGRpdm90TGluZVN0YXJ0KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZvckluTG9vcChjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgRXhw
cmVzc2lvbk5vZGUqIGluaXRpYWxpemVyLCBFeHByZXNzaW9uTm9kZSogaXRlciwgU3RhdGVtZW50
Tm9kZSogc3RhdGVtZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBpbml0U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBpbml0RW5kLCBpbnQg
c3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIEZvckluTm9kZSogcmVzdWx0
ID0gbmV3IChtX3ZtKSBGb3JJbk5vZGUobV92bSwgbG9jYXRpb24sICppZGVudCwgaW5pdGlhbGl6
ZXIsIGl0ZXIsIHN0YXRlbWVudHMsIGluaXRTdGFydCwgaW5pdFN0YXJ0IC0gc3RhcnQsIGluaXRF
bmQgLSBpbml0U3RhcnQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBGb3JJ
bk5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgRm9ySW5Ob2RlKG1fdm0sIGxvY2F0aW9uLCAqaWRl
bnQsIGluaXRpYWxpemVyLCBpdGVyLCBzdGF0ZW1lbnRzLCBpbml0U3RhcnQsIHN0YXJ0LCBpbml0
RW5kKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlv
bi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgc2V0RXhj
ZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZGl2b3QgKyAxLCBlbmQsIGRpdm90TGluZSwg
ZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0
YXJ0LCBkaXZvdCArIDEsIGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0g
ICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0
ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgZVN0YXJ0LCBpbnQgZURpdm90LCBpbnQgZUVuZCwg
aW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGlu
ZVN0YXJ0KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSog
aXRlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVEaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGVFbmQsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7CiAgICAgICAgIEZvckluTm9kZSogcmVz
dWx0ID0gbmV3IChtX3ZtKSBGb3JJbk5vZGUobG9jYXRpb24sIGxocywgaXRlciwgc3RhdGVtZW50
cyk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLnN0YXJ0T2Zm
c2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2Nh
dGlvbihyZXN1bHQsIGVTdGFydCwgZURpdm90LCBlRW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0
YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVEaXZv
dCwgZUVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00MDUsNDMgKzM5
MCw0MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3Rh
dGVtZW50Tm9kZSogY3JlYXRlUmV0dXJuU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByZXNzaW9uLCBpbnQgZVN0YXJ0LCBpbnQgZUVu
ZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlUmV0dXJuU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
ZXNzaW9uLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlbmQpCiAgICAgewogICAgICAgICBSZXR1cm5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFJl
dHVybk5vZGUobG9jYXRpb24sIGV4cHJlc3Npb24pOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2Nh
dGlvbihyZXN1bHQsIGVTdGFydCwgZUVuZCwgZUVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFy
dCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24u
c3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIHVuc2ln
bmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCcmVha1N0YXRlbWVu
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBCcmVha05v
ZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQnJlYWtOb2RlKG1fdm0sIGxvY2F0aW9uKTsKLSAgICAg
ICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQsIGVuZExp
bmUsIGVuZExpbmVTdGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5k
TGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7Cisg
ICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNldCwg
c3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IGVTdGFydCwgaW50
IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25lZCBlbmRMaW5lU3RhcnQp
CisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAg
IEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBCcmVha05vZGUobG9jYXRpb24sICppZGVu
dCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBl
RW5kLCBlbmRMaW5lLCBlbmRMaW5lU3RhcnQpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFy
dExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRP
ZmZzZXQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQs
IGVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LmxpbmUsIGVuZC5saW5lLCBzdGFy
dC5vZmZzZXQsIHN0YXJ0LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVTdGFydCwgaW50IGVFbmQsIGludCBz
dGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25lZCBlbmRMaW5lU3RhcnQpCisgICAgU3RhdGVt
ZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZW5kKQogICAgIHsKICAgICAgICAgQ29udGludWVOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0p
IENvbnRpbnVlTm9kZShtX3ZtLCBsb2NhdGlvbik7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kLCBlbmRMaW5lLCBlbmRMaW5lU3RhcnQpOwot
ICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0
T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBzZXRFeGNlcHRpb25M
b2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9j
KHN0YXJ0LmxpbmUsIGVuZC5saW5lLCBzdGFydC5vZmZzZXQsIHN0YXJ0LmxpbmVTdGFydE9mZnNl
dCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSog
Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQsIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRM
aW5lLCBpbnQgZW5kTGluZSwgdW5zaWduZWQgZW5kTGluZVN0YXJ0KQorICAgIFN0YXRlbWVudE5v
ZGUqIGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBDb250aW51ZU5vZGUq
IHJlc3VsdCA9IG5ldyAobV92bSkgQ29udGludWVOb2RlKGxvY2F0aW9uLCAqaWRlbnQpOwotICAg
ICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZUVuZCwgZUVuZCwgZW5k
TGluZSwgZW5kTGluZVN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBl
bmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsK
KyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOwor
ICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0
LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IApAQCAtNDc2LDI2ICs0NjEsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBTdGF0ZW1l
bnROb2RlKiBzdGF0ZW1lbnQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSog
Y3JlYXRlTGFiZWxTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29u
c3QgSWRlbnRpZmllciogaWRlbnQsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogICAgIHsKICAg
ICAgICAgTGFiZWxOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIExhYmVsTm9kZShsb2NhdGlvbiwg
KmlkZW50LCBzdGF0ZW1lbnQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQs
IHN0YXJ0LCBlbmQsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHNl
dEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVXaXRoU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQs
IHVuc2lnbmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgZW5kTGluZSwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVXaXRo
U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIHVuc2lnbmVkIHN0YXJ0LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydExpbmUsIHVuc2lnbmVkIGVuZExpbmUp
CiAgICAgewogICAgICAgICB1c2VzV2l0aCgpOwotICAgICAgICBXaXRoTm9kZSogcmVzdWx0ID0g
bmV3IChtX3ZtKSBXaXRoTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGRpdm90
TGluZSwgZGl2b3RMaW5lU3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICAgICAgV2l0aE5vZGUqIHJl
c3VsdCA9IG5ldyAobV92bSkgV2l0aE5vZGUobG9jYXRpb24sIGV4cHIsIHN0YXRlbWVudCwgZW5k
LCBlbmQgLSBzdGFydCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGlu
ZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSAgICAKICAgICAKLSAgICBTdGF0ZW1lbnROb2RlKiBj
cmVhdGVUaHJvd1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQg
ZW5kTGluZSwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAg
ICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVUaHJvd1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogICAgIHsKICAgICAgICAgVGhyb3dO
b2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFRocm93Tm9kZShsb2NhdGlvbiwgZXhwcik7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZz
ZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsK
KyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNl
dCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24o
cmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
ICAgICAKQEAgLTU0NiwxMCArNTMxLDEwIEBAIHB1YmxpYzoKIAogICAgIGludCBldmFsQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX2V2YWxDb3VudDsgfQogCi0gICAgdm9pZCBhcHBlbmRCaW5hcnlF
eHByZXNzaW9uSW5mbyhpbnQmIG9wZXJhbmRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogY3Vy
cmVudCwgaW50IGV4cHJTdGFydCwgaW50IGxocywgaW50IHJocywgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCwgYm9vbCBoYXNBc3NpZ25tZW50cykKKyAgICB2b2lk
IGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKGludCYgb3BlcmFuZFN0YWNrRGVwdGgsIEV4cHJl
c3Npb25Ob2RlKiBjdXJyZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZXhwclN0YXJ0LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgbGhzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgcmhzLCBib29sIGhh
c0Fzc2lnbm1lbnRzKQogICAgIHsKICAgICAgICAgb3BlcmFuZFN0YWNrRGVwdGgrKzsKLSAgICAg
ICAgbV9iaW5hcnlPcGVyYW5kU3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGN1cnJlbnQsIEJp
bmFyeU9wSW5mbyhleHByU3RhcnQsIGxocywgcmhzLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
LCBoYXNBc3NpZ25tZW50cykpKTsKKyAgICAgICAgbV9iaW5hcnlPcGVyYW5kU3RhY2suYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKGN1cnJlbnQsIEJpbmFyeU9wSW5mbyhleHByU3RhcnQsIGxocywgcmhz
LCBoYXNBc3NpZ25tZW50cykpKTsKICAgICB9CiAKICAgICAvLyBMb2dpYyB0byBoYW5kbGUgZGF0
YXN0cnVjdHVyZXMgdXNlZCBkdXJpbmcgcGFyc2luZyBvZiBiaW5hcnkgZXhwcmVzc2lvbnMKQEAg
LTU4NiwxMSArNTcxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBhcHBlbmRVbmFyeVRva2VuKGludCYgdG9rZW5TdGFja0RlcHRoLCBp
bnQgdHlwZSwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpCisgICAgdm9pZCBhcHBlbmRVbmFyeVRva2VuKGludCYgdG9rZW5TdGFja0Rl
cHRoLCBpbnQgdHlwZSwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAg
ICAgdG9rZW5TdGFja0RlcHRoKys7Ci0gICAgICAgIFBvc2l0aW9uSW5mbyBwb3NpdGlvbiA9IHsg
c3RhcnQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQgfTsKLSAgICAgICAgbV91bmFyeVRva2Vu
U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHR5cGUsIHBvc2l0aW9uKSk7CisgICAgICAgIG1f
dW5hcnlUb2tlblN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih0eXBlLCBzdGFydCkpOwogICAg
IH0KIAogICAgIGludCB1bmFyeVRva2VuU3RhY2tMYXN0VHlwZShpbnQmKQpAQCAtNTk4LDM0ICs1
ODIsMjkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgp
LmZpcnN0OwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCB1bmFyeVRva2VuU3RhY2tMYXN0U3Rh
cnQoaW50JikKKyAgICBjb25zdCBKU1RleHRQb3NpdGlvbiYgdW5hcnlUb2tlblN0YWNrTGFzdFN0
YXJ0KGludCYpCiAgICAgewotICAgICAgICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgp
LnNlY29uZC5zdGFydFBvczsKKyAgICAgICAgcmV0dXJuIG1fdW5hcnlUb2tlblN0YWNrLmxhc3Qo
KS5zZWNvbmQ7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIHVuYXJ5VG9rZW5TdGFja0xhc3RM
aW5lU3RhcnRQb3NpdGlvbihpbnQmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdW5hcnlUb2tl
blN0YWNrLmxhc3QoKS5zZWNvbmQubGluZVN0YXJ0UG9zOwotICAgIH0KLQogICAgIHZvaWQgdW5h
cnlUb2tlblN0YWNrUmVtb3ZlTGFzdChpbnQmIHRva2VuU3RhY2tEZXB0aCkKICAgICB7CiAgICAg
ICAgIHRva2VuU3RhY2tEZXB0aC0tOwogICAgICAgICBtX3VuYXJ5VG9rZW5TdGFjay5yZW1vdmVM
YXN0KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYXNzaWdubWVudFN0YWNrQXBwZW5kKGludCYg
YXNzaWdubWVudFN0YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5l
U3RhcnQsIGludCBhc3NpZ25tZW50Q291bnQsIE9wZXJhdG9yIG9wKQorICAgIHZvaWQgYXNzaWdu
bWVudFN0YWNrQXBwZW5kKGludCYgYXNzaWdubWVudFN0YWNrRGVwdGgsIEV4cHJlc3Npb25Ob2Rl
KiBub2RlLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdCwgaW50IGFzc2lnbm1lbnRDb3VudCwgT3BlcmF0b3Igb3ApCiAgICAgewogICAgICAg
ICBhc3NpZ25tZW50U3RhY2tEZXB0aCsrOwotICAgICAgICBBU1NFUlQoc3RhcnQgPj0gZGl2b3RM
aW5lU3RhcnQpOwotICAgICAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5lU3RhcnQpOwotICAg
ICAgICBtX2Fzc2lnbm1lbnRJbmZvU3RhY2suYXBwZW5kKEFzc2lnbm1lbnRJbmZvKG5vZGUsIHN0
YXJ0LCBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCwgYXNzaWdubWVudENvdW50LCBv
cCkpOworICAgICAgICBBU1NFUlQoc3RhcnQub2Zmc2V0ID49IHN0YXJ0LmxpbmVTdGFydE9mZnNl
dCk7CisgICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0
KTsKKyAgICAgICAgbV9hc3NpZ25tZW50SW5mb1N0YWNrLmFwcGVuZChBc3NpZ25tZW50SW5mbyhu
b2RlLCBzdGFydCwgZGl2b3QsIGFzc2lnbm1lbnRDb3VudCwgb3ApKTsKICAgICB9CiAKLSAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlQXNzaWdubWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBpbnQmIGFzc2lnbm1lbnRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogcmhzLCBp
bnQgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCwgaW50IGN1cnJlbnRBc3NpZ25tZW50Q291bnQsIGlu
dCBsYXN0VG9rZW5FbmQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnbm1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50JiBhc3NpZ25tZW50U3RhY2tEZXB0aCwg
RXhwcmVzc2lvbk5vZGUqIHJocywgaW50IGluaXRpYWxBc3NpZ25tZW50Q291bnQsIGludCBjdXJy
ZW50QXNzaWdubWVudENvdW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgbGFzdFRva2VuRW5kKQog
ICAgIHsKICAgICAgICAgQXNzaWdubWVudEluZm8mIGluZm8gPSBtX2Fzc2lnbm1lbnRJbmZvU3Rh
Y2subGFzdCgpOwotICAgICAgICBFeHByZXNzaW9uTm9kZSogcmVzdWx0ID0gbWFrZUFzc2lnbk5v
ZGUobG9jYXRpb24sIGluZm8ubV9ub2RlLCBpbmZvLm1fb3AsIHJocywgaW5mby5tX2luaXRBc3Np
Z25tZW50cyAhPSBpbml0aWFsQXNzaWdubWVudENvdW50LCBpbmZvLm1faW5pdEFzc2lnbm1lbnRz
ICE9IGN1cnJlbnRBc3NpZ25tZW50Q291bnQsIGluZm8ubV9zdGFydCwgaW5mby5tX2Rpdm90ICsg
MSwgbGFzdFRva2VuRW5kLCBpbmZvLm1fZGl2b3RMaW5lLCBpbmZvLm1fZGl2b3RMaW5lU3RhcnQp
OworICAgICAgICBFeHByZXNzaW9uTm9kZSogcmVzdWx0ID0gbWFrZUFzc2lnbk5vZGUobG9jYXRp
b24sIGluZm8ubV9ub2RlLCBpbmZvLm1fb3AsIHJocywgaW5mby5tX2luaXRBc3NpZ25tZW50cyAh
PSBpbml0aWFsQXNzaWdubWVudENvdW50LCBpbmZvLm1faW5pdEFzc2lnbm1lbnRzICE9IGN1cnJl
bnRBc3NpZ25tZW50Q291bnQsIGluZm8ubV9zdGFydCwgaW5mby5tX2Rpdm90ICsgMSwgbGFzdFRv
a2VuRW5kKTsKICAgICAgICAgbV9hc3NpZ25tZW50SW5mb1N0YWNrLnJlbW92ZUxhc3QoKTsKICAg
ICAgICAgYXNzaWdubWVudFN0YWNrRGVwdGgtLTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTY1MSwxMCArNjMwLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGludCBtX251bUNvbnN0YW50czsK
ICAgICB9OwogCi0gICAgc3RhdGljIHZvaWQgc2V0RXhjZXB0aW9uTG9jYXRpb24oVGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGEqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQor
ICAgIHN0YXRpYyB2b2lkIHNldEV4Y2VwdGlvbkxvY2F0aW9uKFRocm93YWJsZUV4cHJlc3Npb25E
YXRhKiBub2RlLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgewot
ICAgICAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5lU3RhcnQpOwotICAgICAgICBub2RlLT5z
ZXRFeGNlcHRpb25Tb3VyY2VDb2RlKGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwg
ZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQg
Pj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgbm9kZS0+c2V0RXhjZXB0aW9uU291
cmNlQ29kZShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIH0KIAogICAgIHZvaWQg
aW5jQ29uc3RhbnRzKCkgeyBtX3Njb3BlLm1fbnVtQ29uc3RhbnRzKys7IH0KQEAgLTY3OCw3ICs2
NTcsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxCaW5hcnlPcGVyYW5kLCAxMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IG1fYmluYXJ5T3BlcmFuZFN0YWNrOwogICAgIFZlY3RvcjxBc3NpZ25tZW50
SW5mbywgMTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2Fzc2lnbm1lbnRJbmZvU3RhY2s7CiAg
ICAgVmVjdG9yPHBhaXI8aW50LCBpbnQ+LCAxMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmlu
YXJ5T3BlcmF0b3JTdGFjazsKLSAgICBWZWN0b3I8cGFpcjxpbnQsIFBvc2l0aW9uSW5mbz4sIDEw
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV91bmFyeVRva2VuU3RhY2s7CisgICAgVmVjdG9yPHBh
aXI8aW50LCBKU1RleHRQb3NpdGlvbj4sIDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV91bmFy
eVRva2VuU3RhY2s7CiAgICAgaW50IG1fZXZhbENvdW50OwogfTsKIApAQCAtNjkxLDIxICs2NzAs
MjEgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VUeXBlT2ZObwogICAgIHJldHVy
biBuZXcgKG1fdm0pIFR5cGVPZlZhbHVlTm9kZShsb2NhdGlvbiwgZXhwcik7CiB9CiAKLUV4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZGl2b3Qs
IGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURlbGV0ZU5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZW5kKQogewogICAgIGlmICghZXhwci0+aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1
cm4gbmV3IChtX3ZtKSBEZWxldGVWYWx1ZU5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIGlmIChl
eHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBz
dGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGV4cHIpOwotICAgICAgICByZXR1cm4gbmV3IChtX3Zt
KSBEZWxldGVSZXNvbHZlTm9kZShsb2NhdGlvbiwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBkaXZv
dCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQp
OworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVSZXNvbHZlTm9kZShsb2NhdGlvbiwg
cmVzb2x2ZS0+aWRlbnRpZmllcigpLCBkaXZvdCwgc3RhcnQsIGVuZCk7CiAgICAgfQogICAgIGlm
IChleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBCcmFja2V0QWNjZXNz
b3JOb2RlKiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29yTm9kZSo+KGV4cHIp
OwotICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVCcmFja2V0Tm9kZShsb2NhdGlvbiwg
YnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZGl2b3QsIGRpdm90IC0gc3Rh
cnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV92bSkgRGVsZXRlQnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2Uo
KSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGRpdm90LCBzdGFydCwgZW5kKTsKICAgICB9CiAgICAg
QVNTRVJUKGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpOwogICAgIERvdEFjY2Vzc29yTm9kZSog
ZG90ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4oZXhwcik7Ci0gICAgcmV0dXJuIG5l
dyAobV92bSkgRGVsZXRlRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRp
ZmllcigpLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2
b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZURvdE5vZGUobG9jYXRp
b24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZGl2b3QsIHN0YXJ0LCBlbmQpOwog
fQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU5lZ2F0ZU5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIG4pCkBAIC04MjIsMzYgKzgw
MSwzNiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vCiAgICAgcmV0
dXJuIG5ldyAobV92bSkgQml0WE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhh
c0Fzc2lnbm1lbnRzKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5j
dGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIHVuc2lnbmVkIGRpdm90
LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQor
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNO
b2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiB7Ci0gICAg
QVNTRVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsKKyAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0
ID49IGRpdm90LmxpbmVTdGFydE9mZnNldCk7CiAgICAgaWYgKCFmdW5jLT5pc0xvY2F0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShsb2NhdGlv
biwgZnVuYywgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExp
bmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgRnVuY3Rpb25D
YWxsVmFsdWVOb2RlKGxvY2F0aW9uLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpOwogICAgIGlmIChmdW5jLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgUmVzb2x2
ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGZ1bmMpOwogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyID0gcmVzb2x2ZS0+aWRlbnRpZmllcigpOwog
ICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsKSB7CiAg
ICAgICAgICAgICB1c2VzRXZhbCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgRXZh
bEZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBl
bmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChtX3ZtKSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgYXJncywgZGl2b3Qs
IGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnRpZmllciwgYXJncywg
ZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0
YXJ0KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUo
bG9jYXRpb24sIGlkZW50aWZpZXIsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7
CiAgICAgfQogICAgIGlmIChmdW5jLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAg
ICBCcmFja2V0QWNjZXNzb3JOb2RlKiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vz
c29yTm9kZSo+KGZ1bmMpOwotICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSogbm9kZSA9
IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJh
c2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBl
bmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7Ci0gICAgICAgIG5vZGUtPnNl
dFN1YmV4cHJlc3Npb25JbmZvKGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90RW5kT2Zm
c2V0KCksIGJyYWNrZXQtPmRpdm90TGluZSgpLCBicmFja2V0LT5kaXZvdExpbmVTdGFydCgpKTsK
KyAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEZ1bmN0
aW9uQ2FsbEJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1
YnNjcmlwdCgpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOworICAgICAgICBu
b2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZv
dEVuZCgpLm9mZnNldCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBBU1NFUlQo
ZnVuYy0+aXNEb3RBY2Nlc3Nvck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBz
dGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihmdW5jKTsKICAgICBGdW5jdGlvbkNhbGxEb3RO
b2RlKiBub2RlOwogICAgIGlmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLT5wcm9wZXJ0eU5h
bWVzLT5jYWxsKQotICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBDYWxsRnVuY3Rpb25DYWxsRG90
Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZv
dCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQp
OworICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShsb2Nh
dGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3RT
dGFydCwgZGl2b3RFbmQpOwogICAgIGVsc2UgaWYgKGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0t
PnByb3BlcnR5TmFtZXMtPmFwcGx5KQotICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBBcHBseUZ1
bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIo
KSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgbm9kZSA9IG5ldyAobV92bSkgQXBwbHlGdW5jdGlvbkNh
bGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3Ms
IGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgZWxzZQotICAgICAgICBub2RlID0g
bmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90
LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwg
ZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7Ci0gICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbklu
Zm8oZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90RW5kT2Zmc2V0KCksIGRvdC0+ZGl2b3RMaW5lKCks
IGRvdC0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIEZ1bmN0
aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwg
YXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKKyAgICBub2RlLT5zZXRTdWJleHBy
ZXNzaW9uSW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3RFbmQoKS5vZmZzZXQpOwogICAgIHJl
dHVybiBub2RlOwogfQogCkBAIC04OTksMTMgKzg3OCwxMyBAQCBFeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZUJpbmFyeU5vCiAKICAgICBjYXNlIElOU1RBTkNFT0Y6IHsKICAgICAgICAg
SW5zdGFuY2VPZk5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEluc3RhbmNlT2ZOb2RlKGxvY2F0aW9u
LCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKLSAgICAg
ICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgbGhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29u
ZC5zdGFydCwgcmhzLnNlY29uZC5lbmQsIHJocy5zZWNvbmQuZGl2b3RMaW5lLCByaHMuc2Vjb25k
LmRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgbGhz
LnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5lbmQpOwogICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICBjYXNlIElOVE9LRU46IHsKICAgICAgICAgSW5O
b2RlKiBub2RlID0gbmV3IChtX3ZtKSBJbk5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZp
cnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2Nh
dGlvbihub2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25k
LmVuZCwgcmhzLnNlY29uZC5kaXZvdExpbmUsIHJocy5zZWNvbmQuZGl2b3RMaW5lU3RhcnQpOwor
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMu
c2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLmVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAg
IH0KIApAQCAtOTM3LDEwICs5MTYsMTAgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VCaW5hcnlObwogICAgIHJldHVybiAwOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGxvYywgT3BlcmF0b3Igb3AsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBib29sIGxv
Y0hhc0Fzc2lnbm1lbnRzLCBib29sIGV4cHJIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQg
ZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxvYywgT3BlcmF0b3Igb3As
IEV4cHJlc3Npb25Ob2RlKiBleHByLCBib29sIGxvY0hhc0Fzc2lnbm1lbnRzLCBib29sIGV4cHJI
YXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKCFs
b2MtPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgQXNzaWduRXJyb3JO
b2RlKGxvY2F0aW9uLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGlu
ZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25FcnJv
ck5vZGUobG9jYXRpb24sIGRpdm90LCBzdGFydCwgZW5kKTsKIAogICAgIGlmIChsb2MtPmlzUmVz
b2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0
PFJlc29sdmVOb2RlKj4obG9jKTsKQEAgLTk0OCwxNyArOTI3LDE3IEBAIEV4cHJlc3Npb25Ob2Rl
KiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm8KICAgICAgICAgICAgIGlmIChleHByLT5pc0Z1bmNF
eHByTm9kZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGV4
cHIpLT5ib2R5KCktPnNldEluZmVycmVkTmFtZShyZXNvbHZlLT5pZGVudGlmaWVyKCkpOwogICAg
ICAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEFzc2lnblJlc29s
dmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGV4cHIpOwotICAgICAgICAg
ICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQsIGRpdm90TGlu
ZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGxvY2F0
aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIG9wLCBleHByLCBleHBySGFzQXNzaWdubWVudHMs
IGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVT
dGFydCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFJlYWRNb2RpZnlSZXNvbHZlTm9kZShs
b2NhdGlvbiwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1l
bnRzLCBkaXZvdCwgc3RhcnQsIGVuZCk7CiAgICAgfQogICAgIGlmIChsb2MtPmlzQnJhY2tldEFj
Y2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBz
dGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obG9jKTsKICAgICAgICAgaWYgKG9wID09
IE9wRXF1YWwpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25CcmFja2V0Tm9k
ZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZXhwciwg
bG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgYnJhY2tldC0+ZGl2b3QoKSwg
YnJhY2tldC0+ZGl2b3QoKSAtIHN0YXJ0LCBlbmQgLSBicmFja2V0LT5kaXZvdCgpLCBicmFja2V0
LT5kaXZvdExpbmUoKSwgYnJhY2tldC0+ZGl2b3RMaW5lU3RhcnQoKSk7Ci0gICAgICAgIFJlYWRN
b2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgUmVhZE1vZGlmeUJyYWNrZXROb2Rl
KGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhw
ciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0g
c3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAg
bm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+ZGl2
b3RFbmRPZmZzZXQoKSwgYnJhY2tldC0+ZGl2b3RMaW5lKCksIGJyYWNrZXQtPmRpdm90TGluZVN0
YXJ0KCkpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgQXNzaWduQnJhY2tldE5vZGUo
bG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGV4cHIsIGxv
Y0hhc0Fzc2lnbm1lbnRzLCBleHBySGFzQXNzaWdubWVudHMsIGJyYWNrZXQtPmRpdm90KCksIHN0
YXJ0LCBlbmQpOworICAgICAgICBSZWFkTW9kaWZ5QnJhY2tldE5vZGUqIG5vZGUgPSBuZXcgKG1f
dm0pIFJlYWRNb2RpZnlCcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFj
a2V0LT5zdWJzY3JpcHQoKSwgb3AsIGV4cHIsIGxvY0hhc0Fzc2lnbm1lbnRzLCBleHBySGFzQXNz
aWdubWVudHMsIGRpdm90LCBzdGFydCwgZW5kKTsKKyAgICAgICAgbm9kZS0+c2V0U3ViZXhwcmVz
c2lvbkluZm8oYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+ZGl2b3RFbmQoKS5vZmZzZXQpOwog
ICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgQVNTRVJUKGxvYy0+aXNEb3RBY2Nlc3Nv
ck5vZGUoKSk7CkBAIC05NjYsMjIgKzk0NSwyMiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUFzc2lnbk5vCiAgICAgaWYgKG9wID09IE9wRXF1YWwpIHsKICAgICAgICAgaWYgKGV4
cHItPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5v
ZGUqPihleHByKS0+Ym9keSgpLT5zZXRJbmZlcnJlZE5hbWUoZG90LT5pZGVudGlmaWVyKCkpOwot
ICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25Eb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJh
c2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZG90LT5k
aXZvdCgpLCBkb3QtPmRpdm90KCkgLSBzdGFydCwgZW5kIC0gZG90LT5kaXZvdCgpLCBkb3QtPmRp
dm90TGluZSgpLCBkb3QtPmRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBBc3NpZ25Eb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVy
KCksIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZG90LT5kaXZvdCgpLCBzdGFydCwgZW5kKTsK
ICAgICB9CiAKLSAgICBSZWFkTW9kaWZ5RG90Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgUmVhZE1v
ZGlmeURvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgb3As
IGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRp
dm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKLSAgICBub2RlLT5zZXRTdWJleHByZXNz
aW9uSW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3RFbmRPZmZzZXQoKSwgZG90LT5kaXZvdExp
bmUoKSwgZG90LT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICBSZWFkTW9kaWZ5RG90Tm9kZSogbm9k
ZSA9IG5ldyAobV92bSkgUmVhZE1vZGlmeURvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBk
b3QtPmlkZW50aWZpZXIoKSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIHN0
YXJ0LCBlbmQpOworICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwg
ZG90LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLUV4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3AsIGludCBzdGFydCwg
aW50IGRpdm90LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGlu
ZVN0YXJ0KQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQcmVmaXhOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRv
ciBvcCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgcmV0dXJuIG5ldyAobV92
bSkgUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBl
bmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgcmV0dXJuIG5ldyAo
bV92bSkgUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRpdm90LCBzdGFydCwgZW5kKTsK
IH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQb3N0Zml4Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Ig
b3AsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVu
c2lnbmVkIGRpdm90TGluZVN0YXJ0KQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQ
b3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogZXhwciwgT3BlcmF0b3Igb3AsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogewotICAg
IHJldHVybiBuZXcgKG1fdm0pIFBvc3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcCwgZGl2b3Qs
IGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsK
KyAgICByZXR1cm4gbmV3IChtX3ZtKSBQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRp
dm90LCBzdGFydCwgZW5kKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9MZXhlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9MZXhlci5jcHAJKHJldmlzaW9uIDE1MzA3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTGV4ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA2LDggKzEzMDYsMTAgQEAgYm9v
bCBMZXhlcjxUPjo6bmV4dFRva2VuSXNDb2xvbigpCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotSlNUb2tlblR5cGUgTGV4ZXI8VD46OmxleChKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rv
a2VuTG9jYXRpb24qIHRva2VuTG9jYXRpb24sIHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3Ry
aWN0TW9kZSkKK0pTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXgoSlNUb2tlbiogdG9rZW5SZWNvcmQs
IHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3RyaWN0TW9kZSkKIHsKKyAgICBKU1Rva2VuRGF0
YSogdG9rZW5EYXRhID0gJnRva2VuUmVjb3JkLT5tX2RhdGE7CisgICAgSlNUb2tlbkxvY2F0aW9u
KiB0b2tlbkxvY2F0aW9uID0gJnRva2VuUmVjb3JkLT5tX2xvY2F0aW9uOwogICAgIEFTU0VSVCgh
bV9lcnJvcik7CiAgICAgQVNTRVJUKG1fYnVmZmVyOC5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCht
X2J1ZmZlcjE2LmlzRW1wdHkoKSk7CkBAIC0xMzI0LDYgKzEzMjYsNyBAQCBzdGFydDoKICAgICAK
ICAgICB0b2tlbkxvY2F0aW9uLT5zdGFydE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICBB
U1NFUlQoY3VycmVudE9mZnNldCgpID49IGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQoKSk7CisgICAg
dG9rZW5SZWNvcmQtPm1fc3RhcnRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbigpOwogCiAgICAg
Q2hhcmFjdGVyVHlwZSB0eXBlOwogICAgIGlmIChMSUtFTFkoaXNMYXRpbjEobV9jdXJyZW50KSkp
CkBAIC0xNjk5LDYgKzE3MDIsNyBAQCByZXR1cm5Ub2tlbjoKICAgICB0b2tlbkxvY2F0aW9uLT5l
bmRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CiAgICAgdG9rZW5Mb2NhdGlvbi0+bGluZVN0YXJ0
T2Zmc2V0ID0gY3VycmVudExpbmVTdGFydE9mZnNldCgpOwogICAgIEFTU0VSVCh0b2tlbkxvY2F0
aW9uLT5lbmRPZmZzZXQgPj0gdG9rZW5Mb2NhdGlvbi0+bGluZVN0YXJ0T2Zmc2V0KTsKKyAgICB0
b2tlblJlY29yZC0+bV9lbmRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbigpOwogICAgIG1fbGFz
dFRva2VuID0gdG9rZW47CiAgICAgcmV0dXJuIHRva2VuOwogCkBAIC0xNzA4LDYgKzE3MTIsNyBA
QCByZXR1cm5FcnJvcjoKICAgICB0b2tlbkxvY2F0aW9uLT5lbmRPZmZzZXQgPSBjdXJyZW50T2Zm
c2V0KCk7CiAgICAgdG9rZW5Mb2NhdGlvbi0+bGluZVN0YXJ0T2Zmc2V0ID0gY3VycmVudExpbmVT
dGFydE9mZnNldCgpOwogICAgIEFTU0VSVCh0b2tlbkxvY2F0aW9uLT5lbmRPZmZzZXQgPj0gdG9r
ZW5Mb2NhdGlvbi0+bGluZVN0YXJ0T2Zmc2V0KTsKKyAgICB0b2tlblJlY29yZC0+bV9lbmRQb3Np
dGlvbiA9IGN1cnJlbnRQb3NpdGlvbigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRva2VuICYgRXJy
b3JUb2tlbkZsYWcpOwogICAgIHJldHVybiB0b2tlbjsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0xleGVyLmgJKHJldmlzaW9uIDE1MzA3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODYsMTEgKzg2LDE1IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldElzUmVwYXJzaW5nKCkgeyBtX2lzUmVwYXJzaW5nID0gdHJ1ZTsg
fQogICAgIGJvb2wgaXNSZXBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzUmVwYXJzaW5nOyB9
CiAKLSAgICBKU1Rva2VuVHlwZSBsZXgoSlNUb2tlbkRhdGEqLCBKU1Rva2VuTG9jYXRpb24qLCB1
bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKKyAgICBKU1Rva2VuVHlwZSBsZXgoSlNUb2tlbios
IHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOwogICAgIGJvb2wgbmV4dFRva2VuSXNDb2xvbigp
OwogICAgIGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9CiAg
ICAgQUxXQVlTX0lOTElORSBpbnQgY3VycmVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNl
dEZyb21Tb3VyY2VQdHIobV9jb2RlKTsgfQogICAgIEFMV0FZU19JTkxJTkUgaW50IGN1cnJlbnRM
aW5lU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBvZmZzZXRGcm9tU291cmNlUHRyKG1fbGlu
ZVN0YXJ0KTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNUZXh0UG9zaXRpb24gY3VycmVudFBvc2l0
aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBKU1RleHRQb3NpdGlvbihtX2xpbmVO
dW1iZXIsIGN1cnJlbnRPZmZzZXQoKSwgY3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKKyAgICB9
CiAgICAgdm9pZCBzZXRMYXN0TGluZU51bWJlcihpbnQgbGFzdExpbmVOdW1iZXIpIHsgbV9sYXN0
TGluZU51bWJlciA9IGxhc3RMaW5lTnVtYmVyOyB9CiAgICAgaW50IGxhc3RMaW5lTnVtYmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXN0TGluZU51bWJlcjsgfQogICAgIGJvb2wgcHJldlRlcm1pbmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX3Rlcm1pbmF0b3I7IH0KQEAgLTEyNSw3ICsxMjksNyBAQCBw
dWJsaWM6CiAKICAgICBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS0+cHJvdmlkZXIoKTsgfQogCi0gICAgSlNUb2tlblR5cGUgbGV4RXhwZWN0
SWRlbnRpZmllcihKU1Rva2VuRGF0YSosIEpTVG9rZW5Mb2NhdGlvbiosIHVuc2lnbmVkLCBib29s
IHN0cmljdE1vZGUpOworICAgIEpTVG9rZW5UeXBlIGxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tl
biosIHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOwogCiBwcml2YXRlOgogICAgIHZvaWQgcmVj
b3JkOChpbnQpOwpAQCAtMzMxLDEyICszMzUsMTUgQEAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVu
dGlmaWVyKiBMZXhlcjxUPgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJ
TkUgSlNUb2tlblR5cGUgTGV4ZXI8VD46OmxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbkRhdGEq
IHRva2VuRGF0YSwgSlNUb2tlbkxvY2F0aW9uKiB0b2tlbkxvY2F0aW9uLCB1bnNpZ25lZCBsZXhl
ckZsYWdzLCBib29sIHN0cmljdE1vZGUpCitBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVy
PFQ+OjpsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW4qIHRva2VuUmVjb3JkLCB1bnNpZ25lZCBs
ZXhlckZsYWdzLCBib29sIHN0cmljdE1vZGUpCiB7CisgICAgSlNUb2tlbkRhdGEqIHRva2VuRGF0
YSA9ICZ0b2tlblJlY29yZC0+bV9kYXRhOworICAgIEpTVG9rZW5Mb2NhdGlvbiogdG9rZW5Mb2Nh
dGlvbiA9ICZ0b2tlblJlY29yZC0+bV9sb2NhdGlvbjsKICAgICBBU1NFUlQoKGxleGVyRmxhZ3Mg
JiBMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcykpOwogICAgIGNvbnN0IFQqIHN0YXJ0ID0g
bV9jb2RlOwogICAgIGNvbnN0IFQqIHB0ciA9IHN0YXJ0OwogICAgIGNvbnN0IFQqIGVuZCA9IG1f
Y29kZUVuZDsKKyAgICBKU1RleHRQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gY3VycmVudFBvc2l0
aW9uKCk7CiAgICAgaWYgKHB0ciA+PSBlbmQpIHsKICAgICAgICAgQVNTRVJUKHB0ciA9PSBlbmQp
OwogICAgICAgICBnb3RvIHNsb3dDYXNlOwpAQCAtMzcxLDExICszNzgsMTMgQEAgQUxXQVlTX0lO
TElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4RQogICAgIHRva2VuTG9jYXRpb24tPnN0YXJ0
T2Zmc2V0ID0gb2Zmc2V0RnJvbVNvdXJjZVB0cihzdGFydCk7CiAgICAgdG9rZW5Mb2NhdGlvbi0+
ZW5kT2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwogICAgIEFTU0VSVCh0b2tlbkxvY2F0aW9uLT5z
dGFydE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOworICAgIHRva2Vu
UmVjb3JkLT5tX3N0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIHRva2VuUmVjb3Jk
LT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgbV9sYXN0VG9rZW4gPSBJ
REVOVDsKICAgICByZXR1cm4gSURFTlQ7CiAgICAgCiBzbG93Q2FzZToKLSAgICByZXR1cm4gbGV4
KHRva2VuRGF0YSwgdG9rZW5Mb2NhdGlvbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSk7CisgICAg
cmV0dXJuIGxleCh0b2tlblJlY29yZCwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE1MzA3NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5
ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBOb2RlOjpOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCi0gICAgICAgIDogbV9saW5lTnVtYmVy
KGxvY2F0aW9uLmxpbmUpCi0gICAgICAgICwgbV9zdGFydE9mZnNldChsb2NhdGlvbi5zdGFydE9m
ZnNldCkKLSAgICAgICAgLCBtX2xpbmVTdGFydE9mZnNldChsb2NhdGlvbi5saW5lU3RhcnRPZmZz
ZXQpCisgICAgICAgIDogbV9wb3NpdGlvbihsb2NhdGlvbi5saW5lLCBsb2NhdGlvbi5zdGFydE9m
ZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGxv
Y2F0aW9uLnN0YXJ0T2Zmc2V0ID49IGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgfQpA
QCAtMTAyLDE0ICsxMDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotaW5s
aW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitpbmxpbmUgUmVzb2x2ZU5v
ZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgICAgIDog
RXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKLSAgICAg
ICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQotICAgICAgICAsIG1fZGl2b3RMaW5lKGRp
dm90TGluZSkKLSAgICAgICAgLCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0YXJ0KQorICAg
ICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgewotICAgICAgICBBU1NFUlQobV9zdGFydE9mZnNl
dCA+PSBtX2Rpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQVNTRVJUKG1fc3RhcnQub2Zmc2V0ID49
IG1fc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICB9CiAKICAgICBpbmxpbmUgRWxlbWVudE5v
ZGU6OkVsZW1lbnROb2RlKGludCBlbGlzaW9uLCBFeHByZXNzaW9uTm9kZSogbm9kZSkKQEAgLTI0
Niw4MSArMjQyLDgxIEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMK
ICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpFdmFsRnVu
Y3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBBcmd1bWVudHNO
b2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkK
KyAgICBpbmxpbmUgRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OkV2YWxGdW5jdGlvbkNhbGxOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9k
ZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAg
LCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAg
ICAgICAgICwgbV9hcmdzKGFyZ3MpCiAgICAgewotICAgICAgICBBU1NFUlQoZGl2b3QgPj0gZGl2
b3RMaW5lU3RhcnQpOwogICAgIH0KIAotICAgIGlubGluZSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6
OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFZh
bHVlTm9kZTo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUo
bG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAg
ICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdFN0YXJ0Lm9mZnNldCk7CiAgICAgfQogCi0g
ICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpGdW5jdGlv
bkNhbGxSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQot
ICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZUV4
cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2lk
ZW50KGlkZW50KQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKICAgICB9CiAKLSAgICBp
bmxpbmUgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHBy
ZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBkaXZv
dCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2
b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRnVuY3Rpb25DYWxs
QnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2Ny
aXB0LCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhy
b3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lv
bkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fYmFzZShiYXNl
KQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKICAgICAgICAgLCBtX2FyZ3MoYXJn
cykKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OkZ1bmN0
aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2RlKiBhcmdz
LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxp
bmUgRnVuY3Rpb25DYWxsRG90Tm9kZTo6RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAg
LCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVTdWJFeHBy
ZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNl
KGJhc2UpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX2FyZ3MoYXJncykK
ICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjpDYWxs
RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUq
IGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQotICAg
ICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50LCBhcmdzLCBk
aXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkK
KyAgICBpbmxpbmUgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OkNhbGxGdW5jdGlvbkNhbGxEb3RO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNl
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5v
ZGUobG9jYXRpb24sIGJhc2UsIGlkZW50LCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RF
bmQpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6
OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50
c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KQotICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50LCBh
cmdzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVT
dGFydCkKKyAgICBpbmxpbmUgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpBcHBseUZ1bmN0aW9u
Q2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2RlKiBhcmdzLCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0
YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCisgICAgICAgIDogRnVuY3Rpb25D
YWxsRG90Tm9kZShsb2NhdGlvbiwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFBvc3RmaXhOb2RlOjpQb3N0
Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSog
ZXhwciwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RM
aW5lU3RhcnQpCi0gICAgICAgIDogUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3BlciwgZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisg
ICAgaW5saW5lIFBvc3RmaXhOb2RlOjpQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3BlciwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICA6IFByZWZpeE5vZGUobG9jYXRp
b24sIGV4cHIsIG9wZXIsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICB7CiAgICAg
fQogCi0gICAgaW5saW5lIERlbGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5z
aWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVu
c2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIERl
bGV0ZVJlc29sdmVOb2RlOjpEZWxldGVSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAg
ICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2lkZW50
KGlkZW50KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRGVsZXRlQnJhY2tldE5vZGU6OkRl
bGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Np
b25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRGVsZXRlQnJhY2tldE5v
ZGU6OkRlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4
cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9j
YXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAg
ICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKICAgICB7
CiAgICAgfQogCi0gICAgaW5saW5lIERlbGV0ZURvdE5vZGU6OkRlbGV0ZURvdE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCkKKyAgICBpbmxpbmUgRGVsZXRlRG90Tm9kZTo6RGVsZXRlRG90Tm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVFeHByZXNz
aW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RT
dGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9pZGVu
dChpZGVudCkKICAgICB7CkBAIC0zNTAsOSArMzQ2LDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpS
ZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJlZml4Tm9k
ZTo6UHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogZXhwciwgT3BlcmF0b3Igb3BlciwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQg
ZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIFByZWZpeE5vZGU6OlByZWZpeE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9y
IG9wZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBF
eHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVQcmVmaXhlZFN1YkV4
cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRh
dGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fZXhwcihleHByKQog
ICAgICAgICAsIG1fb3BlcmF0b3Iob3BlcikKICAgICB7CkBAIC01MzYsMTYgKzUzMiwxNCBAQCBp
bmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAot
ICAgIGlubGluZSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
T3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAg
ICBpbmxpbmUgUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE9w
ZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRh
KGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0
KQorICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1fcmlnaHQocmln
aHQpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcGVyKQogICAgICAgICAsIG1fcmlnaHRIYXNBc3Np
Z25tZW50cyhyaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGRpdm90
ID49IGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgQVNTRVJUKGRpdm90IC0gc3RhcnRPZmZzZXQg
Pj0gZGl2b3RMaW5lU3RhcnQpOwogICAgIH0KIAogICAgIGlubGluZSBBc3NpZ25SZXNvbHZlTm9k
ZTo6QXNzaWduUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCkKQEAgLTU1NSw5ICs1
NDksMTAgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgUmVhZE1vZGlmeUJyYWNrZXROb2RlOjpSZWFkTW9kaWZ5QnJh
Y2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Np
b25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhh
c0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFy
dCkKKworICAgIGlubGluZSBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OlJlYWRNb2RpZnlCcmFja2V0
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFz
ZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5v
ZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAg
OiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNz
aW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2
b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9z
dWJzY3JpcHQoc3Vic2NyaXB0KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQpCkBAIC01NjcsOSAr
NTYyLDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsK
ICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduQnJhY2tldE5vZGU6OkFzc2lnbkJyYWNrZXROb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBF
eHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vi
c2NyaXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQg
ZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVk
IGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEFzc2lnbkJy
YWNrZXROb2RlOjpBc3NpZ25CcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgRXhw
cmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkK
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBk
aXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwg
ZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwg
bV9zdWJzY3JpcHQoc3Vic2NyaXB0KQogICAgICAgICAsIG1fcmlnaHQocmlnaHQpCkBAIC01Nzgs
OSArNTczLDkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAg
IHsKICAgICB9CiAKLSAgICBpbmxpbmUgQXNzaWduRG90Tm9kZTo6QXNzaWduRG90Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkK
KyAgICBpbmxpbmUgQXNzaWduRG90Tm9kZTo6QXNzaWduRG90Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0
YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lv
bk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3Qs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAg
ICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5k
KQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAg
ICAgICwgbV9yaWdodChyaWdodCkKQEAgLTU4OCw5ICs1ODMsOSBAQCBpbmxpbmUgUmVzb2x2ZU5v
ZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBSZWFk
TW9kaWZ5RG90Tm9kZTo6UmVhZE1vZGlmeURvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBP
cGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAg
aW5saW5lIFJlYWRNb2RpZnlEb3ROb2RlOjpSZWFkTW9kaWZ5RG90Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlU3Vi
RXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwg
ZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEoZGl2
b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fYmFzZShiYXNlKQogICAgICAg
ICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKQEAgLTU5OSw5ICs1
OTQsOSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewog
ICAgIH0KIAotICAgIGlubGluZSBBc3NpZ25FcnJvck5vZGU6OkFzc2lnbkVycm9yTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25l
ZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgQXNzaWduRXJyb3JOb2RlOjpBc3NpZ25FcnJv
ck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQot
ICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZUV4
cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICB7CiAgICAgfQog
CkBAIC03MDYsMTMgKzcwMSwxMSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNv
bnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBXaXRoTm9kZTo6V2l0aE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRl
bWVudE5vZGUqIHN0YXRlbWVudCwgdWludDMyX3QgZGl2b3QsIHVuc2lnbmVkIGRpdm90TGluZSwg
dW5zaWduZWQgZGl2b3RMaW5lU3RhcnQsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgpCisgICAg
aW5saW5lIFdpdGhOb2RlOjpXaXRoTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIHVpbnQzMl90IGV4cHJlc3Npb25MZW5ndGgpCiAgICAgICAg
IDogU3RhdGVtZW50Tm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAg
ICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgICAgICwgbV9kaXZvdChkaXZvdCkKLSAg
ICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExpbmUpCi0gICAgICAgICwgbV9kaXZvdExpbmVTdGFy
dChkaXZvdExpbmVTdGFydCkKICAgICAgICAgLCBtX2V4cHJlc3Npb25MZW5ndGgoZXhwcmVzc2lv
bkxlbmd0aCkKICAgICB7CiAgICAgfQpAQCAtODIyLDE3ICs4MTUsMTcgQEAgaW5saW5lIFJlc29s
dmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
Rm9ySW5Ob2RlOjpGb3JJbk5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGluLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCB1bnNpZ25lZCBkaXZvdCwg
aW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2ln
bmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBGb3JJbk5vZGU6OkZvckluTm9kZShWTSog
dm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBFeHByZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAg
ICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1faW5pdCgwKQotICAg
ICAgICAsIG1fbGV4cHIobmV3ICh2bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCBkaXZv
dCAtIHN0YXJ0T2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KSkKKyAgICAgICAgLCBt
X2xleHByKG5ldyAodm0pIFJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwgZGl2b3RTdGFydCkp
CiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50
KQogICAgIHsKICAgICAgICAgaWYgKGluKSB7CiAgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9k
ZSogbm9kZSA9IG5ldyAodm0pIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwgaW4p
OwotICAgICAgICAgICAgQVNTRVJUKGRpdm90ID49IGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90IC0gc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKKyAg
ICAgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kKTsKICAgICAgICAgICAgIG1faW5pdCA9IG5vZGU7CiAgICAgICAgIH0KICAgICAg
ICAgLy8gZm9yKCB2YXIgZm9vID0gYmFyIGluIGJheiApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTUzMDc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIFN0YXRlbWVudE5vZGU6OnNldExvYyh1bnNpZ25lZCBm
aXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCBpbnQgc3RhcnRPZmZzZXQsIGludCBsaW5lU3Rh
cnRPZmZzZXQpCiB7Ci0gICAgbV9saW5lTnVtYmVyID0gZmlyc3RMaW5lOwogICAgIG1fbGFzdExp
bmUgPSBsYXN0TGluZTsKLSAgICBtX3N0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7Ci0gICAgbV9s
aW5lU3RhcnRPZmZzZXQgPSBsaW5lU3RhcnRPZmZzZXQ7Ci0gICAgQVNTRVJUKG1fc3RhcnRPZmZz
ZXQgPj0gbV9saW5lU3RhcnRPZmZzZXQpOworICAgIG1fcG9zaXRpb24gPSBKU1RleHRQb3NpdGlv
bihmaXJzdExpbmUsIHN0YXJ0T2Zmc2V0LCBsaW5lU3RhcnRPZmZzZXQpOworICAgIEFTU0VSVCht
X3Bvc2l0aW9uLm9mZnNldCA+PSBtX3Bvc2l0aW9uLmxpbmVTdGFydE9mZnNldCk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTb3VyY2VFbGVtZW50cyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuaAkocmV2aXNpb24gMTUzMDc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTQgKzEyOSwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGUoKSB7IH0KIAotICAgICAgICBp
bnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Ci0gICAgICAgIGludCBz
dGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KLSAgICAgICAgaW50
IGxpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVN0YXJ0T2Zmc2V0OyB9Cisg
ICAgICAgIGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLmxpbmU7IH0KKyAg
ICAgICAgaW50IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbi5vZmZzZXQ7
IH0KKyAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRp
b24ubGluZVN0YXJ0T2Zmc2V0OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBwb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgaW50IG1fbGluZU51bWJlcjsKLSAgICAgICAgaW50IG1fc3RhcnRPZmZzZXQ7Ci0gICAg
ICAgIGludCBtX2xpbmVTdGFydE9mZnNldDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9wb3Np
dGlvbjsKICAgICB9OwogCiAgICAgY2xhc3MgRXhwcmVzc2lvbk5vZGUgOiBwdWJsaWMgTm9kZSB7
CkBAIC0yNTQsNDkgKzI1Myw0MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgogICAgICAgICBUaHJvd2FibGVFeHByZXNz
aW9uRGF0YSgpCi0gICAgICAgICAgICA6IG1fZGl2b3Qoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0x
KSkKLSAgICAgICAgICAgICwgbV9kaXZvdFN0YXJ0T2Zmc2V0KHN0YXRpY19jYXN0PHVpbnQxNl90
PigtMSkpCi0gICAgICAgICAgICAsIG1fZGl2b3RFbmRPZmZzZXQoc3RhdGljX2Nhc3Q8dWludDE2
X3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmVTdGFydChzdGF0aWNfY2FzdDx1aW50MzJf
dD4oLTEpKQorICAgICAgICAgICAgOiBtX2Rpdm90KC0xLCAtMSwgLTEpCisgICAgICAgICAgICAs
IG1fZGl2b3RTdGFydCgtMSwgLTEsIC0xKQorICAgICAgICAgICAgLCBtX2Rpdm90RW5kKC0xLCAt
MSwgLTEpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGEodW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQpCisgICAgICAgIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZW5kKQogICAgICAgICAgICAgOiBtX2Rpdm90KGRpdm90KQotICAgICAgICAgICAgLCBtX2Rp
dm90U3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1fZGl2b3RFbmRPZmZz
ZXQoZW5kT2Zmc2V0KQotICAgICAgICAgICAgLCBtX2Rpdm90TGluZShkaXZvdExpbmUpCi0gICAg
ICAgICAgICAsIG1fZGl2b3RMaW5lU3RhcnQoZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICAgICAs
IG1fZGl2b3RTdGFydChzdGFydCkKKyAgICAgICAgICAgICwgbV9kaXZvdEVuZChlbmQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90ID49IG1fZGl2b3RMaW5lU3RhcnQpOwor
ICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3Qub2Zmc2V0ID49IG1fZGl2b3QubGluZVN0YXJ0T2Zm
c2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Rpdm90U3RhcnQub2Zmc2V0ID49IG1fZGl2b3RT
dGFydC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3RFbmQub2Zm
c2V0ID49IG1fZGl2b3RFbmQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb25Tb3VyY2VDb2RlKHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUs
IHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorCisgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uU291
cmNlQ29kZShjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChkaXZvdCA+PSBkaXZvdExpbmVTdGFydCk7CisgICAgICAgICAg
ICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90LmxpbmVTdGFydE9mZnNldCk7CisgICAgICAg
ICAgICBBU1NFUlQoZGl2b3RTdGFydC5vZmZzZXQgPj0gZGl2b3RTdGFydC5saW5lU3RhcnRPZmZz
ZXQpOworICAgICAgICAgICAgQVNTRVJUKGRpdm90RW5kLm9mZnNldCA+PSBkaXZvdEVuZC5saW5l
U3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgbV9kaXZvdCA9IGRpdm90OwotICAgICAgICAgICAg
bV9kaXZvdFN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICBtX2Rpdm90RW5k
T2Zmc2V0ID0gZW5kT2Zmc2V0OwotICAgICAgICAgICAgbV9kaXZvdExpbmUgPSBkaXZvdExpbmU7
Ci0gICAgICAgICAgICBtX2Rpdm90TGluZVN0YXJ0ID0gZGl2b3RMaW5lU3RhcnQ7CisgICAgICAg
ICAgICBtX2Rpdm90U3RhcnQgPSBkaXZvdFN0YXJ0OworICAgICAgICAgICAgbV9kaXZvdEVuZCA9
IGRpdm90RW5kOwogICAgICAgICB9CiAKLSAgICAgICAgdWludDMyX3QgZGl2b3QoKSBjb25zdCB7
IHJldHVybiBtX2Rpdm90OyB9Ci0gICAgICAgIHVpbnQxNl90IGRpdm90U3RhcnRPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX2Rpdm90U3RhcnRPZmZzZXQ7IH0KLSAgICAgICAgdWludDE2X3QgZGl2
b3RFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90RW5kT2Zmc2V0OyB9Ci0gICAgICAg
IHVpbnQzMl90IGRpdm90TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RMaW5lOyB9Ci0gICAg
ICAgIHVpbnQzMl90IGRpdm90TGluZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9kaXZvdExpbmVT
dGFydDsgfQorICAgICAgICBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QoKSBjb25zdCB7IHJl
dHVybiBtX2Rpdm90OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9kaXZvdFN0YXJ0OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RFbmQ7IH0KIAogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgdWludDMyX3QgbV9kaXZvdDsKLSAgICAgICAgdWludDE2X3QgbV9kaXZvdFN0YXJ0
T2Zmc2V0OwotICAgICAgICB1aW50MTZfdCBtX2Rpdm90RW5kT2Zmc2V0OwotICAgICAgICB1aW50
MzJfdCBtX2Rpdm90TGluZTsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdExpbmVTdGFydDsKKyAg
ICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9k
aXZvdFN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBtX2Rpdm90RW5kOwogICAgIH07CiAK
ICAgICBjbGFzcyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSA6IHB1YmxpYyBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YSB7CkBAIC0zMDksOCArMzAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhKHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQotICAgICAgICAgICAg
OiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwg
ZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgVGhyb3dhYmxlU3ViRXhwcmVzc2lv
bkRhdGEoY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgICAgICAgICAg
OiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAg
ICAgICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0KDApCiAgICAgICAgICAgICAs
IG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgwKQogICAgICAgICAgICAgLCBtX3N1YmV4cHJlc3Np
b25MaW5lT2Zmc2V0KDApCkBAIC0zMTgsMjggKzMxMSwzNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRTdWJleHByZXNzaW9uSW5mbyh1
aW50MzJfdCBzdWJleHByZXNzaW9uRGl2b3QsIHVpbnQxNl90IHN1YmV4cHJlc3Npb25PZmZzZXQs
IHVpbnQzMl90IHN1YmV4cHJlc3Npb25MaW5lLCB1aW50MzJfdCBzdWJleHByZXNzaW9uTGluZVN0
YXJ0KQorICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdWJleHByZXNzaW9uRGl2b3QsIGludCBzdWJleHByZXNzaW9uT2Zmc2V0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRpdm90IDw9IGRpdm90KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQgPD0gZGl2b3QoKS5v
ZmZzZXQpOwogICAgICAgICAgICAgLy8gT3ZlcmZsb3cgbWVhbnMgd2UgY2FuJ3QgZG8gdGhpcyBz
YWZlbHksIHNvIGp1c3QgcG9pbnQgYXQgdGhlIHByaW1hcnkgZGl2b3QsCiAgICAgICAgICAgICAv
LyBkaXZvdExpbmUsIG9yIGRpdm90TGluZVN0YXJ0LgotICAgICAgICAgICAgaWYgKChkaXZvdCgp
IC0gc3ViZXhwcmVzc2lvbkRpdm90KSAmIH4weEZGRkYpCisgICAgICAgICAgICBpZiAoKGRpdm90
KCkgLSBzdWJleHByZXNzaW9uRGl2b3Qub2Zmc2V0KSAmIH4weEZGRkYpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKChkaXZvdExpbmUoKSAtIHN1YmV4cHJlc3Npb25M
aW5lKSAmIH4weEZGRkYpCisgICAgICAgICAgICBpZiAoKGRpdm90KCkubGluZSAtIHN1YmV4cHJl
c3Npb25EaXZvdC5saW5lKSAmIH4weEZGRkYpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgaWYgKChkaXZvdExpbmVTdGFydCgpIC0gc3ViZXhwcmVzc2lvbkxpbmVTdGFydCkg
JiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChkaXZvdCgpLmxpbmVTdGFydE9mZnNldCAtIHN1
YmV4cHJlc3Npb25EaXZvdC5saW5lU3RhcnRPZmZzZXQpICYgfjB4RkZGRikKICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9IGRp
dm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Q7Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25F
bmRPZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0OwotICAgICAgICAgICAgbV9zdWJleHByZXNz
aW9uTGluZU9mZnNldCA9IGRpdm90TGluZSgpIC0gc3ViZXhwcmVzc2lvbkxpbmU7Ci0gICAgICAg
ICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQgPSBkaXZvdExpbmVTdGFydCgpIC0g
c3ViZXhwcmVzc2lvbkxpbmVTdGFydDsKKyAgICAgICAgICAgIGlmICgoZGl2b3RFbmQoKSAtIHN1
YmV4cHJlc3Npb25PZmZzZXQpICYgfjB4RkZGRikKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9IGRpdm90KCkgLSBzdWJleHBy
ZXNzaW9uRGl2b3Qub2Zmc2V0OworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0
ID0gZGl2b3RFbmQoKSAtIHN1YmV4cHJlc3Npb25PZmZzZXQ7CisgICAgICAgICAgICBtX3N1YmV4
cHJlc3Npb25MaW5lT2Zmc2V0ID0gZGl2b3QoKS5saW5lIC0gc3ViZXhwcmVzc2lvbkRpdm90Lmxp
bmU7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQgPSBkaXZvdCgp
LmxpbmVTdGFydE9mZnNldCAtIHN1YmV4cHJlc3Npb25EaXZvdC5saW5lU3RhcnRPZmZzZXQ7CiAg
ICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uRGl2b3QoKSB7IHJldHVy
biBkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWdu
ZWQgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gZGl2b3RTdGFydE9mZnNldCgp
IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3ViZXhw
cmVzc2lvbkVuZE9mZnNldCgpIHsgcmV0dXJuIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldDsgfQot
ICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uTGluZSgpIHsgcmV0dXJuIGRpdm90TGluZSgp
IC0gbV9zdWJleHByZXNzaW9uTGluZU9mZnNldDsgfQotICAgICAgICB1bnNpZ25lZCBzdWJleHBy
ZXNzaW9uTGluZVN0YXJ0KCkgeyByZXR1cm4gZGl2b3RMaW5lU3RhcnQoKSAtIG1fc3ViZXhwcmVz
c2lvbkxpbmVTdGFydE9mZnNldDsgfQorICAgICAgICBKU1RleHRQb3NpdGlvbiBzdWJleHByZXNz
aW9uRGl2b3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbmV3TGluZSA9IGRpdm90KCku
bGluZSAtIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQ7CisgICAgICAgICAgICBpbnQgbmV3T2Zm
c2V0ID0gZGl2b3QoKS5vZmZzZXQgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldDsKKyAgICAg
ICAgICAgIGludCBuZXdMaW5lU3RhcnRPZmZzZXQgPSBkaXZvdCgpLmxpbmVTdGFydE9mZnNldCAt
IG1fc3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBKU1Rl
eHRQb3NpdGlvbihuZXdMaW5lLCBuZXdPZmZzZXQsIG5ld0xpbmVTdGFydE9mZnNldCk7CisgICAg
ICAgIH0KKyAgICAgICAgSlNUZXh0UG9zaXRpb24gc3ViZXhwcmVzc2lvblN0YXJ0KCkgeyByZXR1
cm4gZGl2b3RTdGFydCgpOyB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN1YmV4cHJlc3Npb25F
bmQoKSB7IHJldHVybiBkaXZvdEVuZCgpIC0gc3RhdGljX2Nhc3Q8aW50PihtX3N1YmV4cHJlc3Np
b25FbmRPZmZzZXQpOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHVpbnQxNl90IG1fc3Vi
ZXhwcmVzc2lvbkRpdm90T2Zmc2V0OwpAQCAtMzU4LDggKzM1Nyw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBUaHJvd2FibGVQcmVmaXhlZFN1YkV4
cHJlc3Npb25EYXRhKHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0
KQotICAgICAgICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgVGhyb3dh
YmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YShjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkK
KyAgICAgICAgICAgIDogVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0LCBlbmQp
CiAgICAgICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0KDApCiAgICAgICAgICAg
ICAsIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KDApCiAgICAgICAgICAgICAsIG1fc3ViZXhw
cmVzc2lvbkxpbmVPZmZzZXQoMCkKQEAgLTM2NywyOCArMzY2LDM0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25J
bmZvKHVpbnQzMl90IHN1YmV4cHJlc3Npb25EaXZvdCwgdWludDE2X3Qgc3ViZXhwcmVzc2lvbk9m
ZnNldCwgdWludDMyX3Qgc3ViZXhwcmVzc2lvbkxpbmUsIHVpbnQzMl90IHN1YmV4cHJlc3Npb25M
aW5lU3RhcnQpCisgICAgICAgIHZvaWQgc2V0U3ViZXhwcmVzc2lvbkluZm8oY29uc3QgSlNUZXh0
UG9zaXRpb24mIHN1YmV4cHJlc3Npb25EaXZvdCwgaW50IHN1YmV4cHJlc3Npb25PZmZzZXQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzdWJleHByZXNzaW9uRGl2b3QgPj0gZGl2b3Qo
KSk7CisgICAgICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRpdm90Lm9mZnNldCA+PSBkaXZv
dCgpLm9mZnNldCk7CiAgICAgICAgICAgICAvLyBPdmVyZmxvdyBtZWFucyB3ZSBjYW4ndCBkbyB0
aGlzIHNhZmVseSwgc28ganVzdCBwb2ludCBhdCB0aGUgcHJpbWFyeSBkaXZvdCwKICAgICAgICAg
ICAgIC8vIGRpdm90TGluZSwgb3IgZGl2b3RMaW5lU3RhcnQuCi0gICAgICAgICAgICBpZiAoKHN1
YmV4cHJlc3Npb25EaXZvdCAtIGRpdm90KCkpICYgfjB4RkZGRikgCisgICAgICAgICAgICBpZiAo
KHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQgLSBkaXZvdCgpKSAmIH4weEZGRkYpIAorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90Lmxp
bmUgLSBkaXZvdCgpLmxpbmUpICYgfjB4RkZGRikKICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBpZiAoKHN1YmV4cHJlc3Npb25MaW5lIC0gZGl2b3RMaW5lKCkpICYgfjB4RkZG
RikKKyAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90LmxpbmVTdGFydE9mZnNldCAt
IGRpdm90KCkubGluZVN0YXJ0T2Zmc2V0KSAmIH4weEZGRkYpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uTGluZVN0YXJ0IC0gZGl2b3RMaW5l
U3RhcnQoKSkgJiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uT2Zmc2V0
IC0gZGl2b3RTdGFydCgpKSAmIH4weEZGRkYpIAogICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkRpdm90
IC0gZGl2b3QoKTsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0ID0gc3Vi
ZXhwcmVzc2lvbk9mZnNldDsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQg
PSBzdWJleHByZXNzaW9uTGluZSAtIGRpdm90TGluZSgpOwotICAgICAgICAgICAgbV9zdWJleHBy
ZXNzaW9uTGluZVN0YXJ0T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkxpbmVTdGFydCAtIGRpdm90TGlu
ZVN0YXJ0KCk7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9IHN1YmV4
cHJlc3Npb25EaXZvdC5vZmZzZXQgLSBkaXZvdCgpOworICAgICAgICAgICAgbV9zdWJleHByZXNz
aW9uU3RhcnRPZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0IC0gZGl2b3RTdGFydCgpOworICAg
ICAgICAgICAgbV9zdWJleHByZXNzaW9uTGluZU9mZnNldCA9IHN1YmV4cHJlc3Npb25EaXZvdC5s
aW5lIC0gZGl2b3QoKS5saW5lOworICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uTGluZVN0YXJ0
T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkRpdm90LmxpbmVTdGFydE9mZnNldCAtIGRpdm90KCkubGlu
ZVN0YXJ0T2Zmc2V0OwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lv
bkRpdm90KCkgeyByZXR1cm4gZGl2b3QoKSArIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0OyB9
Ci0gICAgICAgIHVuc2lnbmVkIHN1YmV4cHJlc3Npb25TdGFydE9mZnNldCgpIHsgcmV0dXJuIG1f
c3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0OyB9Ci0gICAgICAgIHVuc2lnbmVkIHN1YmV4cHJlc3Np
b25FbmRPZmZzZXQoKSB7IHJldHVybiBkaXZvdEVuZE9mZnNldCgpICsgbV9zdWJleHByZXNzaW9u
RGl2b3RPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvbkxpbmUoKSB7IHJl
dHVybiBkaXZvdExpbmUoKSArIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQ7IH0KLSAgICAgICAg
dW5zaWduZWQgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpIHsgcmV0dXJuIGRpdm90TGluZVN0YXJ0
KCkgKyBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7IH0KKyAgICAgICAgSlNUZXh0UG9z
aXRpb24gc3ViZXhwcmVzc2lvbkRpdm90KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IG5l
d0xpbmUgPSBkaXZvdCgpLmxpbmUgKyBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0OworICAgICAg
ICAgICAgaW50IG5ld09mZnNldCA9IGRpdm90KCkub2Zmc2V0ICsgbV9zdWJleHByZXNzaW9uRGl2
b3RPZmZzZXQ7CisgICAgICAgICAgICBpbnQgbmV3TGluZVN0YXJ0T2Zmc2V0ID0gZGl2b3QoKS5s
aW5lU3RhcnRPZmZzZXQgKyBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7CisgICAgICAg
ICAgICByZXR1cm4gSlNUZXh0UG9zaXRpb24obmV3TGluZSwgbmV3T2Zmc2V0LCBuZXdMaW5lU3Rh
cnRPZmZzZXQpOworICAgICAgICB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN1YmV4cHJlc3Np
b25TdGFydCgpIHsgcmV0dXJuIGRpdm90U3RhcnQoKSArIHN0YXRpY19jYXN0PGludD4obV9zdWJl
eHByZXNzaW9uU3RhcnRPZmZzZXQpOyB9CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN1YmV4cHJl
c3Npb25FbmQoKSB7IHJldHVybiBkaXZvdEVuZCgpOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHVpbnQxNl90IG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0OwpAQCAtNDE4LDcgKzQyMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVzb2x2ZU5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgUmVz
b2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBzdGFydCk7CiAKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnQ7IH0KIApAQCAtNDMwLDkgKzQzNSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZXNvbHZlTm9kZSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX2lkZW50
OwotICAgICAgICB1aW50MzJfdCBtX3N0YXJ0T2Zmc2V0OwotICAgICAgICB1aW50MzJfdCBtX2Rp
dm90TGluZTsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdExpbmVTdGFydDsKKyAgICAgICAgSlNU
ZXh0UG9zaXRpb24gbV9zdGFydDsKICAgICB9OwogCiAgICAgY2xhc3MgRWxlbWVudE5vZGUgOiBw
dWJsaWMgUGFyc2VyQXJlbmFGcmVlYWJsZSB7CkBAIC01NzksNyArNTgyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBFdmFsRnVuY3Rpb25DYWxsTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEV2YWxGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEFyZ3Vt
ZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7
CisgICAgICAgIEV2YWxGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEFy
Z3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNTg5LDcgKzU5Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsVmFsdWVOb2RlIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1
YmxpYzoKLSAgICAgICAgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25Ob2RlKiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUs
IHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgRnVuY3Rpb25DYWxsVmFsdWVOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgQXJndW1lbnRzTm9kZSos
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02MDAsNyArNjAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0
IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCk7CkBAIC02MTEsNyArNjE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUsIHB1YmxpYyBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgot
ICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgQXJndW1lbnRz
Tm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAg
ICAgICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEFyZ3VtZW50c05v
ZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjIzLDcgKzYyNiw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsRG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWdu
ZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBGdW5jdGlv
bkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNl
LCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7
CkBAIC02MzYsNyArNjM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDYWxsRnVu
Y3Rpb25DYWxsRG90Tm9kZSA6IHB1YmxpYyBGdW5jdGlvbkNhbGxEb3ROb2RlIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9k
ZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKTsKQEAgLTY0NCw3ICs2NDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAK
ICAgICBjbGFzcyBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUgOiBwdWJsaWMgRnVuY3Rpb25DYWxs
RG90Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50
aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpOworICAgICAgICBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBB
cmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTY1Miw3ICs2NTUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERlbGV0ZVJlc29sdmVOb2RlIDogcHVibGljIEV4
cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgRGVsZXRlUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29u
c3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0
YXJ0KTsKKyAgICAgICAgRGVsZXRlUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7
CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02NjIsNyArNjY1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBEZWxldGVCcmFja2V0Tm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIERlbGV0ZUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIERlbGV0ZUJy
YWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBF
eHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjczLDcg
KzY3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVsZXRlRG90Tm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIERlbGV0ZURvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIERlbGV0ZURvdE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNzI2LDcgKzcyOSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgUHJlZml4Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVi
bGljIFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSos
IE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7
CisgICAgICAgIFByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5v
ZGUqLCBPcGVyYXRvciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNzQwLDcgKzc0Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUG9zdGZpeE5vZGUgOiBwdWJsaWMgUHJlZml4
Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1
bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIFBvc3RmaXhOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCk7CkBAIC05ODMsNyArOTg2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWFk
TW9kaWZ5UmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBSZWFkTW9kaWZ5UmVzb2x2
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9y
LCBFeHByZXNzaW9uTm9kZSogIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNp
Z25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpOworICAgICAgICBSZWFkTW9kaWZ5UmVzb2x2
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIE9wZXJhdG9y
LCBFeHByZXNzaW9uTm9kZSogIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CkBAIC0xMDA3LDcgKzEwMTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwg
cHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IFJlYWRNb2RpZnlCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
Tm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0b3IsIEV4cHJlc3Np
b25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhh
c0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFy
dCk7CisgICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgT3BlcmF0
b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTAyMiw3
ICsxMDI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBc3NpZ25CcmFja2V0Tm9k
ZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRh
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFzc2lnbkJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0
LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdubWVudHMsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpOworICAgICAgICBBc3NpZ25CcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwg
RXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29s
IHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVu
ZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDM2LDcgKzEw
MzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFzc2lnbkRvdE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAg
cHVibGljOgotICAgICAgICBBc3NpZ25Eb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqIHJp
Z2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2ln
bmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgQXNzaWduRG90Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJl
c3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApOwpAQCAtMTA0OSw3ICsxMDUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBSZWFkTW9kaWZ5RG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93
YWJsZVN1YkV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlYWRNb2RpZnlE
b3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25z
dCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCk7CisgICAgICAgIFJlYWRNb2RpZnlEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIEV4cHJl
c3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApOwpAQCAtMTA2Myw3ICsxMDY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBBc3NpZ25FcnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBBc3NpZ25FcnJvck5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2
b3RMaW5lU3RhcnQpOworICAgICAgICBBc3NpZ25FcnJvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEyMzksNyArMTI0Miw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIEZvckluTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJs
aWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAgICAgICAgRm9ySW5O
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5v
ZGUqLCBTdGF0ZW1lbnROb2RlKik7Ci0gICAgICAgIEZvckluTm9kZShWTSosIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Np
b25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIHVuc2lnbmVkIGRpdm90LCBpbnQgc3RhcnRPZmZzZXQs
IGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQpOworICAgICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVu
dE5vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMjkyLDE2ICsxMjk1LDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgV2l0aE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAg
cHVibGljOgotICAgICAgICBXaXRoTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCB1aW50MzJfdCBkaXZvdCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCwgdWludDMyX3QgZXhwcmVzc2lvbkxlbmd0aCk7
CisgICAgICAgIFdpdGhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2Rl
KiwgU3RhdGVtZW50Tm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgdWludDMyX3Qg
ZXhwcmVzc2lvbkxlbmd0aCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKIAogICAg
ICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByOwogICAgICAgICBTdGF0ZW1lbnROb2RlKiBtX3N0
YXRlbWVudDsKLSAgICAgICAgdWludDMyX3QgbV9kaXZvdDsKLSAgICAgICAgdWludDMyX3QgbV9k
aXZvdExpbmU7Ci0gICAgICAgIHVpbnQzMl90IG1fZGl2b3RMaW5lU3RhcnQ7CisgICAgICAgIEpT
VGV4dFBvc2l0aW9uIG1fZGl2b3Q7CiAgICAgICAgIHVpbnQzMl90IG1fZXhwcmVzc2lvbkxlbmd0
aDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
CShyZXZpc2lvbiAxNTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDYgQEAgUGFyc2VyPExleGVyVHlwZT46
OlBhcnNlcihWTSogdm0sIGNvbnN0IAogICAgICwgbV9zdGFjaygqdm0sIHd0ZlRocmVhZERhdGEo
KS5zdGFjaygpKQogICAgICwgbV9oYXNTdGFja092ZXJmbG93KGZhbHNlKQogICAgICwgbV9hbGxv
d3NJbih0cnVlKQotICAgICwgbV9sYXN0TGluZSgwKQotICAgICwgbV9sYXN0VG9rZW5FbmQoMCkK
ICAgICAsIG1fYXNzaWdubWVudENvdW50KDApCiAgICAgLCBtX25vbkxIU0NvdW50KDApCiAgICAg
LCBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQoc291cmNlLnByb3ZpZGVyKCktPmlzVmFsaWQoKSkK
QEAgLTEzMSwyMSArMTI5LDIwIEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5l
cigpCiAgICAgICAgIGZlYXR1cmVzIHw9IFNoYWRvd3NBcmd1bWVudHNGZWF0dXJlOwogCiAgICAg
ZGlkRmluaXNoUGFyc2luZyhzb3VyY2VFbGVtZW50cywgY29udGV4dC52YXJEZWNsYXJhdGlvbnMo
KSwgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCksIGZlYXR1cmVzLAotICAgICAgICAgICAgICAg
ICAgICAgbV9sYXN0TGluZSwgY29udGV4dC5udW1Db25zdGFudHMoKSwgY2FwdHVyZWRWYXJpYWJs
ZXMpOworICAgICAgICBjb250ZXh0Lm51bUNvbnN0YW50cygpLCBjYXB0dXJlZFZhcmlhYmxlcyk7
CiAKICAgICByZXR1cm4gcGFyc2VFcnJvcjsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVy
VHlwZT4KIHZvaWQgUGFyc2VyPExleGVyVHlwZT46OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxl
bWVudHMqIHNvdXJjZUVsZW1lbnRzLCBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6
OlZhclN0YWNrPiogdmFyU3RhY2ssIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFy
c2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiogZnVuY1N0YWNr
LCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBsYXN0TGluZSwgaW50IG51bUNvbnN0YW50cywg
SWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJzKQorICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJh
dGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFjaywgQ29kZUZlYXR1cmVzIGZlYXR1
cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcnMpCiB7CiAg
ICAgbV9zb3VyY2VFbGVtZW50cyA9IHNvdXJjZUVsZW1lbnRzOwogICAgIG1fdmFyRGVjbGFyYXRp
b25zID0gdmFyU3RhY2s7CiAgICAgbV9mdW5jRGVjbGFyYXRpb25zID0gZnVuY1N0YWNrOwogICAg
IG1fY2FwdHVyZWRWYXJpYWJsZXMuc3dhcChjYXB0dXJlZFZhcnMpOwogICAgIG1fZmVhdHVyZXMg
PSBmZWF0dXJlczsKLSAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CiAgICAgbV9udW1Db25zdGFu
dHMgPSBudW1Db25zdGFudHM7CiB9CiAKQEAgLTIwMyw3ICsyMDAsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgaW50IHNjcmF0Y2g7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogc2NyYXRjaDEgPSAwOwogICAgIFRyZWVFeHByZXNzaW9uIHNjcmF0Y2gyID0g
MDsKLSAgICBpbnQgc2NyYXRjaDMgPSAwOworICAgIEpTVGV4dFBvc2l0aW9uIHNjcmF0Y2gzOwog
ICAgIFRyZWVFeHByZXNzaW9uIHZhckRlY2xzID0gcGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoY29u
dGV4dCwgc2NyYXRjaCwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBzY3JhdGNoMywgc2NyYXRjaDMsIHNj
cmF0Y2gzKTsKICAgICBmYWlsSWZUcnVlKGhhc0Vycm9yKCkpOwogICAgIGZhaWxJZkZhbHNlKGF1
dG9TZW1pQ29sb24oKSk7CkBAIC0yNjksNyArMjY2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgot
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGludCYg
ZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lv
biYgbGFzdEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3RhcnQsIGludCYgaW5pdFN0YXJ0LCBpbnQm
IGluaXRFbmQpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYgY29u
dGV4dCwgaW50JiBkZWNsYXJhdGlvbnMsIGNvbnN0IElkZW50aWZpZXIqJiBsYXN0SWRlbnQsIFRy
ZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0
LCBKU1RleHRQb3NpdGlvbiYgaW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCkKIHsK
ICAgICBUcmVlRXhwcmVzc2lvbiB2YXJEZWNscyA9IDA7CiAgICAgZG8gewpAQCAtMjc4LDcgKzI3
NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAg
bmV4dCgpOwogICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAgICAgIAotICAgICAgICBp
bnQgdmFyU3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHZhclN0
YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGlkZW50U3RhcnQgPSB2YXJTdGFy
dDsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50
OwogICAgICAgICBsYXN0SWRlbnQgPSBuYW1lOwpAQCAtMjg3LDE3ICsyODQsMTUgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBmYWlsSWZGYWxzZUlm
U3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGRlY2xhcmVWYXJpYWJsZShuYW1lKSwgIkNhbm5vdCBk
ZWNsYXJlIGEgdmFyaWFibGUgbmFtZWQiLCBuYW1lLT5pbXBsKCksICJpbiBzdHJpY3QgbW9kZS4i
KTsKICAgICAgICAgY29udGV4dC5hZGRWYXIobmFtZSwgKGhhc0luaXRpYWxpemVyIHx8ICghbV9h
bGxvd3NJbiAmJiBtYXRjaChJTlRPS0VOKSkpID8gRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRp
YWxpemVyIDogMCk7CiAgICAgICAgIGlmIChoYXNJbml0aWFsaXplcikgewotICAgICAgICAgICAg
aW50IHZhckRpdm90ID0gdG9rZW5TdGFydCgpICsgMTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHZh
ckxpbmUgPSB0b2tlbkxpbmUoKTsgCi0gICAgICAgICAgICB1bnNpZ25lZCB2YXJMaW5lU3RhcnQg
PSB0b2tlbkxpbmVTdGFydCgpOwotICAgICAgICAgICAgaW5pdFN0YXJ0ID0gdG9rZW5TdGFydCgp
OworICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gdmFyRGl2b3QgPSB0b2tlblN0YXJ0UG9zaXRp
b24oKSArIDE7CisgICAgICAgICAgICBpbml0U3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsK
ICAgICAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOyAvLyBjb25z
dW1lICc9JwogICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSBwYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAgICAgaW5pdEVuZCA9IGxhc3RU
b2tlbkVuZCgpOworICAgICAgICAgICAgaW5pdEVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7
CiAgICAgICAgICAgICBsYXN0SW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcjsKICAgICAgICAgICAg
IGZhaWxJZkZhbHNlKGluaXRpYWxpemVyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVHJl
ZUV4cHJlc3Npb24gbm9kZSA9IGNvbnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwg
Km5hbWUsIGluaXRpYWxpemVyLCB2YXJTdGFydCwgdmFyRGl2b3QsIGxhc3RUb2tlbkVuZCgpLCB2
YXJMaW5lLCB2YXJMaW5lU3RhcnQpOworICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9
IGNvbnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgKm5hbWUsIGluaXRpYWxpemVy
LCB2YXJTdGFydCwgdmFyRGl2b3QsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAg
ICAgaWYgKCF2YXJEZWNscykKICAgICAgICAgICAgICAgICB2YXJEZWNscyA9IG5vZGU7CiAgICAg
ICAgICAgICBlbHNlCkBAIC0zNDUsMTAgKzM0MCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWUKICAgICBjb25zdW1lT3JGYWlsKE9QRU5QQVJFTik7CiAgICAgaW50
IG5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKICAgICBpbnQgZGVjbGFyYXRpb25zID0gMDsK
LSAgICBpbnQgZGVjbHNTdGFydCA9IDA7Ci0gICAgaW50IGRlY2xzRW5kID0gMDsKLSAgICB1bnNp
Z25lZCBkZWNsc0xpbmUgPSAwOwotICAgIHVuc2lnbmVkIGRlY2xzTGluZVN0YXJ0ID0gMDsKKyAg
ICBKU1RleHRQb3NpdGlvbiBkZWNsc1N0YXJ0OworICAgIEpTVGV4dFBvc2l0aW9uIGRlY2xzRW5k
OwogICAgIFRyZWVFeHByZXNzaW9uIGRlY2xzID0gMDsKICAgICBpZiAobWF0Y2goVkFSKSkgewog
ICAgICAgICAvKgpAQCAtMzU5LDggKzM1Miw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWUKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogZm9ySW5UYXJnZXQgPSAw
OwogICAgICAgICBUcmVlRXhwcmVzc2lvbiBmb3JJbkluaXRpYWxpemVyID0gMDsKICAgICAgICAg
bV9hbGxvd3NJbiA9IGZhbHNlOwotICAgICAgICBpbnQgaW5pdFN0YXJ0ID0gMDsKLSAgICAgICAg
aW50IGluaXRFbmQgPSAwOworICAgICAgICBKU1RleHRQb3NpdGlvbiBpbml0U3RhcnQ7CisgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIGluaXRFbmQ7CiAgICAgICAgIGRlY2xzID0gcGFyc2VWYXJEZWNs
YXJhdGlvbkxpc3QoY29udGV4dCwgZGVjbGFyYXRpb25zLCBmb3JJblRhcmdldCwgZm9ySW5Jbml0
aWFsaXplciwgZGVjbHNTdGFydCwgaW5pdFN0YXJ0LCBpbml0RW5kKTsKICAgICAgICAgbV9hbGxv
d3NJbiA9IHRydWU7CiAgICAgICAgIGZhaWxJZlRydWUoaGFzRXJyb3IoKSk7CkBAIC0zNzIsMTQg
KzM2NSwxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAg
ICAgIGZhaWxJZkZhbHNlKGRlY2xhcmF0aW9ucyA9PSAxKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEhhbmRsZSBmb3ItaW4gd2l0aCB2YXIgZGVjbGFyYXRpb24KLSAgICAgICAgaW50IGluTG9jYXRp
b24gPSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGluTGluZSA9IHRva2VuTGluZSgp
OwotICAgICAgICB1bnNpZ25lZCBpbkxpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIGluTG9jYXRpb24gPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAg
ICAgICAgY29uc3VtZU9yRmFpbChJTlRPS0VOKTsKICAgICAgICAgCiAgICAgICAgIFRyZWVFeHBy
ZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgIGZhaWxJZkZh
bHNlKGV4cHIpOwotICAgICAgICBpbnQgZXhwckVuZCA9IGxhc3RUb2tlbkVuZCgpOworICAgICAg
ICBKU1RleHRQb3NpdGlvbiBleHByRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAg
ICAgCiAgICAgICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CiAgICAgICAgIGNvbnN1bWVP
ckZhaWwoQ0xPU0VQQVJFTik7CkBAIC0zOTAsMTYgKzM4MSwxNCBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIGVuZExvb3AoKTsKICAgICAgICAgZmFp
bElmRmFsc2Uoc3RhdGVtZW50KTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUZvckluTG9vcChsb2NhdGlvbiwgZm9ySW5UYXJnZXQsIGZvckluSW5pdGlhbGl6ZXIsIGV4
cHIsIHN0YXRlbWVudCwgZGVjbHNTdGFydCwgaW5Mb2NhdGlvbiwgZXhwckVuZCwgaW5pdFN0YXJ0
LCBpbml0RW5kLCBzdGFydExpbmUsIGVuZExpbmUsIGluTGluZSwgaW5MaW5lU3RhcnQpOworICAg
ICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGb3JJbkxvb3AobG9jYXRpb24sIGZvckluVGFyZ2V0
LCBmb3JJbkluaXRpYWxpemVyLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQsIGluTG9jYXRp
b24sIGV4cHJFbmQsIGluaXRTdGFydCwgaW5pdEVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAg
ICB9CiAgICAgCiAgICAgaWYgKCFtYXRjaChTRU1JQ09MT04pKSB7CiAgICAgICAgIG1fYWxsb3dz
SW4gPSBmYWxzZTsKLSAgICAgICAgZGVjbHNTdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICAgICAg
ZGVjbHNTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBkZWNscyA9IHBhcnNl
RXhwcmVzc2lvbihjb250ZXh0KTsKLSAgICAgICAgZGVjbHNFbmQgPSBsYXN0VG9rZW5FbmQoKTsK
LSAgICAgICAgZGVjbHNMaW5lID0gbGFzdFRva2VuTGluZSgpOwotICAgICAgICBkZWNsc0xpbmVT
dGFydCA9IGxhc3RUb2tlbkxpbmVTdGFydCgpOworICAgICAgICBkZWNsc0VuZCA9IGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCk7CiAgICAgICAgIG1fYWxsb3dzSW4gPSB0cnVlOwogICAgICAgICBmYWls
SWZGYWxzZShkZWNscyk7CiAgICAgfQpAQCAtNDM2LDcgKzQyNSw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBjb25zdW1lT3JGYWlsKElOVE9LRU4pOwog
ICAgIFRyZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAg
ZmFpbElmRmFsc2UoZXhwcik7Ci0gICAgaW50IGV4cHJFbmQgPSBsYXN0VG9rZW5FbmQoKTsKKyAg
ICBKU1RleHRQb3NpdGlvbiBleHByRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICBp
bnQgZW5kTGluZSA9IHRva2VuTGluZSgpOwogICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7
CiAgICAgY29uc3QgSWRlbnRpZmllciogdW51c2VkID0gMDsKQEAgLTQ0NSw3ICs0MzQsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgZW5kTG9vcCgpOwog
ICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7CiAgICAgCi0gICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBkZWNscywgZXhwciwgc3RhdGVtZW50LCBkZWNsc1N0YXJ0
LCBkZWNsc0VuZCwgZXhwckVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBkZWNsc0xpbmUsIGRlY2xz
TGluZVN0YXJ0KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGb3JJbkxvb3AobG9jYXRpb24s
IGRlY2xzLCBleHByLCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQsIGRlY2xzRW5kLCBleHByRW5kLCBz
dGFydExpbmUsIGVuZExpbmUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpA
QCAtNDUzLDI2ICs0NDIsMjEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZQogewogICAgIEFTU0VSVChtYXRjaChCUkVBSykpOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBs
b2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwotICAgIGludCBzdGFydENvbCA9IHRva2VuU3RhcnQo
KTsKLSAgICBpbnQgZW5kQ29sID0gdG9rZW5FbmQoKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9r
ZW5MaW5lKCk7Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICB1bnNpZ25lZCBl
bmRMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0
ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CisgICAgSlNUZXh0UG9zaXRpb24gZW5kID0gdG9rZW5F
bmRQb3NpdGlvbigpOwogICAgIG5leHQoKTsKICAgICAKICAgICBpZiAoYXV0b1NlbWlDb2xvbigp
KSB7CiAgICAgICAgIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoYnJlYWtJc1ZhbGlkKCksICInYnJl
YWsnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgc3dpdGNoIG9yIGxvb3Agc3RhdGVtZW50Iik7Ci0g
ICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxvY2F0aW9uLCBzdGFy
dENvbCwgZW5kQ29sLCBzdGFydExpbmUsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7CisgICAgICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxvY2F0aW9uLCBzdGFydCwgZW5k
KTsKICAgICB9CiAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgZmFpbElmRmFsc2VXaXRoTmFtZUFu
ZE1lc3NhZ2UoZ2V0TGFiZWwoaWRlbnQpLCAiTGFiZWwiLCBpZGVudC0+aW1wbCgpLCAiaXMgbm90
IGRlZmluZWQiKTsKLSAgICBlbmRDb2wgPSB0b2tlbkVuZCgpOwotICAgIGVuZExpbmUgPSB0b2tl
bkxpbmUoKTsKLSAgICBlbmRMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgIGVuZCA9
IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBuZXh0KCk7CiAgICAgZmFpbElmRmFsc2UoYXV0b1Nl
bWlDb2xvbigpKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVha1N0YXRlbWVudChsb2Nh
dGlvbiwgaWRlbnQsIHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwgZW5kTGluZSwgZW5kTGlu
ZVN0YXJ0KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVha1N0YXRlbWVudChsb2NhdGlv
biwgaWRlbnQsIHN0YXJ0LCBlbmQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBl
PgpAQCAtNDgwLDI4ICs0NjQsMjMgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZQogewogICAgIEFTU0VSVChtYXRjaChDT05USU5VRSkpOwogICAgIEpTVG9rZW5Mb2Nh
dGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwotICAgIGludCBzdGFydENvbCA9IHRva2Vu
U3RhcnQoKTsKLSAgICBpbnQgZW5kQ29sID0gdG9rZW5FbmQoKTsKLSAgICBpbnQgc3RhcnRMaW5l
ID0gdG9rZW5MaW5lKCk7Ci0gICAgaW50IGVuZExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICB1bnNp
Z25lZCBlbmRMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgIEpTVGV4dFBvc2l0aW9u
IHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CisgICAgSlNUZXh0UG9zaXRpb24gZW5kID0g
dG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQoKTsKICAgICAKICAgICBpZiAoYXV0b1NlbWlD
b2xvbigpKSB7CiAgICAgICAgIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoY29udGludWVJc1ZhbGlk
KCksICInY29udGludWUnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBzdGF0ZW1lbnQiKTsK
LSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobG9jYXRpb24s
IHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwgZW5kTGluZSwgZW5kTGluZVN0YXJ0KTsKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobG9jYXRpb24sIHN0
YXJ0LCBlbmQpOwogICAgIH0KICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICBTY29wZUxhYmVsSW5m
byogbGFiZWwgPSBnZXRMYWJlbChpZGVudCk7CiAgICAgZmFpbElmRmFsc2VXaXRoTmFtZUFuZE1l
c3NhZ2UobGFiZWwsICJMYWJlbCIsIGlkZW50LT5pbXBsKCksICJpcyBub3QgZGVmaW5lZCIpOwog
ICAgIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UobGFiZWwtPm1faXNMb29wLCAiJ2NvbnRpbnVlJyBp
cyBvbmx5IHZhbGlkIGluc2lkZSBhIGxvb3Agc3RhdGVtZW50Iik7Ci0gICAgZW5kQ29sID0gdG9r
ZW5FbmQoKTsKLSAgICBlbmRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgZW5kTGluZVN0YXJ0ID0g
dG9rZW5MaW5lU3RhcnQoKTsKKyAgICBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4
dCgpOwogICAgIGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobG9jYXRpb24sIGlkZW50LCBzdGFydENvbCwgZW5k
Q29sLCBzdGFydExpbmUsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7CisgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobG9jYXRpb24sIGlkZW50LCBzdGFydCwgZW5kKTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTUxMCwyOSArNDg5LDI0IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBBU1NFUlQobWF0
Y2goUkVUVVJOKSk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24o
KSk7CiAgICAgZmFpbElmRmFsc2UoY3VycmVudFNjb3BlKCktPmlzRnVuY3Rpb24oKSk7Ci0gICAg
aW50IHN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGludCBlbmRMaW5lID0gc3RhcnRMaW5l
OwotICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgZW5kID0gdG9rZW5FbmQo
KTsKLSAgICB1bnNpZ25lZCBkaXZvdExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICB1bnNpZ25lZCBk
aXZvdExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgSlNUZXh0UG9zaXRpb24gc3Rh
cnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICBKU1RleHRQb3NpdGlvbiBlbmQgPSB0b2tl
bkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwogICAgIC8vIFdlIGRvIHRoZSBhdXRvIHNlbWlj
b2xvbiBjaGVjayBiZWZvcmUgYXR0ZW1wdGluZyB0byBwYXJzZSBhbiBleHByZXNzaW9uCiAgICAg
Ly8gYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGEgbGluZSBicmVhayBhZnRlciB0aGUgcmV0dXJu
IGNvcnJlY3RseSB0ZXJtaW5hdGVzCiAgICAgLy8gdGhlIHN0YXRlbWVudAogICAgIGlmIChtYXRj
aChTRU1JQ09MT04pKQotICAgICAgICBlbmRMaW5lICA9IHRva2VuTGluZSgpOworICAgICAgICBl
bmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CisKICAgICBpZiAoYXV0b1NlbWlDb2xvbigpKQotICAg
ICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQobG9jYXRpb24sIDAsIHN0
YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7
CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJldHVyblN0YXRlbWVudChsb2NhdGlvbiwg
MCwgc3RhcnQsIGVuZCk7CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lv
bihjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBlbmQgPSBsYXN0VG9rZW5F
bmQoKTsKLSAgICBkaXZvdExpbmUgPSBsYXN0VG9rZW5MaW5lKCk7Ci0gICAgZGl2b3RMaW5lU3Rh
cnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKKyAgICBlbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpOwogICAgIGlmIChtYXRjaChTRU1JQ09MT04pKQotICAgICAgICBlbmRMaW5lICA9IHRva2Vu
TGluZSgpOworICAgICAgICBlbmQgID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIGZhaWxJZkZh
bHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmV0dXJuU3Rh
dGVtZW50KGxvY2F0aW9uLCBleHByLCBzdGFydCwgZW5kLCBzdGFydExpbmUsIGVuZExpbmUsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJldHVy
blN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgc3RhcnQsIGVuZCk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+CkBAIC01NDAsMjEgKzUxNCwxNyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB7CiAgICAgQVNTRVJUKG1hdGNoKFRIUk9XKSk7CiAg
ICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7Ci0gICAgaW50IGVT
dGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Cisg
ICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICBuZXh0
KCk7CiAgICAgCiAgICAgZmFpbElmVHJ1ZShhdXRvU2VtaUNvbG9uKCkpOwogICAgIAogICAgIFRy
ZWVFeHByZXNzaW9uIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgZmFpbElm
RmFsc2UoZXhwcik7Ci0gICAgaW50IGVFbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICB1bnNpZ25l
ZCBkaXZvdExpbmUgPSBsYXN0VG9rZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lU3Rh
cnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKLSAgICBpbnQgZW5kTGluZSA9IHRva2VuTGluZSgp
OworICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAg
ZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKICAgICAKLSAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVUaHJvd1N0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgZVN0YXJ0LCBlRW5kLCBzdGFydExp
bmUsIGVuZExpbmUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZVRocm93U3RhdGVtZW50KGxvY2F0aW9uLCBleHByLCBzdGFydCwgZW5kKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTU3MCwxNiArNTQwLDE0IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBpbnQgc3RhcnQgPSB0
b2tlblN0YXJ0KCk7CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihj
b250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBpbnQgZW5kID0gbGFzdFRva2Vu
RW5kKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lID0gbGFzdFRva2VuTGluZSgpOwotICAgIHVu
c2lnbmVkIGRpdm90TGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7CisgICAgSlNUZXh0
UG9zaXRpb24gZW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICBpbnQgZW5kTGluZSA9
IHRva2VuTGluZSgpOwogICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTik7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogdW51c2VkID0gMDsKICAgICBUcmVlU3RhdGVtZW50IHN0YXRlbWVudCA9IHBh
cnNlU3RhdGVtZW50KGNvbnRleHQsIHVudXNlZCk7CiAgICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50
KTsKICAgICAKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVXaXRoU3RhdGVtZW50KGxvY2F0aW9u
LCBleHByLCBzdGF0ZW1lbnQsIHN0YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgZGl2b3RM
aW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlV2l0aFN0YXRl
bWVudChsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBzdGFydCwgZW5kLCBzdGFydExpbmUsIGVu
ZExpbmUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAtNjY2LDcgKzYz
NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAKICAg
ICB0cnlCbG9jayA9IHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7CiAgICAgZmFpbElmRmFs
c2UodHJ5QmxvY2spOwotICAgIGludCBsYXN0TGluZSA9IG1fbGFzdExpbmU7CisgICAgaW50IGxh
c3RMaW5lID0gbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lOwogICAgIAogICAgIGlmIChtYXRj
aChDQVRDSCkpIHsKICAgICAgICAgY3VycmVudFNjb3BlKCktPnNldE5lZWRzRnVsbEFjdGl2YXRp
b24oKTsKQEAgLTcxOCwxMyArNjg2LDEzIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWUKICAgICBuZXh0KCk7CiAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CiAg
ICAgICAgIG5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQmxvY2tTdGF0ZW1l
bnQobG9jYXRpb24sIDAsIHN0YXJ0LCBtX2xhc3RMaW5lKTsKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlQmxvY2tTdGF0ZW1lbnQobG9jYXRpb24sIDAsIHN0YXJ0LCBtX2xhc3RUb2tlbkVu
ZFBvc2l0aW9uLmxpbmUpOwogICAgIH0KICAgICBUcmVlU291cmNlRWxlbWVudHMgc3VidHJlZSA9
IHBhcnNlU291cmNlRWxlbWVudHM8RG9udENoZWNrRm9yU3RyaWN0TW9kZT4oY29udGV4dCk7CiAg
ICAgZmFpbElmRmFsc2Uoc3VidHJlZSk7CiAgICAgbWF0Y2hPckZhaWwoQ0xPU0VCUkFDRSk7CiAg
ICAgbmV4dCgpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxvY2F0
aW9uLCBzdWJ0cmVlLCBzdGFydCwgbV9sYXN0TGluZSk7CisgICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlQmxvY2tTdGF0ZW1lbnQobG9jYXRpb24sIHN1YnRyZWUsIHN0YXJ0LCBtX2xhc3RUb2tlbkVu
ZFBvc2l0aW9uLmxpbmUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAt
OTM3LDI0ICs5MDUsMjAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZQogICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5lZWRzTmFtZSwg
dHJ1ZT4oY29udGV4dCwgbmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBj
bG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pKSk7CiAgICAg
ZmFpbElmRmFsc2UobmFtZSk7CiAgICAgZmFpbElmRmFsc2VJZlN0cmljdChkZWNsYXJlVmFyaWFi
bGUobmFtZSkpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGxv
Y2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJh
Y2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUsIGJvZHlTdGFydENvbHVtbik7Cisg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9jYXRpb24sIG5hbWUs
IGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9k
eVN0YXJ0TGluZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBib2R5U3RhcnRDb2x1bW4p
OwogfQogCiBzdHJ1Y3QgTGFiZWxJbmZvIHsKLSAgICBMYWJlbEluZm8oY29uc3QgSWRlbnRpZmll
ciogaWRlbnQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVkIGRpdm90TGlu
ZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgTGFiZWxJbmZvKGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBlbmQpCiAgICAgOiBtX2lkZW50KGlkZW50KQogICAgICwgbV9zdGFydChzdGFydCkKICAg
ICAsIG1fZW5kKGVuZCkKLSAgICAsIG1fZGl2b3RMaW5lKGRpdm90TGluZSkKLSAgICAsIG1fZGl2
b3RMaW5lU3RhcnQoZGl2b3RMaW5lU3RhcnQpCiAgICAgewogICAgIH0KICAgICAKICAgICBjb25z
dCBJZGVudGlmaWVyKiBtX2lkZW50OwotICAgIHVuc2lnbmVkIG1fc3RhcnQ7Ci0gICAgdW5zaWdu
ZWQgbV9lbmQ7Ci0gICAgdW5zaWduZWQgbV9kaXZvdExpbmU7Ci0gICAgdW5zaWduZWQgbV9kaXZv
dExpbmVTdGFydDsKKyAgICBKU1RleHRQb3NpdGlvbiBtX3N0YXJ0OworICAgIEpTVGV4dFBvc2l0
aW9uIG1fZW5kOwogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTk2Nyw4
ICs5MzEsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAg
VmVjdG9yPExhYmVsSW5mbz4gbGFiZWxzOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbjsK
ICAgICBkbyB7Ci0gICAgICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAgICAgICAgaW50
IHN0YXJ0aW5nTGluZSA9IHRva2VuTGluZSgpOworICAgICAgICBKU1RleHRQb3NpdGlvbiBzdGFy
dCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRp
b24oKTsKICAgICAgICAgaWYgKCFuZXh0VG9rZW5Jc0NvbG9uKCkpIHsKICAgICAgICAgICAgIC8v
IElmIHdlIGhpdCB0aGlzIHBhdGggd2UncmUgbWFraW5nIGEgZXhwcmVzc2lvbiBzdGF0ZW1lbnQs
IHdoaWNoCkBAIC05NzcsMTIgKzk0MCwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFy
c2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UoZXhwcmVzc2lv
bik7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVudChsb2NhdGlvbiwgZXhwcmVzc2lv
biwgc3RhcnRpbmdMaW5lLCBtX2xhc3RMaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUV4cHJTdGF0ZW1lbnQobG9jYXRpb24sIGV4cHJlc3Npb24sIHN0YXJ0LCBtX2xhc3RU
b2tlbkVuZFBvc2l0aW9uLmxpbmUpOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgIGludCBlbmQgPSB0b2tl
bkVuZCgpOwotICAgICAgICB1bnNpZ25lZCBkaXZvdExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICAg
ICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgICAgICBK
U1RleHRQb3NpdGlvbiBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgIG5leHQoKTsK
ICAgICAgICAgY29uc3VtZU9yRmFpbChDT0xPTik7CiAgICAgICAgIGlmICghbV9zeW50YXhBbHJl
YWR5VmFsaWRhdGVkKSB7CkBAIC05OTEsNyArOTUyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
YWJlbHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShpZGVudC0+aW1w
bCgpID09IGxhYmVsc1tpXS5tX2lkZW50LT5pbXBsKCkpOwogICAgICAgICAgICAgZmFpbElmVHJ1
ZShnZXRMYWJlbChpZGVudCkpOwotICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChMYWJlbEluZm8o
aWRlbnQsIHN0YXJ0LCBlbmQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpKTsKKyAgICAgICAg
ICAgIGxhYmVscy5hcHBlbmQoTGFiZWxJbmZvKGlkZW50LCBzdGFydCwgZW5kKSk7CiAgICAgICAg
IH0KICAgICB9IHdoaWxlIChtYXRjaChJREVOVCkpOwogICAgIGJvb2wgaXNMb29wID0gZmFsc2U7
CkBAIC0xMDE4LDcgKzk3OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWUKICAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGFiZWxzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IExhYmVsSW5mbyYgaW5m
byA9IGxhYmVsc1tsYWJlbHMuc2l6ZSgpIC0gaSAtIDFdOwotICAgICAgICBzdGF0ZW1lbnQgPSBj
b250ZXh0LmNyZWF0ZUxhYmVsU3RhdGVtZW50KGxvY2F0aW9uLCBpbmZvLm1faWRlbnQsIHN0YXRl
bWVudCwgaW5mby5tX3N0YXJ0LCBpbmZvLm1fZW5kLCBpbmZvLm1fZGl2b3RMaW5lLCBpbmZvLm1f
ZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmNyZWF0ZUxhYmVs
U3RhdGVtZW50KGxvY2F0aW9uLCBpbmZvLm1faWRlbnQsIHN0YXRlbWVudCwgaW5mby5tX3N0YXJ0
LCBpbmZvLm1fZW5kKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXRlbWVudDsKIH0KQEAgLTEwMjYs
MTIgKzk4NywxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUV4cHJlc3Npb25TdGF0ZW1l
bnQoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7Ci0gICAgaW50IHN0YXJ0TGluZSA9IHRva2VuTGlu
ZSgpOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAg
ICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgVHJlZUV4
cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKICAgICBmYWls
SWZGYWxzZShleHByZXNzaW9uKTsKICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwot
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUV4cHJTdGF0ZW1lbnQobG9jYXRpb24sIGV4cHJlc3Np
b24sIHN0YXJ0TGluZSwgbV9sYXN0TGluZSk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhw
clN0YXRlbWVudChsb2NhdGlvbiwgZXhwcmVzc2lvbiwgc3RhcnQsIG1fbGFzdFRva2VuRW5kUG9z
aXRpb24ubGluZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC0xMTQ3
LDkgKzExMDgsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPHR5
cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBmYWls
SWZTdGFja092ZXJmbG93KCk7Ci0gICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgIHVu
c2lnbmVkIGxpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICB1bnNpZ25lZCBsaW5lU3RhcnQgPSB0b2tl
bkxpbmVTdGFydCgpOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0
aW9uKCk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAg
ICAgaW50IGluaXRpYWxBc3NpZ25tZW50Q291bnQgPSBtX2Fzc2lnbm1lbnRDb3VudDsKICAgICBp
bnQgaW5pdGlhbE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKQEAgLTExODAsMTAgKzExMzks
OCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByCiAgICAgICAgIH0K
ICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50Kys7CiAgICAgICAgIGhhZEFzc2ln
bm1lbnQgPSB0cnVlOwotICAgICAgICBjb250ZXh0LmFzc2lnbm1lbnRTdGFja0FwcGVuZChhc3Np
Z25tZW50U3RhY2ssIGxocywgc3RhcnQsIHRva2VuU3RhcnQoKSwgbGluZSwgbGluZVN0YXJ0LCBt
X2Fzc2lnbm1lbnRDb3VudCwgb3ApOwotICAgICAgICBzdGFydCA9IHRva2VuU3RhcnQoKTsKLSAg
ICAgICAgbGluZSA9IHRva2VuTGluZSgpOwotICAgICAgICBsaW5lU3RhcnQgPSB0b2tlbkxpbmVT
dGFydCgpOworICAgICAgICBjb250ZXh0LmFzc2lnbm1lbnRTdGFja0FwcGVuZChhc3NpZ25tZW50
U3RhY2ssIGxocywgc3RhcnQsIHRva2VuU3RhcnRQb3NpdGlvbigpLCBtX2Fzc2lnbm1lbnRDb3Vu
dCwgb3ApOworICAgICAgICBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBt
X2Fzc2lnbm1lbnRDb3VudCsrOwogICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRT
dHJpbmdzKTsKICAgICAgICAgaWYgKHN0cmljdE1vZGUoKSAmJiBtX2xhc3RJZGVudGlmaWVyICYm
IGNvbnRleHQuaXNSZXNvbHZlKGxocykpIHsKQEAgLTEyMDUsNyArMTE2Miw3IEBAIGVuZDoKICAg
ICAgICAgcmV0dXJuIGxoczsKICAgICAKICAgICB3aGlsZSAoYXNzaWdubWVudFN0YWNrKQotICAg
ICAgICBsaHMgPSBjb250ZXh0LmNyZWF0ZUFzc2lnbm1lbnQobG9jYXRpb24sIGFzc2lnbm1lbnRT
dGFjaywgbGhzLCBpbml0aWFsQXNzaWdubWVudENvdW50LCBtX2Fzc2lnbm1lbnRDb3VudCwgbGFz
dFRva2VuRW5kKCkpOworICAgICAgICBsaHMgPSBjb250ZXh0LmNyZWF0ZUFzc2lnbm1lbnQobG9j
YXRpb24sIGFzc2lnbm1lbnRTdGFjaywgbGhzLCBpbml0aWFsQXNzaWdubWVudENvdW50LCBtX2Fz
c2lnbm1lbnRDb3VudCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgCiAgICAgcmV0dXJu
IGxoczsKIH0KQEAgLTEyNTEsMTIgKzEyMDgsMTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzcwogICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpCaW5hcnlFeHByQ29u
dGV4dCBiaW5hcnlFeHByQ29udGV4dChjb250ZXh0KTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9j
YXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpbnQg
ZXhwclN0YXJ0ID0gdG9rZW5TdGFydCgpOworICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByU3Rh
cnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50
cyA9IG1fYXNzaWdubWVudENvdW50OwogICAgICAgICBUcmVlRXhwcmVzc2lvbiBjdXJyZW50ID0g
cGFyc2VVbmFyeUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKGN1cnJl
bnQpOwogICAgICAgICAKLSAgICAgICAgY29udGV4dC5hcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5m
byhvcGVyYW5kU3RhY2tEZXB0aCwgY3VycmVudCwgZXhwclN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwg
bGFzdFRva2VuRW5kKCksIGxhc3RUb2tlbkxpbmUoKSwgbGFzdFRva2VuTGluZVN0YXJ0KCksIGlu
aXRpYWxBc3NpZ25tZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCk7CisgICAgICAgIGNvbnRleHQu
YXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8ob3BlcmFuZFN0YWNrRGVwdGgsIGN1cnJlbnQsIGV4
cHJTdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwg
aW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50KTsKICAgICAgICAgaW50IHBy
ZWNlZGVuY2UgPSBpc0JpbmFyeU9wZXJhdG9yKG1fdG9rZW4ubV90eXBlKTsKICAgICAgICAgaWYg
KCFwcmVjZWRlbmNlKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzM2LDggKzEyOTMsOCBAQCB0
ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1aWxkCiAgICAgICAgIG5leHQoKTsK
ICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvPEZ1bmN0aW9uTm9SZXF1aXJl
bWVudHMsIGZhbHNlPihjb250ZXh0LCBhY2Nlc3Nvck5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9w
ZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgYm9keVN0YXJ0
Q29sdW1uKSkpOwogICAgICAgICBpZiAoc3RyaW5nUHJvcGVydHlOYW1lKQotICAgICAgICAgICAg
cmV0dXJuIGNvbnRleHQudGVtcGxhdGUgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eTxjb21w
bGV0ZT4obG9jYXRpb24sIHR5cGUsIHN0cmluZ1Byb3BlcnR5TmFtZSwgcGFyYW1ldGVycywgYm9k
eSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xh
c3RMaW5lLCBib2R5U3RhcnRDb2x1bW4pOwotICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0
ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PFZNKj4o
bV92bSksIGxvY2F0aW9uLCB0eXBlLCBudW1lcmljUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBi
b2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1f
bGFzdExpbmUsIGJvZHlTdGFydENvbHVtbik7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC50
ZW1wbGF0ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihsb2NhdGlvbiwg
dHlwZSwgc3RyaW5nUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VPZmZz
ZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5kUG9zaXRp
b24ubGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxh
dGUgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eTxjb21wbGV0ZT4oY29uc3RfY2FzdDxWTSo+
KG1fdm0pLCBsb2NhdGlvbiwgdHlwZSwgbnVtZXJpY1Byb3BlcnR5TmFtZSwgcGFyYW1ldGVycywg
Ym9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBt
X2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIGJvZHlTdGFydENvbHVtbik7CiAgICAgfQogICAg
IGNhc2UgTlVNQkVSOiB7CiAgICAgICAgIGRvdWJsZSBwcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1f
ZGF0YS5kb3VibGVWYWx1ZTsKQEAgLTE1MzUsMTUgKzE0OTIsMTMgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICByZXR1cm4gY29udGV4dC50aGlzRXhw
cihsb2NhdGlvbik7CiAgICAgfQogICAgIGNhc2UgSURFTlQ6IHsKLSAgICAgICAgaW50IHN0YXJ0
ID0gdG9rZW5TdGFydCgpOwotICAgICAgICBpbnQgbGluZSA9IHRva2VuTGluZSgpOwotICAgICAg
ICBpbnQgbGluZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgSlNUZXh0UG9zaXRp
b24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICAgICAgSlNUb2tlbkxvY2F0aW9u
IGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgY3Vy
cmVudFNjb3BlKCktPnVzZVZhcmlhYmxlKGlkZW50LCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFs
ID09ICppZGVudCk7CiAgICAgICAgIG1fbGFzdElkZW50aWZpZXIgPSBpZGVudDsKLSAgICAgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlUmVzb2x2ZShsb2NhdGlvbiwgaWRlbnQsIHN0YXJ0LCBsaW5l
LCBsaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVSZXNvbHZlKGxvY2F0
aW9uLCBpZGVudCwgc3RhcnQpOwogICAgIH0KICAgICBjYXNlIFNUUklORzogewogICAgICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAtMTU4Miwx
MiArMTUzNywxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1fbGV4ZXItPnNjYW5SZWdFeHAo
cGF0dGVybiwgZmxhZ3MpKTsKICAgICAgICAgCi0gICAgICAgIGludCBzdGFydCA9IHRva2VuU3Rh
cnQoKTsKLSAgICAgICAgaW50IGxpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICAgICAgaW50IGxpbmVT
dGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0g
dG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0
b2tlbkxvY2F0aW9uKCkpOwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIFRyZWVFeHByZXNzaW9u
IHJlID0gY29udGV4dC5jcmVhdGVSZWdFeHAobG9jYXRpb24sICpwYXR0ZXJuLCAqZmxhZ3MsIHN0
YXJ0LCBsaW5lLCBsaW5lU3RhcnQpOworICAgICAgICBUcmVlRXhwcmVzc2lvbiByZSA9IGNvbnRl
eHQuY3JlYXRlUmVnRXhwKGxvY2F0aW9uLCAqcGF0dGVybiwgKmZsYWdzLCBzdGFydCk7CiAgICAg
ICAgIGlmICghcmUpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHlhcnJFcnJvck1zZyA9IFlh
cnI6OmNoZWNrU3ludGF4KHBhdHRlcm4tPnN0cmluZygpKTsKICAgICAgICAgICAgIGZhaWxXaXRo
TWVzc2FnZSh5YXJyRXJyb3JNc2cpOwpAQCAtMTYyOCwxMCArMTU4MSw3IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24oVHJlZUJ1aWxk
ZXImIGNvbnRleHQpCiB7CiAgICAgVHJlZUV4cHJlc3Npb24gYmFzZSA9IDA7Ci0gICAgaW50IHN0
YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgIGludCBleHByZXNzaW9uU3RhcnQgPSBzdGFydDsKLSAg
ICBpbnQgZXhwcmVzc2lvbkxpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgZXhwcmVzc2lvbkxp
bmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lv
blN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgaW50IG5ld0NvdW50ID0gMDsKICAg
ICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb247CiAgICAgd2hpbGUgKG1hdGNoKE5FVykpIHsKQEAg
LTE2NTAsNyArMTYwMCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3MKICAgICAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CiAgICAgICAgIG5leHQoKTsK
ICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvPEZ1bmN0aW9uTm9SZXF1aXJl
bWVudHMsIGZhbHNlPihjb250ZXh0LCBuYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VP
ZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIGJvZHlTdGFydENvbHVtbikp
KTsKLSAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKGxvY2F0aW9uLCBu
YW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQs
IGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUsIGJvZHlTdGFydENvbHVtbik7CisgICAgICAgIGJh
c2UgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2NhdGlvbiwgbmFtZSwgYm9keSwgcGFy
YW1ldGVycywgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5l
LCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIGJvZHlTdGFydENvbHVtbik7CiAgICAgfSBl
bHNlCiAgICAgICAgIGJhc2UgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOwogICAg
IApAQCAtMTY2MCwxNSArMTYxMCwxMyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByZXNzCiAgICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKICAgICAgICAgY2Fz
ZSBPUEVOQlJBQ0tFVDogewogICAgICAgICAgICAgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50
Kys7Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAg
ICAgICAgICAgaW50IGV4cHJlc3Npb25MaW5lID0gbGFzdFRva2VuTGluZSgpOwotICAgICAgICAg
ICAgaW50IGV4cHJlc3Npb25MaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKKyAgICAg
ICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0g
bV9ub25MSFNDb3VudDsKICAgICAgICAgICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX2Fz
c2lnbm1lbnRDb3VudDsKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIHByb3BlcnR5ID0gcGFy
c2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UocHJvcGVydHkp
OwotICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlQnJhY2tldEFjY2Vzcyhsb2NhdGlv
biwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3Vu
dCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZCgpLCBleHByZXNzaW9u
TGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7CisgICAgICAgICAgICBiYXNlID0gY29udGV4dC5j
cmVhdGVCcmFja2V0QWNjZXNzKGxvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2ln
bm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25F
bmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NF
QlJBQ0tFVCk7CiAgICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTE2NzgsMzAgKzE2MjYsMjUgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgaW50IG5vbkxIU0NvdW50ID0gbV9u
b25MSFNDb3VudDsKICAgICAgICAgICAgIGlmIChuZXdDb3VudCkgewogICAgICAgICAgICAgICAg
IG5ld0NvdW50LS07Ci0gICAgICAgICAgICAgICAgaW50IGV4cHJFbmQgPSBsYXN0VG9rZW5FbmQo
KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleHByZXNzaW9uTGluZSA9IGxhc3RUb2tlbkxp
bmUoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleHByZXNzaW9uTGluZVN0YXJ0ID0gbGFz
dFRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVz
c2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgVHJlZUFy
Z3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0KTsKICAgICAgICAgICAg
ICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIGJhc2UgPSBjb250
ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgc3RhcnQsIGV4cHJF
bmQsIGxhc3RUb2tlbkVuZCgpLCBleHByZXNzaW9uTGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7
CisgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwg
YmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
bnQgZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGV4cHJlc3Npb25MaW5lID0gbGFzdFRva2VuTGluZSgpOwotICAgICAgICAgICAgICAgIGlu
dCBleHByZXNzaW9uTGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgICAg
ICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9u
KCk7CiAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3Vt
ZW50cyhjb250ZXh0KTsKICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMpOwot
ICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKGxvY2F0
aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFz
dFRva2VuRW5kKCksIGV4cHJlc3Npb25MaW5lLCBleHByZXNzaW9uTGluZVN0YXJ0KTsKKyAgICAg
ICAgICAgICAgICBiYXNlID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwg
YmFzZSwgYXJndW1lbnRzLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9ub25MSFNDb3Vu
dCA9IG5vbkxIU0NvdW50OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBET1Q6IHsKICAgICAgICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwot
ICAgICAgICAgICAgaW50IGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICAgICAg
ICAgIGV4cHJlc3Npb25MaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigp
OwogICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJGbGFnc0lnbm9yZVJlc2Vy
dmVkV29yZHMgfCBUcmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMpOwogICAgICAgICAgICAg
bWF0Y2hPckZhaWwoSURFTlQpOwotICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRG90
QWNjZXNzKGxvY2F0aW9uLCBiYXNlLCBtX3Rva2VuLm1fZGF0YS5pZGVudCwgZXhwcmVzc2lvblN0
YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZCgpLCBleHByZXNzaW9uTGluZSwgZXhwcmVzc2lv
bkxpbmVTdGFydCk7CisgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nlc3Mo
bG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9kYXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4
cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICBuZXh0KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTcxMSw3ICsxNjU0LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIH0KIGVuZE1lbWJlckV4cHJl
c3Npb246CiAgICAgd2hpbGUgKG5ld0NvdW50LS0pCi0gICAgICAgIGJhc2UgPSBjb250ZXh0LmNy
ZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIHN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwgZXhwcmVz
c2lvbkxpbmUsIGV4cHJlc3Npb25MaW5lU3RhcnQpOworICAgICAgICBiYXNlID0gY29udGV4dC5j
cmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBleHByZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVu
ZFBvc2l0aW9uKCkpOwogICAgIHJldHVybiBiYXNlOwogfQogCkBAIC0xNzQ0LDE0ICsxNjg3LDEy
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBtX25vbkxIU0NvdW50Kys7Ci0gICAgICAgIGNvbnRleHQu
YXBwZW5kVW5hcnlUb2tlbih0b2tlblN0YWNrRGVwdGgsIG1fdG9rZW4ubV90eXBlLCB0b2tlblN0
YXJ0KCksIHRva2VuTGluZSgpLCB0b2tlbkxpbmVTdGFydCgpKTsKKyAgICAgICAgY29udGV4dC5h
cHBlbmRVbmFyeVRva2VuKHRva2VuU3RhY2tEZXB0aCwgbV90b2tlbi5tX3R5cGUsIHRva2VuU3Rh
cnRQb3NpdGlvbigpKTsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBtX25vblRyaXZpYWxFeHBy
ZXNzaW9uQ291bnQrKzsKICAgICB9Ci0gICAgaW50IHN1YkV4cHJTdGFydCA9IHRva2VuU3RhcnQo
KTsKLSAgICBpbnQgc3ViRXhwckxpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgc3ViRXhwckxp
bmVTdGFydFBvc2l0aW9uID0gdG9rZW5MaW5lU3RhcnQoKTsKLSAgICBBU1NFUlQoc3ViRXhwclN0
YXJ0ID49IHN1YkV4cHJMaW5lU3RhcnRQb3NpdGlvbik7CisgICAgSlNUZXh0UG9zaXRpb24gc3Vi
RXhwclN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CisgICAgQVNTRVJUKHN1YkV4cHJTdGFy
dC5vZmZzZXQgPj0gc3ViRXhwclN0YXJ0LmxpbmVTdGFydE9mZnNldCk7CiAgICAgSlNUb2tlbkxv
Y2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgVHJlZUV4cHJlc3Npb24gZXhw
ciA9IHBhcnNlTWVtYmVyRXhwcmVzc2lvbihjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShleHBy
KTsKQEAgLTE3NjUsNyArMTcwNiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3MKICAgICBjYXNlIFBMVVNQTFVTOgogICAgICAgICBtX25vblRyaXZpYWxFeHByZXNz
aW9uQ291bnQrKzsKICAgICAgICAgbV9ub25MSFNDb3VudCsrOwotICAgICAgICBleHByID0gY29u
dGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wUGx1c1BsdXMsIHN1YkV4cHJT
dGFydCwgbGFzdFRva2VuRW5kKCksIHRva2VuRW5kKCksIHRva2VuTGluZSgpLCB0b2tlbkxpbmVT
dGFydCgpKTsKKyAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVBvc3RmaXhOb2RlKGxvY2F0aW9u
LCBleHByLCBPcFBsdXNQbHVzLCBzdWJFeHByU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCks
IHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CiAgICAg
ICAgIGZhaWxJZlRydWVJZlN0cmljdFdpdGhOYW1lQW5kTWVzc2FnZShpc0V2YWxPckFyZ3VtZW50
cywgIiciLCBtX2xhc3RJZGVudGlmaWVyLT5pbXBsKCksICInIGNhbm5vdCBiZSBtb2RpZmllZCBp
biBzdHJpY3QgbW9kZSIpOwogICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QocmVxdWlyZXNMRXhw
cik7CkBAIC0xNzc0LDcgKzE3MTUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByZXNzCiAgICAgY2FzZSBNSU5VU01JTlVTOgogICAgICAgICBtX25vblRyaXZpYWxFeHBy
ZXNzaW9uQ291bnQrKzsKICAgICAgICAgbV9ub25MSFNDb3VudCsrOwotICAgICAgICBleHByID0g
Y29udGV4dC5tYWtlUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wTWludXNNaW51cywgc3Vi
RXhwclN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwgdG9rZW5FbmQoKSwgdG9rZW5MaW5lKCksIHRva2Vu
TGluZVN0YXJ0KCkpOworICAgICAgICBleHByID0gY29udGV4dC5tYWtlUG9zdGZpeE5vZGUobG9j
YXRpb24sIGV4cHIsIE9wTWludXNNaW51cywgc3ViRXhwclN0YXJ0LCBsYXN0VG9rZW5FbmRQb3Np
dGlvbigpLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCsr
OwogICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoaXNFdmFsT3JB
cmd1bWVudHMsICInIiwgbV9sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiJyBjYW5ub3QgYmUgbW9k
aWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KHJlcXVp
cmVzTEV4cHIpOwpAQCAtMTc4NCw5ICsxNzI1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgaW50IGVu
ZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgIGludCBlbmRMaW5lID0gbGFzdFRva2VuTGluZSgpOwot
ICAgIGludCBlbmRMaW5lU3RhcnRQb3NpdGlvbiA9IGxhc3RUb2tlbkxpbmVTdGFydCgpOworICAg
IEpTVGV4dFBvc2l0aW9uIGVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAKICAgICBpZiAo
IVRyZWVCdWlsZGVyOjpDcmVhdGVzQVNUICYmIChtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQgfHwg
IXN0cmljdE1vZGUoKSkpCiAgICAgICAgIHJldHVybiBleHByOwpAQCAtMTgwOSwxMiArMTc0OCwx
MiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBQTFVTUExVUzoKICAgICAgICAgY2FzZSBBVVRPUExVU1BM
VVM6Ci0gICAgICAgICAgICBleHByID0gY29udGV4dC5tYWtlUHJlZml4Tm9kZShsb2NhdGlvbiwg
ZXhwciwgT3BQbHVzUGx1cywgY29udGV4dC51bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQodG9rZW5T
dGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0ICsgMSwgZW5kLCBzdWJFeHByTGluZSwgc3ViRXhwckxp
bmVTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhO
b2RlKGxvY2F0aW9uLCBleHByLCBPcFBsdXNQbHVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xh
c3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQpOwogICAgICAg
ICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE1JTlVTTUlOVVM6CiAgICAgICAgIGNhc2UgQVVUT01JTlVTTUlOVVM6Ci0gICAgICAgICAg
ICBleHByID0gY29udGV4dC5tYWtlUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BNaW51c01p
bnVzLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBz
dWJFeHByU3RhcnQgKyAxLCBlbmQsIHN1YkV4cHJMaW5lLCBzdWJFeHByTGluZVN0YXJ0UG9zaXRp
b24pOworICAgICAgICAgICAgZXhwciA9IGNvbnRleHQubWFrZVByZWZpeE5vZGUobG9jYXRpb24s
IGV4cHIsIE9wTWludXNNaW51cywgY29udGV4dC51bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQodG9r
ZW5TdGFja0RlcHRoKSwgc3ViRXhwclN0YXJ0ICsgMSwgZW5kKTsKICAgICAgICAgICAgIG1fYXNz
aWdubWVudENvdW50Kys7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUWVBFT0Y6
CkBAIC0xODI1LDE0ICsxNzY0LDEzIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3MKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERFTEVURVRPS0VOOgog
ICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGNvbnRleHQu
aXNSZXNvbHZlKGV4cHIpLCAiQ2Fubm90IGRlbGV0ZSB1bnF1YWxpZmllZCBwcm9wZXJ0eSIsIG1f
bGFzdElkZW50aWZpZXItPmltcGwoKSwgImluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgICAgICBl
eHByID0gY29udGV4dC5tYWtlRGVsZXRlTm9kZShsb2NhdGlvbiwgZXhwciwgY29udGV4dC51bmFy
eVRva2VuU3RhY2tMYXN0U3RhcnQodG9rZW5TdGFja0RlcHRoKSwgZW5kLCBlbmQsIGVuZExpbmUs
IGVuZExpbmVTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VE
ZWxldGVOb2RlKGxvY2F0aW9uLCBleHByLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFy
dCh0b2tlblN0YWNrRGVwdGgpLCBlbmQsIGVuZCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIElmIHdlIGdldCBoZXJlIHNvbWV0aGluZyBoYXMg
Z29uZSBob3JyaWJseSBob3JyaWJseSB3cm9uZwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAg
ICAgfQogICAgICAgICBzdWJFeHByU3RhcnQgPSBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RT
dGFydCh0b2tlblN0YWNrRGVwdGgpOwotICAgICAgICBzdWJFeHByTGluZVN0YXJ0UG9zaXRpb24g
PSBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RMaW5lU3RhcnRQb3NpdGlvbih0b2tlblN0YWNr
RGVwdGgpOwogICAgICAgICBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja1JlbW92ZUxhc3QodG9rZW5T
dGFja0RlcHRoKTsKICAgICB9CiAgICAgcmV0dXJuIGV4cHI7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDE1MzA3NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw4ICs0NzUsNyBA
QCBwcml2YXRlOgogICAgIFN0cmluZyBwYXJzZUlubmVyKCk7CiAKICAgICB2b2lkIGRpZEZpbmlz
aFBhcnNpbmcoU291cmNlRWxlbWVudHMqLCBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFj
a3M6OlZhclN0YWNrPiosIAotICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzZXJBcmVuYURh
dGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiwgQ29kZUZlYXR1cmVzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgSWRlbnRpZmllclNldCYpOworICAgICAg
ICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiwgQ29k
ZUZlYXR1cmVzLCBpbnQsIElkZW50aWZpZXJTZXQmKTsKIAogICAgIC8vIFVzZWQgdG8gZGV0ZXJt
aW5lIHR5cGUgb2YgZXJyb3IgdG8gcmVwb3J0LgogICAgIGJvb2wgaXNGdW5jdGlvbkJvZHlOb2Rl
KFNjb3BlTm9kZSopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC00ODQsMjAgKzQ4MywyMiBAQCBwcml2
YXRlOgogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIG5leHQodW5zaWduZWQgbGV4ZXJGbGFncyA9
IDApCiAgICAgewotICAgICAgICBtX2xhc3RMaW5lID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmU7
Ci0gICAgICAgIG1fbGFzdFRva2VuRW5kID0gbV90b2tlbi5tX2xvY2F0aW9uLmVuZE9mZnNldDsK
LSAgICAgICAgbV9sYXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0
YXJ0T2Zmc2V0OwotICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihtX2xhc3RMaW5l
KTsKLSAgICAgICAgbV90b2tlbi5tX3R5cGUgPSBtX2xleGVyLT5sZXgoJm1fdG9rZW4ubV9kYXRh
LCAmbV90b2tlbi5tX2xvY2F0aW9uLCBsZXhlckZsYWdzLCBzdHJpY3RNb2RlKCkpOworICAgICAg
ICBpbnQgbGFzdExpbmUgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZTsKKyAgICAgICAgaW50IGxh
c3RUb2tlbkVuZCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5lbmRPZmZzZXQ7CisgICAgICAgIGludCBs
YXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0Owor
ICAgICAgICBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uID0gSlNUZXh0UG9zaXRpb24obGFzdExpbmUs
IGxhc3RUb2tlbkVuZCwgbGFzdFRva2VuTGluZVN0YXJ0KTsKKyAgICAgICAgbV9sZXhlci0+c2V0
TGFzdExpbmVOdW1iZXIobGFzdExpbmUpOworICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4
ZXItPmxleCgmbV90b2tlbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSgpKTsKICAgICB9CiAKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgbmV4dEV4cGVjdElkZW50aWZpZXIodW5zaWduZWQgbGV4ZXJG
bGFncyA9IDApCiAgICAgewotICAgICAgICBtX2xhc3RMaW5lID0gbV90b2tlbi5tX2xvY2F0aW9u
LmxpbmU7Ci0gICAgICAgIG1fbGFzdFRva2VuRW5kID0gbV90b2tlbi5tX2xvY2F0aW9uLmVuZE9m
ZnNldDsKLSAgICAgICAgbV9sYXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24u
bGluZVN0YXJ0T2Zmc2V0OwotICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihtX2xh
c3RMaW5lKTsKLSAgICAgICAgbV90b2tlbi5tX3R5cGUgPSBtX2xleGVyLT5sZXhFeHBlY3RJZGVu
dGlmaWVyKCZtX3Rva2VuLm1fZGF0YSwgJm1fdG9rZW4ubV9sb2NhdGlvbiwgbGV4ZXJGbGFncywg
c3RyaWN0TW9kZSgpKTsKKyAgICAgICAgaW50IGxhc3RMaW5lID0gbV90b2tlbi5tX2xvY2F0aW9u
LmxpbmU7CisgICAgICAgIGludCBsYXN0VG9rZW5FbmQgPSBtX3Rva2VuLm1fbG9jYXRpb24uZW5k
T2Zmc2V0OworICAgICAgICBpbnQgbGFzdFRva2VuTGluZVN0YXJ0ID0gbV90b2tlbi5tX2xvY2F0
aW9uLmxpbmVTdGFydE9mZnNldDsKKyAgICAgICAgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbiA9IEpT
VGV4dFBvc2l0aW9uKGxhc3RMaW5lLCBsYXN0VG9rZW5FbmQsIGxhc3RUb2tlbkxpbmVTdGFydCk7
CisgICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKGxhc3RMaW5lKTsKKyAgICAgICAg
bV90b2tlbi5tX3R5cGUgPSBtX2xleGVyLT5sZXhFeHBlY3RJZGVudGlmaWVyKCZtX3Rva2VuLCBs
ZXhlckZsYWdzLCBzdHJpY3RNb2RlKCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBuZXh0VG9rZW5Jc0NvbG9uKCkKQEAgLTUxNSw3ICs1MTYsNyBAQCBwcml2YXRlOgogICAgIAog
ICAgIEFMV0FZU19JTkxJTkUgU3RyaW5nIGdldFRva2VuKCkgewogICAgICAgICBTb3VyY2VQcm92
aWRlciogc291cmNlUHJvdmlkZXIgPSBtX3NvdXJjZS0+cHJvdmlkZXIoKTsKLSAgICAgICAgcmV0
dXJuIHNvdXJjZVByb3ZpZGVyLT5nZXRSYW5nZSh0b2tlblN0YXJ0KCksIHRva2VuRW5kKCkpOwor
ICAgICAgICByZXR1cm4gc291cmNlUHJvdmlkZXItPmdldFJhbmdlKHRva2VuU3RhcnQoKSwgdG9r
ZW5FbmRQb3NpdGlvbigpLm9mZnNldCk7CiAgICAgfQogICAgIAogICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBtYXRjaChKU1Rva2VuVHlwZSBleHBlY3RlZCkKQEAgLTUyOCw2ICs1MjksMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9sb2NhdGlvbi5zdGFydE9mZnNldDsKICAg
ICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBKU1RleHRQb3NpdGlvbiYgdG9rZW5T
dGFydFBvc2l0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Rva2VuLm1fc3RhcnRQb3Np
dGlvbjsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIGludCB0b2tlbkxpbmUoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lOwpAQCAtNTM4LDkgKzU0NCw5
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0b2tlblN0YXJ0KCkgLSB0b2tlbkxpbmVTdGFy
dCgpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgdG9rZW5FbmQoKQorICAg
IEFMV0FZU19JTkxJTkUgY29uc3QgSlNUZXh0UG9zaXRpb24mIHRva2VuRW5kUG9zaXRpb24oKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9sb2NhdGlvbi5lbmRPZmZzZXQ7CisgICAg
ICAgIHJldHVybiBtX3Rva2VuLm1fZW5kUG9zaXRpb247CiAgICAgfQogICAgIAogICAgIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgdG9rZW5MaW5lU3RhcnQoKQpAQCAtOTE1LDcgKzkyMSw3IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGUgPGJvb2wgc3RyaWN0LCBjbGFzcyBUcmVlQnVpbGRlcj4gQUxX
QVlTX0lOTElORSBUcmVlUHJvcGVydHkgcGFyc2VQcm9wZXJ0eShUcmVlQnVpbGRlciYpOwogICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25C
b2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJik7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcnNl
Rm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9u
TGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYg
bGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBpbnQmIGlkZW50U3Rh
cnQsIGludCYgaW5pdFN0YXJ0LCBpbnQmIGluaXRFbmQpOworICAgIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0
aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVy
KiYgbGFzdElkZW50LCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBKU1RleHRQb3Np
dGlvbiYgaWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFydCwgSlNUZXh0UG9zaXRp
b24mIGluaXRFbmQpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lO
TElORSBUcmVlQ29uc3REZWNsTGlzdCBwYXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KFRyZWVCdWls
ZGVyJiBjb250ZXh0KTsKICAgICB0ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMsIGJvb2wg
bmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIHBhcnNlRnVu
Y3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgY29uc3QgSWRlbnRpZmllciomLCBUcmVlRm9ybWFsUGFy
YW1ldGVyTGlzdCYsIFRyZWVGdW5jdGlvbkJvZHkmLCB1bnNpZ25lZCYgb3BlbkJyYWNlT2Zmc2V0
LCB1bnNpZ25lZCYgY2xvc2VCcmFjZU9mZnNldCwgaW50JiBib2R5U3RhcnRMaW5lLCB1bnNpZ25l
ZCYgYm9keVN0YXJ0Q29sdW1uKTsKICAgICBBTFdBWVNfSU5MSU5FIGludCBpc0JpbmFyeU9wZXJh
dG9yKEpTVG9rZW5UeXBlKTsKQEAgLTkzNSwxOSArOTQxLDkgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIG1fc3RhY2suaXNTYWZlVG9SZWN1cnNlKCk7CiAgICAgfQogICAgIAotICAgIGludCBs
YXN0VG9rZW5FbmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGFzdFRva2VuRW5k
OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGxhc3RUb2tlbkxpbmUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbGFzdExpbmU7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGFzdFRva2Vu
TGluZVN0YXJ0KCkgY29uc3QKKyAgICBjb25zdCBKU1RleHRQb3NpdGlvbiYgbGFzdFRva2VuRW5k
UG9zaXRpb24oKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGFzdFRva2VuTGluZVN0
YXJ0OworICAgICAgICByZXR1cm4gbV9sYXN0VG9rZW5FbmRQb3NpdGlvbjsKICAgICB9CiAKICAg
ICBib29sIGhhc0Vycm9yKCkgY29uc3QKQEAgLTk2NSwxMCArOTYxLDcgQEAgcHJpdmF0ZToKICAg
ICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgSlNUb2tlbiBtX3Rva2VuOwogICAgIGJvb2wg
bV9hbGxvd3NJbjsKLSAgICB1bnNpZ25lZCBtX2xhc3RMaW5lOwotICAgIGludCBtX2xhc3RUb2tl
bkVuZDsKLSAgICB1bnNpZ25lZCBtX2xhc3RUb2tlbkxpbmU7Ci0gICAgdW5zaWduZWQgbV9sYXN0
VG9rZW5MaW5lU3RhcnQ7CisgICAgSlNUZXh0UG9zaXRpb24gbV9sYXN0VG9rZW5FbmRQb3NpdGlv
bjsKICAgICBpbnQgbV9hc3NpZ25tZW50Q291bnQ7CiAgICAgaW50IG1fbm9uTEhTQ291bnQ7CiAg
ICAgYm9vbCBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQ7CkBAIC0xMDUxLDcgKzEwNDQsNyBAQCBQ
YXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9udW1Db25zdGFudHMpOwotICAgICAgICByZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+Zmly
c3RMaW5lKCksIG1fbGFzdExpbmUsIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+
Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3Vy
Y2UtPmZpcnN0TGluZSgpLCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIG1fbGV4ZXItPmN1
cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBXZSBjYW4gbmV2ZXIgc2VlIGEgc3ludGF4IGVycm9yIHdoZW4g
cmVwYXJzaW5nIGEgZnVuY3Rpb24sIHNpbmNlIHdlIHNob3VsZCBoYXZlCiAgICAgICAgIC8vIHJl
cG9ydGVkIHRoZSBlcnJvciB3aGVuIHBhcnNpbmcgdGhlIGNvbnRhaW5pbmcgcHJvZ3JhbSBvciBl
dmFsIGNvZGUuIFNvIGlmIHdlJ3JlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlclRva2Vucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyVG9rZW5zLmgJKHJldmlzaW9uIDE1MzA3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAs
MjMgQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAgICAgSU5WQUxJRF9TVFJJTkdfTElURVJBTF9FUlJP
UlRPSyA9IDkgfCBFcnJvclRva2VuRmxhZywKIH07CiAKK3N0cnVjdCBKU1RleHRQb3NpdGlvbiB7
CisgICAgSlNUZXh0UG9zaXRpb24oKSA6IGxpbmUoMCksIG9mZnNldCgwKSwgbGluZVN0YXJ0T2Zm
c2V0KDApIHsgfQorICAgIEpTVGV4dFBvc2l0aW9uKGludCBfbGluZSwgaW50IF9vZmZzZXQsIGlu
dCBfbGluZVN0YXJ0T2Zmc2V0KSA6IGxpbmUoX2xpbmUpLCBvZmZzZXQoX29mZnNldCksIGxpbmVT
dGFydE9mZnNldChfbGluZVN0YXJ0T2Zmc2V0KSB7IH0KKyAgICBKU1RleHRQb3NpdGlvbihjb25z
dCBKU1RleHRQb3NpdGlvbiYgb3RoZXIpIDogbGluZShvdGhlci5saW5lKSwgb2Zmc2V0KG90aGVy
Lm9mZnNldCksIGxpbmVTdGFydE9mZnNldChvdGhlci5saW5lU3RhcnRPZmZzZXQpIHsgfQorCisg
ICAgSlNUZXh0UG9zaXRpb24gb3BlcmF0b3IrKGludCBhZGp1c3RtZW50KSBjb25zdCB7IHJldHVy
biBKU1RleHRQb3NpdGlvbihsaW5lLCBvZmZzZXQgKyBhZGp1c3RtZW50LCBsaW5lU3RhcnRPZmZz
ZXQpOyB9CisgICAgSlNUZXh0UG9zaXRpb24gb3BlcmF0b3IrKHVuc2lnbmVkIGFkanVzdG1lbnQp
IGNvbnN0IHsgcmV0dXJuICp0aGlzICsgc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RtZW50KTsgfQor
ICAgIEpTVGV4dFBvc2l0aW9uIG9wZXJhdG9yLShpbnQgYWRqdXN0bWVudCkgY29uc3QgeyByZXR1
cm4gKnRoaXMgKyAoLSBhZGp1c3RtZW50KTsgfQorICAgIEpTVGV4dFBvc2l0aW9uIG9wZXJhdG9y
LSh1bnNpZ25lZCBhZGp1c3RtZW50KSBjb25zdCB7IHJldHVybiAqdGhpcyArICgtIHN0YXRpY19j
YXN0PGludD4oYWRqdXN0bWVudCkpOyB9CisKKyAgICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJl
dHVybiBvZmZzZXQ7IH0KKworICAgIGludCBsaW5lOworICAgIGludCBvZmZzZXQ7CisgICAgaW50
IGxpbmVTdGFydE9mZnNldDsKK307CisKIHVuaW9uIEpTVG9rZW5EYXRhIHsKICAgICBzdHJ1Y3Qg
ewogICAgICAgICB1aW50MzJfdCBsaW5lOwpAQCAtMTgwLDYgKzE5Nyw4IEBAIHN0cnVjdCBKU1Rv
a2VuIHsKICAgICBKU1Rva2VuVHlwZSBtX3R5cGU7CiAgICAgSlNUb2tlbkRhdGEgbV9kYXRhOwog
ICAgIEpTVG9rZW5Mb2NhdGlvbiBtX2xvY2F0aW9uOworICAgIEpTVGV4dFBvc2l0aW9uIG1fc3Rh
cnRQb3NpdGlvbjsKKyAgICBKU1RleHRQb3NpdGlvbiBtX2VuZFBvc2l0aW9uOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRh
eENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5
bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTUzMDc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSwyMSArMTE5LDIx
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRG9udEJ1aWxkU3RyaW5ncyA9
IExleGVyRmxhZ3NEb250QnVpbGRTdHJpbmdzOwogCiAgICAgaW50IGNyZWF0ZVNvdXJjZUVsZW1l
bnRzKCkgeyByZXR1cm4gMTsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNhbGxO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtlRnVuY3Rp
b25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KICAgICB2b2lkIGFwcGVuZFRvQ29tbWEoRXhwcmVzc2lv
blR5cGUmIGJhc2UsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KSB7IGJhc2UgPSByaWdodDsgfQogICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUgcmlnaHQpIHsgcmV0dXJuIHJpZ2h0OyB9Ci0g
ICAgRXhwcmVzc2lvblR5cGUgbWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9Ci0gICAgRXhw
cmVzc2lvblR5cGUgbWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvblR5cGUsIE9wZXJhdG9yLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gUHJl
RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIGludCwgaW50LCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBQb3N0RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VBc3NpZ25O
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgRXhw
cmVzc2lvblR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1l
bnRFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiBQcmVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZVBvc3RmaXhOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRvciwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gUG9zdEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlVHlwZU9mTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVHlwZW9m
RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1
cm4gRGVsZXRlRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIG1ha2VEZWxldGVOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50KSB7IHJldHVy
biBEZWxldGVFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZU5lZ2F0ZU5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIG1ha2VCaXR3aXNlTm90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlTG9naWNhbE5vdChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
VHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlVW5h
cnlQbHVzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBV
bmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVWb2lkKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHBy
ZXNzaW9uVHlwZSB0aGlzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBUaGlz
RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFJlc29s
dmVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVzb2x2ZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJldHVybiBSZXNvbHZlRXhwcjsg
fQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJikgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlw
ZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1
cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBcnJheShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIEFycmF5TGl0ZXJhbEV4cHI7IH0K
QEAgLTE0MiwxMyArMTQyLDEzIEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVT
dHJpbmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciopIHsgcmV0dXJu
IFN0cmluZ0V4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVCb29sZWFuKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGJvb2wpIHsgcmV0dXJuIEJvb2xFeHByOyB9CiAgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlTnVsbChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBOdWxsRXhw
cjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUJyYWNrZXRBY2Nlc3MoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBib29sLCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQnJhY2tldEV4cHI7IH0KLSAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVEb3RBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5
cGUsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4g
RG90RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gWWFycjo6Y2hlY2tTeW50YXgocGF0dGVybi5zdHJpbmco
KSkgPyAwIDogUmVnRXhwRXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU5ld0V4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIE5ld0V4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBF
eHByZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQnJhY2tldEV4cHI7
IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVEb3RBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50KSB7
IHJldHVybiBEb3RFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVnRXhwKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50
aWZpZXImLCBpbnQpIHsgcmV0dXJuIFlhcnI6OmNoZWNrU3ludGF4KHBhdHRlcm4uc3RyaW5nKCkp
ID8gMCA6IFJlZ0V4cEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50LCBpbnQp
IHsgcmV0dXJuIE5ld0V4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOZXdFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCkgeyByZXR1cm4g
TmV3RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcihjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIEV4cHJl
c3Npb25UeXBlKSB7IHJldHVybiBDb25kaXRpb25hbEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlw
ZSBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50
aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJu
IEFzc2lnbm1lbnRFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXNzaWduUmVzb2x2
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5
cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CiAgICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0
IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJu
IEZ1bmN0aW9uRXhwcjsgfQogICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBib29sKSB7IHJldHVybiAx
OyB9CiAgICAgdm9pZCBzZXRGdW5jdGlvblN0YXJ0KGludCwgaW50KSB7IH0KQEAgLTE4NSwyMiAr
MTg1LDIyIEBAIHB1YmxpYzoKICAgICBpbnQgY3JlYXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNy
ZWF0ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZUZvckxvb3AoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQot
ICAgIGludCBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRl
bnRpZmllciosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlRm9ySW5Mb29wKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGb3JJbkxvb3AoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVh
dGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRW1wdHlTdGF0
ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVh
dGVWYXJTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCkgeyBy
ZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9
Ci0gICAgaW50IGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGlu
dCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUJyZWFr
U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQs
IGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVDb250aW51
ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVDb250aW51ZVN0YXRlbWVudChjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlUmV0dXJuU3RhdGVtZW50KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3Jl
YXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0
dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50
IGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50
KSB7IHJldHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCkgeyByZXR1cm4gMTsg
fQogICAgIGludCBjcmVhdGVUcnlTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAg
ICAgaW50IGNyZWF0ZVN3aXRjaFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQs
IGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZVdo
aWxlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCkg
eyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVXaXRoU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVy
biAxOyB9CisgICAgaW50IGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBj
cmVhdGVEb1doaWxlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBp
bnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVMYWJlbFN0YXRlbWVudChjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlVGhyb3dTdGF0ZW1lbnQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Cisg
ICAgaW50IGNyZWF0ZVRocm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRGVidWdnZXIoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlQ29u
c3RTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCkgeyByZXR1
cm4gMTsgfQogICAgIGludCBhcHBlbmRDb25zdERlY2woY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
aW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJldHVybiAxOyB9CkBAIC0yMjIsNyArMjIy
LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVmFyKGNvbnN0IElkZW50aWZpZXIqLCBib29sKSB7
IH0KICAgICBpbnQgY29tYmluZUNvbW1hTm9kZXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgZXZhbENvdW50KCkgY29uc3QgeyByZXR1cm4g
MDsgfQotICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8oaW50JiBvcGVyYW5kU3Rh
Y2tEZXB0aCwgaW50IGV4cHIsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBib29sKQorICAgIHZv
aWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8oaW50JiBvcGVyYW5kU3RhY2tEZXB0aCwgaW50
IGV4cHIsIGludCwgaW50LCBpbnQsIGJvb2wpCiAgICAgewogICAgICAgICBpZiAoIW1fdG9wQmlu
YXJ5RXhwcikKICAgICAgICAgICAgIG1fdG9wQmluYXJ5RXhwciA9IGV4cHI7CkBAIC0yNDAsMTMg
KzI0MCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVyYXRvclN0YWNrQXBwZW5kKGludCYgb3Bl
cmF0b3JTdGFja0RlcHRoLCBpbnQsIGludCkgeyBvcGVyYXRvclN0YWNrRGVwdGgrKzsgfQogICAg
IGludCBwb3BPcGVyYW5kU3RhY2soaW50JikgeyBpbnQgcmVzID0gbV90b3BCaW5hcnlFeHByOyBt
X3RvcEJpbmFyeUV4cHIgPSAwOyByZXR1cm4gcmVzOyB9CiAgICAgCi0gICAgdm9pZCBhcHBlbmRV
bmFyeVRva2VuKGludCYgc3RhY2tEZXB0aCwgaW50IHRvaywgaW50LCBpbnQsIGludCkgeyBzdGFj
a0RlcHRoID0gMTsgbV90b3BVbmFyeVRva2VuID0gdG9rOyB9CisgICAgdm9pZCBhcHBlbmRVbmFy
eVRva2VuKGludCYgc3RhY2tEZXB0aCwgaW50IHRvaywgaW50KSB7IHN0YWNrRGVwdGggPSAxOyBt
X3RvcFVuYXJ5VG9rZW4gPSB0b2s7IH0KICAgICBpbnQgdW5hcnlUb2tlblN0YWNrTGFzdFR5cGUo
aW50JikgeyByZXR1cm4gbV90b3BVbmFyeVRva2VuOyB9Ci0gICAgdW5zaWduZWQgdW5hcnlUb2tl
blN0YWNrTGFzdFN0YXJ0KGludCYpIHsgcmV0dXJuIDA7IH0KLSAgICB1bnNpZ25lZCB1bmFyeVRv
a2VuU3RhY2tMYXN0TGluZVN0YXJ0UG9zaXRpb24oaW50JikgeyByZXR1cm4gMDsgfQorICAgIEpT
VGV4dFBvc2l0aW9uIHVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydChpbnQmKSB7IHJldHVybiBKU1Rl
eHRQb3NpdGlvbigwLCAwLCAwKTsgfQogICAgIHZvaWQgdW5hcnlUb2tlblN0YWNrUmVtb3ZlTGFz
dChpbnQmIHN0YWNrRGVwdGgpIHsgc3RhY2tEZXB0aCA9IDA7IH0KICAgICAKLSAgICB2b2lkIGFz
c2lnbm1lbnRTdGFja0FwcGVuZChpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIE9w
ZXJhdG9yKSB7IH0KKyAgICB2b2lkIGFzc2lnbm1lbnRTdGFja0FwcGVuZChpbnQsIGludCwgaW50
LCBpbnQsIGludCwgT3BlcmF0b3IpIHsgfQogICAgIGludCBjcmVhdGVBc3NpZ25tZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAxOyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYgZ2V0
TmFtZShjb25zdCBQcm9wZXJ0eSYgcHJvcGVydHkpIGNvbnN0IHsgQVNTRVJUKHByb3BlcnR5Lm5h
bWUpOyByZXR1cm4gKnByb3BlcnR5Lm5hbWU7IH0KICAgICBQcm9wZXJ0eU5vZGU6OlR5cGUgZ2V0
VHlwZShjb25zdCBQcm9wZXJ0eSYgcHJvcGVydHkpIGNvbnN0IHsgcmV0dXJuIHByb3BlcnR5LnR5
cGU7IH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MzA3NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA3LTIzICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggcHJvYmxlbXMgd2l0aCBkaXZvdCBh
bmQgbGluZVN0YXJ0IG1pc21hdGNoZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTg2NjIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lvbiB0ZXN0IGNhc2VzIGZyb20gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODY2MgorICAgICAgICBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODY2NC4KKworICAgICAgICAq
IGZhc3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFz
dC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6CisgICAgICAgICogZmFzdC9qcy9zY3JpcHQt
dGVzdHMvbGluZS1jb2x1bW4tbnVtYmVycy5qczoKKyAgICAgICAgKHRyeS50b0Z1enoxKToKKyAg
ICAgICAgKHRyeS50b0Z1enoyKToKKwogMjAxMy0wNy0yMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkZWQgRXhwcmVzc2lvblJhbmdlSW5mbyBmb3IgQmluYXJ5
T3BOb2RlcyB0aGF0IGNhbiB0aHJvdyBleGNlcHRpb25zCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2pzL2xpbmUtY29sdW1uLW51bWJlcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDE1MzA3NCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsMTQgQEAgT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogICAgIDE4ICAgZyBhdCBsaW5lLWNvbHVtbi1u
dW1iZXJzLmh0bWw6MTkwOjMwCiAgICAgMTkgICBnIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRt
bDoxOTA6MzAKIAorLS0+IENhc2UgMjEgU3RhY2sgVHJhY2U6CisgICAgMCAgIHRvRnV6ejIxIGF0
IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoyMDY6MjYKKyAgICAxICAgZ2xvYmFsIGNvZGUgYXQg
bGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjIwOToxMworCistLT4gQ2FzZSAyMiBTdGFjayBUcmFj
ZToKKyAgICAwICAgdG9GdXp6MjIgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjIyMDo0MQor
ICAgIDEgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MjI0OjEzCisK
IC0tPiBDYXNlIDEgU3RhY2sgVHJhY2U6CiAgICAgMCAgIGdsb2JhbCBjb2RlIGF0IGxpbmUtY29s
dW1uLW51bWJlcnMuanM6MzoyOAogCkBAIC0yNzEsNiArMjc5LDE0IEBAIE9uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKICAgICAxOCAgIGcgYXQgbGluZS1jb2x1bW4tbnVt
YmVycy5qczoxMjc6MzAKICAgICAxOSAgIGcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxMjc6
MzAKIAorLS0+IENhc2UgMjEgU3RhY2sgVHJhY2U6CisgICAgMCAgIHRvRnV6ejIxYiBhdCBsaW5l
LWNvbHVtbi1udW1iZXJzLmpzOjE0MToyNgorICAgIDEgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNv
bHVtbi1udW1iZXJzLmpzOjE0NDoxNAorCistLT4gQ2FzZSAyMiBTdGFjayBUcmFjZToKKyAgICAw
ICAgdG9GdXp6MjJiIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTUzOjQxCisgICAgMSAgIGds
b2JhbCBjb2RlIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTU3OjE0CisKIFBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWwJKHJldmlzaW9uIDE1MzA3NCkKKysr
IExheW91dFRlc3RzL2Zhc3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTgsNiArMTk4LDM1IEBAIHRyeSB7CiB9CiA8L3NjcmlwdD4KIAorPCEtLSBDYXNl
IDIxOiBSZWdyZXNzaW9uIHRlc3QgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE4NjYyIC0tPgorPHNjcmlwdD50ZXN0SWQrKzs8L3NjcmlwdD4KKzxzY3JpcHQ+
Cit0cnkgeworICAgIGZ1bmN0aW9uIHRvRnV6ejIxKCkgeworICAgICAgICBpZiAoUHJpb3JpdHlR
dWV1ZS5wcm90b3R5cGUuZG9Tb3J0KCkgaW5zdGFuY2VvZiAodGhpcyBePSBmdW5jdGlvbigpIHsK
KyAgICAgICAgfSkpIHJldHVybiAyOyAKKyAgICB9CisgICAgdG9GdXp6MjEoKTsKK30gY2F0Y2go
ZSkgeworICAgIHByaW50U3RhY2soZS5zdGFjayk7Cit9Cis8L3NjcmlwdD4KKworPCEtLSBDYXNl
IDIyOiBSZWdyZXNzaW9uIHRlc3QgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE4NjY0IC0tPgorPHNjcmlwdD50ZXN0SWQrKzs8L3NjcmlwdD4KKzxzY3JpcHQ+
Cit0cnkgeworICAgIGZ1bmN0aW9uIHRvRnV6ejIyKCkgeworICAgICAgICBmb3IgKHZhciBjb25m
ID0gbmV3IENvbmZpZ09iamVjdCh7CisgICAgICAgIH0pIGluIHN0cjEubG9jYWxlQ29tcGFyZSkg
eworICAgICAgICB9CisgICAgfQorICAgIHRvRnV6ejIyKCk7Cit9IGNhdGNoKGUpIHsKKyAgICBw
cmludFN0YWNrKGUuc3RhY2spOworfQorPC9zY3JpcHQ+CisKIDwhLS0gTm93IGRvIGl0IGFsbCBv
dmVyIHdpdGggYSBsb2FkZWQgc2NyaXB0IGZpbGUuIC0tPgogPHNjcmlwdD50ZXN0SWQgPSAwOzwv
c2NyaXB0PgogCTxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbGluZS1jb2x1bW4tbnVtYmVycy5q
cyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9saW5l
LWNvbHVtbi1udW1iZXJzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc2Ny
aXB0LXRlc3RzL2xpbmUtY29sdW1uLW51bWJlcnMuanMJKHJldmlzaW9uIDE1MzA3NCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2xpbmUtY29sdW1uLW51bWJlcnMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTEzNCw0ICsxMzQsMjkgQEAgdHJ5IHsKICAgICBwcmludFN0YWNrKGUu
c3RhY2spOwogfQogCisvLyBDYXNlIDIxOiBSZWdyZXNzaW9uIHRlc3QgZnJvbSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjYyCit0ZXN0SWQrKzsKK3RyeSB7Cisg
ICAgZnVuY3Rpb24gdG9GdXp6MjFiKCkgeworICAgICAgICBpZiAoUHJpb3JpdHlRdWV1ZS5wcm90
b3R5cGUuZG9Tb3J0KCkgaW5zdGFuY2VvZiAodGhpcyBePSBmdW5jdGlvbigpIHsKKyAgICAgICAg
fSkpIHJldHVybiAyOyAKKyAgICB9CisgICAgdG9GdXp6MjFiKCk7Cit9IGNhdGNoKGUpIHsKKyAg
ICBwcmludFN0YWNrKGUuc3RhY2spOworfQorCisvLyBDYXNlIDIyOiBSZWdyZXNzaW9uIHRlc3Qg
ZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjY0Cit0ZXN0
SWQrKzsKK3RyeSB7CisgICAgZnVuY3Rpb24gdG9GdXp6MjJiKCkgeworICAgICAgICBmb3IgKHZh
ciBjb25mID0gbmV3IENvbmZpZ09iamVjdCh7CisgICAgICAgIH0pIGluIHN0cjEubG9jYWxlQ29t
cGFyZSkgeworICAgICAgICB9CisgICAgfQorICAgIHRvRnV6ejIyYigpOworfSBjYXRjaChlKSB7
CisgICAgcHJpbnRTdGFjayhlLnN0YWNrKTsKK30KKwogc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207743</attachid>
            <date>2013-07-30 09:39:50 -0700</date>
            <delta_ts>2013-07-30 09:48:00 -0700</delta_ts>
            <desc>patch 6: updated (and tested) after the big merge.</desc>
            <filename>bug-118662d.patch</filename>
            <type>text/plain</type>
            <size>199676</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzNDczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNyBA
QAorMjAxMy0wNy0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Rml4IHByb2JsZW1zIHdpdGggZGl2b3QgYW5kIGxpbmVTdGFydCBtaXNtYXRjaGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjYyLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIxNTI0OTQgYWRkZWQg
dGhlIHJlY29yZGluZyBvZiBsaW5lU3RhcnQgdmFsdWVzIGZvciBkaXZvdCBwb3NpdGlvbnMuCisg
ICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgY29tcHV0YXRpb24gb2YgY29sdW1uIG51bWJl
cnMuIFNpbWlsYXJseSwgaXQgYWxzbworICAgICAgICBhZGRlZCB0aGUgcmVjb3JkaW5nIG9mIGxp
bmUgbnVtYmVycyBmb3IgdGhlIGRpdm90IHBvc2l0aW9ucy4gT25lIHByb2JsZW0KKyAgICAgICAg
d2l0aCB0aGUgYXBwcm9hY2ggdGFrZW4gd2FzIHRoYXQgdGhlIGxpbmUgYW5kIGxpbmVTdGFydCB2
YWx1ZXMgd2VyZQorICAgICAgICByZWNvcmRlZCBpbmRlcGVuZGVudGx5LCBhbmQgaGVuY2Ugd2Vy
ZSBub3QgYWx3YXlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICAgc2FtcGxlZCBhdCB0aGUgc2Ft
ZSBwbGFjZSB0aGF0IHRoZSBkaXZvdCBwb3NpdGlvbiBpcyByZWNvcmRlZC4gVGhpcworICAgICAg
ICByZXN1bHRlZCBpbiBwb3RlbnRpYWwgbWlzbWF0Y2hlcyB0aGF0IGNhdXNlIHNvbWUgYXNzZXJ0
aW9ucyB0byBmYWlsLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgYSBK
U1RleHRQb3NpdGlvbiBhYnN0cmFjdGlvbiB0aGF0IHJlY29yZHMKKyAgICAgICAgdGhlIGRpdm90
IHBvc2l0aW9uLCBsaW5lLCBhbmQgbGluZVN0YXJ0IGFzIGEgc2luZ2xlIHF1YW50aXR5LiBXaGVy
ZXZlcgorICAgICAgICB3ZSByZWNvcmQgdGhlIGRpdm90IHBvc2l0aW9uIGFzIGFuIHVuc2lnbmVk
IGludCBwcmV2aW91c2x5LCB3ZSBub3cgcmVjb3JkCisgICAgICAgIGl0cyBKU1RleHRQb3NpdGlv
biB3aGljaCBjYXB0dXJlcyBhbGwgMyB2YWx1ZXMgaW4gb25lIGdvLiBUaGlzIGVuc3VyZXMKKyAg
ICAgICAgdGhhdCB0aGUgY2FwdHVyZWQgbGluZSBhbmQgbGluZVN0YXJ0IHdpbGwgYWx3YXlzIG1h
dGNoIHRoZSBjYXB0dXJlZCBkaXZvdAorICAgICAgICBwb3NpdGlvbi4KKworICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxW
YXJhcmdzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayk6CisgICAg
ICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5l
U3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHByZXNzaW9uSW5m
byk6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5l
IGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OmVtaXRU
aHJvd1JlZmVyZW5jZUVycm9yKToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6TmV3RXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkV2YWxGdW5j
dGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAg
ICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9z
dGZpeE5vZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpEZWxldGVSZXNvbHZlTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OlByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6UHJlZml4Tm9k
ZTo6ZW1pdEJyYWNrZXQpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0RG90KToKKyAg
ICAgICAgKEpTQzo6VW5hcnlPcE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkJp
bmFyeU9wTm9kZTo6ZW1pdFN0cmNhdCk6CisgICAgICAgIChKU0M6OkJpbmFyeU9wTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlQmluYXJ5T3BOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6ZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KToKKyAgICAgICAgKEpTQzo6UmVh
ZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25S
ZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduRG90Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeURvdE5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6V2l0aE5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlRocm93Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgLSBVc2UgSlNUZXh0UG9zaXRpb24gaW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUg
YW5kIGxpbmVTdGFydCBleHBsaWNpdGx5LgorICAgICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6
CisgICAgICAgIC0gUmVwbGFjZWQgQVNUQnVpbGRlcjo6UG9zaXRpb25JbmZvIHdpdGggSlNUZXh0
UG9zaXRpb24uCisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OkJpbmFyeU9wSW5mbzo6QmluYXJ5
T3BJbmZvKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6QXNzaWdubWVudEluZm86OkFzc2ln
bm1lbnRJbmZvKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVzb2x2ZSk6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVSZWdFeHApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVOZXdF
eHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWduUmVzb2x2ZSk6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUV4cHJTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVSZXR1cm5TdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpj
cmVhdGVCcmVha1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUNv
bnRpbnVlU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlTGFiZWxT
dGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVXaXRoU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlVGhyb3dTdGF0ZW1lbnQpOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjphcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyk6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmFwcGVuZFVuYXJ5VG9rZW4pOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjp1bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjphc3NpZ25tZW50U3RhY2tBcHBlbmQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVBc3NpZ25tZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6c2V0RXhjZXB0
aW9uTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZSk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlQXNzaWduTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VQ
cmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZVBvc3RmaXhOb2RlKToK
KyAgICAgICAgLSBVc2UgSlNUZXh0UG9zaXRpb24gaW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUgYW5k
IGxpbmVTdGFydCBleHBsaWNpdGx5LgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6CisgICAg
ICAgIChKU0M6Ojo6bGV4KToKKyAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBjYXB0dXJpbmcg
dGhlIGFwcHJvcHJpYXRlIEpTVGV4dFBvc2l0aW9ucyBpbnN0ZWFkCisgICAgICAgICAgb2YganVz
dCB0aGUgY2hhcmFjdGVyIG9mZnNldC4KKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuaDoKKyAgICAg
ICAgKEpTQzo6TGV4ZXI6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6Ojo6bGV4RXhw
ZWN0SWRlbnRpZmllcik6CisgICAgICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgY2FwdHVyaW5nIHRo
ZSBhcHByb3ByaWF0ZSBKU1RleHRQb3NpdGlvbnMgaW5zdGVhZAorICAgICAgICAgIG9mIGp1c3Qg
dGhlIGNoYXJhY3RlciBvZmZzZXQuCisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aDoKKyAgICAgICAgKEpTQzo6Tm9kZTo6Tm9kZSk6CisgICAgICAgIChKU0M6OlJlc29sdmVOb2Rl
OjpSZXNvbHZlTm9kZSk6CisgICAgICAgIChKU0M6OkV2YWxGdW5jdGlvbkNhbGxOb2RlOjpFdmFs
RnVuY3Rpb25DYWxsTm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6
RnVuY3Rpb25DYWxsVmFsdWVOb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsUmVzb2x2
ZU5vZGU6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25D
YWxsQnJhY2tldE5vZGU6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25DYWxsRG90Tm9kZTo6RnVuY3Rpb25DYWxsRG90Tm9kZSk6CisgICAgICAgIChKU0M6
OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZSk6CisgICAg
ICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6QXBwbHlGdW5jdGlvbkNhbGxEb3RO
b2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OlBvc3RmaXhOb2RlKToKKyAgICAgICAg
KEpTQzo6RGVsZXRlUmVzb2x2ZU5vZGU6OkRlbGV0ZVJlc29sdmVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RGVsZXRlQnJhY2tldE5vZGU6OkRlbGV0ZUJyYWNrZXROb2RlKToKKyAgICAgICAgKEpTQzo6
RGVsZXRlRG90Tm9kZTo6RGVsZXRlRG90Tm9kZSk6CisgICAgICAgIChKU0M6OlByZWZpeE5vZGU6
OlByZWZpeE5vZGUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OlJlYWRN
b2RpZnlSZXNvbHZlTm9kZSk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6
UmVhZE1vZGlmeUJyYWNrZXROb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduQnJhY2tldE5vZGU6
OkFzc2lnbkJyYWNrZXROb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduRG90Tm9kZTo6QXNzaWdu
RG90Tm9kZSk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlEb3ROb2RlOjpSZWFkTW9kaWZ5RG90
Tm9kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkVycm9yTm9kZTo6QXNzaWduRXJyb3JOb2RlKToK
KyAgICAgICAgKEpTQzo6V2l0aE5vZGU6OldpdGhOb2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5O
b2RlOjpGb3JJbk5vZGUpOgorICAgICAgICAtIFVzZSBKU1RleHRQb3NpdGlvbiBpbnN0ZWFkIG9m
IHBhc3NpbmcgbGluZSBhbmQgbGluZVN0YXJ0IGV4cGxpY2l0bHkuCisgICAgICAgICogcGFyc2Vy
L05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhdGVtZW50Tm9kZTo6c2V0TG9jKToKKyAgICAg
ICAgLSBVc2UgSlNUZXh0UG9zaXRpb24gaW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUgYW5kIGxpbmVT
dGFydCBleHBsaWNpdGx5LgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlND
OjpOb2RlOjpsaW5lTm8pOgorICAgICAgICAoSlNDOjpOb2RlOjpzdGFydE9mZnNldCk6CisgICAg
ICAgIChKU0M6Ok5vZGU6OmxpbmVTdGFydE9mZnNldCk6CisgICAgICAgIChKU0M6Ok5vZGU6OnBv
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OlRocm93YWJs
ZUV4cHJlc3Npb25EYXRhKToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6
OnNldEV4Y2VwdGlvblNvdXJjZUNvZGUpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVFeHByZXNz
aW9uRGF0YTo6ZGl2b3QpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVFeHByZXNzaW9uRGF0YTo6
ZGl2b3RTdGFydCk6CisgICAgICAgIChKU0M6OlRocm93YWJsZUV4cHJlc3Npb25EYXRhOjpkaXZv
dEVuZCk6CisgICAgICAgIChKU0M6OlRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhOjpUaHJvd2Fi
bGVTdWJFeHByZXNzaW9uRGF0YSk6CisgICAgICAgIChKU0M6OlRocm93YWJsZVN1YkV4cHJlc3Np
b25EYXRhOjpzZXRTdWJleHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlRocm93YWJsZVN1
YkV4cHJlc3Npb25EYXRhOjpzdWJleHByZXNzaW9uRGl2b3QpOgorICAgICAgICAoSlNDOjpUaHJv
d2FibGVTdWJFeHByZXNzaW9uRGF0YTo6c3ViZXhwcmVzc2lvblN0YXJ0KToKKyAgICAgICAgKEpT
Qzo6VGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGE6OnN1YmV4cHJlc3Npb25FbmQpOgorICAgICAg
ICAoSlNDOjpUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25EYXRhOjpUaHJvd2FibGVQcmVm
aXhlZFN1YkV4cHJlc3Npb25EYXRhKToKKyAgICAgICAgKEpTQzo6VGhyb3dhYmxlUHJlZml4ZWRT
dWJFeHByZXNzaW9uRGF0YTo6c2V0U3ViZXhwcmVzc2lvbkluZm8pOgorICAgICAgICAoSlNDOjpU
aHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25EYXRhOjpzdWJleHByZXNzaW9uRGl2b3QpOgor
ICAgICAgICAoSlNDOjpUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25EYXRhOjpzdWJleHBy
ZXNzaW9uU3RhcnQpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Np
b25EYXRhOjpzdWJleHByZXNzaW9uRW5kKToKKyAgICAgICAgLSBVc2UgSlNUZXh0UG9zaXRpb24g
aW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUgYW5kIGxpbmVTdGFydCBleHBsaWNpdGx5LgorICAgICAg
ICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjo6OlBhcnNlcik6CisgICAgICAg
IChKU0M6Ojo6cGFyc2VJbm5lcik6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3Rl
YWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKEpT
Qzo6OjpkaWRGaW5pc2hQYXJzaW5nKToKKyAgICAgICAgLSBSZW1vdmUgc2V0dGluZyBvZiBtX2xh
c3RMaW5lIHZhbHVlLiBXZSBhbHdheXMgcGFzcyBpbiB0aGUgdmFsdWUgZnJvbQorICAgICAgICAg
IG1fbGFzdExpbmUgYW55d2F5LiBTbywgdGhpcyBhc3NpZ25tZW50IGlzIGVmZmVjdGl2ZWx5IGEg
bm9wLgorICAgICAgICAoSlNDOjo6OnBhcnNlVmFyRGVjbGFyYXRpb24pOgorICAgICAgICAoSlND
Ojo6OnBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZvclN0
YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VCcmVha1N0YXRlbWVudCk6CisgICAgICAg
IChKU0M6Ojo6cGFyc2VDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VS
ZXR1cm5TdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVGhyb3dTdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlV2l0aFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VUcnlTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQmxvY2tTdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6
OkxhYmVsSW5mbzo6TGFiZWxJbmZvKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUV4cHJlc3Npb25P
ckxhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUV4cHJlc3Npb25TdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlQmluYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Ojo6cGFyc2VQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6CisgICAg
ICAgIChKU0M6Ojo6cGFyc2VNZW1iZXJFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJz
ZVVuYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQg
b2YgcGFzc2luZyBsaW5lIGFuZCBsaW5lU3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJz
ZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlBhcnNlcjo6bmV4dCk6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6bmV4dEV4cGVjdElkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI6Omdl
dFRva2VuKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjp0b2tlblN0YXJ0UG9zaXRpb24pOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OnRva2VuRW5kUG9zaXRpb24pOgorICAgICAgICAoSlNDOjpQYXJz
ZXI6Omxhc3RUb2tlbkVuZFBvc2l0aW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZSk6CisgICAg
ICAgIC0gVXNlIEpTVGV4dFBvc2l0aW9uIGluc3RlYWQgb2YgcGFzc2luZyBsaW5lIGFuZCBsaW5l
U3RhcnQgZXhwbGljaXRseS4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyVG9rZW5zLmg6CisgICAg
ICAgIChKU0M6OkpTVGV4dFBvc2l0aW9uOjpKU1RleHRQb3NpdGlvbik6CisgICAgICAgIChKU0M6
OkpTVGV4dFBvc2l0aW9uOjpvcGVyYXRvcispOgorICAgICAgICAoSlNDOjpKU1RleHRQb3NpdGlv
bjo6b3BlcmF0b3ItKToKKyAgICAgICAgKEpTQzo6SlNUZXh0UG9zaXRpb246Om9wZXJhdG9yIGlu
dCk6CisgICAgICAgIC0gQWRkZWQgSlNUZXh0UG9zaXRpb24uCisgICAgICAgICogcGFyc2VyL1N5
bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFrZUZ1bmN0aW9u
Q2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjptYWtlQXNzaWduTm9kZSk6
CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6Om1ha2VQcmVmaXhOb2RlKToKKyAgICAgICAg
KEpTQzo6U3ludGF4Q2hlY2tlcjo6bWFrZVBvc3RmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6U3lu
dGF4Q2hlY2tlcjo6bWFrZURlbGV0ZU5vZGUpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpjcmVhdGVSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQnJh
Y2tldEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZURvdEFjY2Vz
cyk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVJlZ0V4cCk6CisgICAgICAg
IChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZU5ld0V4cHIpOgorICAgICAgICAoSlNDOjpTeW50
YXhDaGVja2VyOjpjcmVhdGVBc3NpZ25SZXNvbHZlKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hl
Y2tlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3Jl
YXRlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRl
QnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVDb250
aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVdpdGhT
dGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVMYWJlbFN0YXRl
bWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVRocm93U3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6YXBwZW5kQmluYXJ5RXhwcmVzc2lvbklu
Zm8pOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpvcGVyYXRvclN0YWNrUG9wKToKKyAg
ICAgICAgLSBVc2UgSlNUZXh0UG9zaXRpb24gaW5zdGVhZCBvZiBwYXNzaW5nIGxpbmUgYW5kIGxp
bmVTdGFydCBleHBsaWNpdGx5LgorCiAyMDEzLTA3LTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggbWFrZSBkaXN0
Y2hlY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTUzNDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NDYsOSArMTU0Niw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TmV3RnUKICAgICByZXR1cm4gcjA7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4
cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3Vt
ZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1
bmMsIEV4cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2Fs
bEFyZ3VtZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogewotICAg
IHJldHVybiBlbWl0Q2FsbChvcF9jYWxsLCBkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBsaW5lU3Rh
cnQpOworICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsLCBkc3QsIGZ1bmMsIGV4cGVjdGVkRnVu
Y3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiB9CiAK
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KCkKQEAg
LTE1NzksOSArMTU3OSw5IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFjdGl2YXRp
b24KICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXItPmluZGV4
KCkpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxFdmFsKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3Vt
ZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCkKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RFbmQpCiB7Ci0gICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGxfZXZhbCwg
ZHN0LCBmdW5jLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBsaW5lU3RhcnQpOworICAgIHJldHVybiBlbWl0Q2Fs
bChvcF9jYWxsX2V2YWwsIGRzdCwgZnVuYywgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogfQogCiBFeHBlY3RlZEZ1bmN0aW9u
IEJ5dGVjb2RlR2VuZXJhdG9yOjpleHBlY3RlZEZ1bmN0aW9uRm9ySWRlbnRpZmllcihjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQpAQCAtMTY1OSw3ICsxNjU5LDcgQEAgRXhwZWN0ZWRGdW5j
dGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdAogICAgIHJldHVybiBleHBlY3RlZEZ1bmN0aW9u
OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5j
dGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNp
Z25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5z
aWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRDYWxsKE9wY29kZUlEIG9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3Vt
ZW50cyYgY2FsbEFyZ3VtZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5k
KQogewogICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9jYWxsIHx8IG9wY29kZUlEID09IG9wX2Nh
bGxfZXZhbCk7CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNvdW50KCkpOwpAQCAtMTY4Miw3ICsxNjgy
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5wcm9maWxlSG9va1JlZ2lzdGVyKCkt
PmluZGV4KCkpOwogICAgIH0KIAotICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgbGluZVN0YXJ0KTsKKyAgICBlbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKIAogICAgIFJlZlB0cjxMYWJlbD4gZG9u
ZSA9IG5ld0xhYmVsKCk7CiAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IGVtaXRFeHBlY3RlZEZ1bmN0
aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRv
bmUuZ2V0KCkpOwpAQCAtMTcxNSw3ICsxNzE1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRDYWxsKAogICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywg
UmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb2ZpbGVIb29rUmVn
aXN0ZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpCitSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVu
dHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9maWxlSG9v
a1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiB7CiAgICAg
aWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgewogICAgICAgICBlbWl0TW92ZShwcm9maWxl
SG9va1JlZ2lzdGVyLCBmdW5jKTsKQEAgLTE3MjMsNyArMTcyMyw3IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFYKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHByb2ZpbGVIb29rUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIH0KICAgICAKLSAgICBlbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGxpbmVTdGFy
dCk7CisgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7
CiAKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3ZhcmFyZ3MpOwpAQCAtMTc3NCw3ICsxNzc0LDcg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAgIHJldHVybiBz
cmM7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3Rl
ZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwg
dW5zaWduZWQgbGluZVN0YXJ0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
b25zdHJ1Y3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0
aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKIHsKICAgICBBU1NFUlQoZnVuYy0+cmVm
Q291bnQoKSk7CiAKQEAgLTE3OTgsNyArMTc5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0Q29uc3QKICAgICBmb3IgKGludCBpID0gMDsgaSA8IEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlclNpemU7ICsraSkKICAgICAgICAgY2FsbEZyYW1lLmFwcGVuZChuZXdUZW1wb3Jh
cnkoKSk7CiAKLSAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgCiAgICAgUmVmUHRyPExhYmVsPiBkb25lID0gbmV3
TGFiZWwoKTsKICAgICBleHBlY3RlZEZ1bmN0aW9uID0gZW1pdEV4cGVjdGVkRnVuY3Rpb25Tbmlw
cGV0KGRzdCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZG9uZS5nZXQo
KSk7CkBAIC0xODc1LDcgKzE4NzUsOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVi
dWdIb29rKERlCiAgICAgaWYgKCFtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKQogICAgICAgICByZXR1
cm47CiAjZW5kaWYKLSAgICBlbWl0RXhwcmVzc2lvbkluZm8oY2hhck9mZnNldCwgMCwgMCwgZmly
c3RMaW5lLCBsaW5lU3RhcnQpOworICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90KGZpcnN0TGluZSwg
Y2hhck9mZnNldCwgbGluZVN0YXJ0KTsKKyAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIGRp
dm90LCBkaXZvdCk7CiAgICAgdW5zaWduZWQgY2hhclBvc2l0aW9uID0gY2hhck9mZnNldCAtIG1f
c2NvcGVOb2RlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwogICAgIGVtaXRPcGNvZGUob3BfZGVi
dWcpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkZWJ1Z0hvb2tJRCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiAxNTM0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NSwyNyArMjY1
LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbi0+ZW1pdEJ5dGVjb2RlSW5Db25k
aXRpb25Db250ZXh0KCp0aGlzLCB0cnVlVGFyZ2V0LCBmYWxzZVRhcmdldCwgZmFsbFRocm91Z2hN
b2RlKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZW1pdEV4cHJlc3Npb25JbmZvKGludCBk
aXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCBpbnQg
bGluZVN0YXJ0KQotICAgICAgICB7CisgICAgICAgIHZvaWQgZW1pdEV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKKyAgICAgICAgeyAgICAgICAgICAg
IAorICAgICAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdFN0YXJ0Lm9mZnNldCk7
CisgICAgICAgICAgICBBU1NFUlQoZGl2b3RFbmQub2Zmc2V0ID49IGRpdm90Lm9mZnNldCk7CisK
ICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQgPSBtX3Njb3BlTm9kZS0+c291cmNlKCkuc3Rh
cnRPZmZzZXQoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IG1fc2NvcGVOb2Rl
LT5zb3VyY2UoKS5maXJzdExpbmUoKTsKIAotICAgICAgICAgICAgQVNTRVJUKGRpdm90ID49IGxp
bmVTdGFydCk7Ci0gICAgICAgICAgICBBU1NFUlQoZGl2b3QgPj0gc291cmNlT2Zmc2V0KTsKLSAg
ICAgICAgICAgIGRpdm90IC09IHNvdXJjZU9mZnNldDsKKyAgICAgICAgICAgIGludCBkaXZvdE9m
ZnNldCA9IGRpdm90Lm9mZnNldCAtIHNvdXJjZU9mZnNldDsKKyAgICAgICAgICAgIGludCBzdGFy
dE9mZnNldCA9IGRpdm90Lm9mZnNldCAtIGRpdm90U3RhcnQub2Zmc2V0OworICAgICAgICAgICAg
aW50IGVuZE9mZnNldCA9IGRpdm90RW5kLm9mZnNldCAtIGRpdm90Lm9mZnNldDsKKworICAgICAg
ICAgICAgdW5zaWduZWQgbGluZSA9IGRpdm90LmxpbmU7CisgICAgICAgICAgICBBU1NFUlQobGlu
ZSA+PSBmaXJzdExpbmUpOworICAgICAgICAgICAgbGluZSAtPSBmaXJzdExpbmU7CiAKKyAgICAg
ICAgICAgIGludCBsaW5lU3RhcnQgPSBkaXZvdC5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgICAg
ICBpZiAobGluZVN0YXJ0ID4gc291cmNlT2Zmc2V0KQogICAgICAgICAgICAgICAgIGxpbmVTdGFy
dCAtPSBzb3VyY2VPZmZzZXQ7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbGlu
ZVN0YXJ0ID0gMDsKLQotICAgICAgICAgICAgQVNTRVJUKGxpbmUgPj0gZmlyc3RMaW5lKTsKLSAg
ICAgICAgICAgIGxpbmUgLT0gZmlyc3RMaW5lOworICAgICAgICAgICAgQVNTRVJUKGRpdm90T2Zm
c2V0ID49IGxpbmVTdGFydCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjb2x1bW4gPSBkaXZvdE9m
ZnNldCAtIGxpbmVTdGFydDsKIAogICAgICAgICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZz
ZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgICAgICAgICBBU1NFUlQoZGl2b3QgPj0g
bGluZVN0YXJ0KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvbHVtbiA9IGRpdm90IC0gbGluZVN0
YXJ0OwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZEV4cHJlc3Npb25JbmZvKGluc3RydWN0
aW9uT2Zmc2V0LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRFeHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9m
ZnNldCwgZGl2b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7
CiAgICAgICAgIH0KIAogICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbGVmdEhhbmRTaWRlTmVl
ZHNDb3B5KGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodElzUHVyZSkKQEAgLTM1
MSwxNSArMzU2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHZXR0
ZXJTZXR0ZXIoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJl
Z2lzdGVySUQqIGdldHRlciwgUmVnaXN0ZXJJRCogc2V0dGVyKTsKICAgICAgICAgCiAgICAgICAg
IEV4cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbkZvcklkZW50aWZpZXIoY29uc3QgSWRl
bnRpZmllciYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCB1bnNp
Z25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5z
aWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dENhbGxFdmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50
cyYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBS
ZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJ
RCogZmlyc3RGcmVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb2ZpbGVIb29rUmVnaXN0ZXIsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1
bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpOworICAgICAgICBSZWdpc3RlcklEKiBl
bWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rp
b24sIENhbGxBcmd1bWVudHMmLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQp
OworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90RW5kKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdp
c3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBSZWdpc3Rl
cklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZFZhcmFyZ3MoUmVnaXN0ZXJJRCog
YXJnQ291bnREc3QsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJncyk7
CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJldHVybihSZWdpc3RlcklEKiBzcmMpOwogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0RW5kKFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1pdFVu
YXJ5Tm9Ec3RPcChvcF9lbmQsIHNyYyk7IH0KIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29u
c3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlv
biwgQ2FsbEFyZ3VtZW50cyYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lU3RhcnQpOwor
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRTdHJj
YXQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMsIGludCBjb3VudCk7CiAgICAgICAg
IHZvaWQgZW1pdFRvUHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsK
IApAQCAtNDYyLDcgKzQ2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyAoaS5lLiAi
T2JqZWN0KCkiIGlzIGlkZW50aWNhbCB0byAibmV3IE9iamVjdCgpIikuCiAgICAgICAgIEV4cGVj
dGVkRnVuY3Rpb24gZW1pdEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0KFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIExhYmVs
KiBkb25lKTsKICAgICAgICAgCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsKE9wY29kZUlE
LCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENh
bGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgbGluZVN0YXJ0KTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogbmV3UmVn
aXN0ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTUzNDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw3ICs4Nyw3IEBAIHZvaWQgRXhwcmVzc2lvbk5vZGU6OmVtaXRCeXRlY29kZUluQ29uZGkK
IAogUmVnaXN0ZXJJRCogVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OmVtaXRUaHJvd1JlZmVyZW5j
ZUVycm9yKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3Rh
cnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFRocm93UmVmZXJlbmNlRXJyb3Io
bWVzc2FnZSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKIH0KQEAgLTE1
Miw4ICsxNTIsOCBAQCBSZWdpc3RlcklEKiBSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5CiAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGxv
Y2FsLmdldCgpKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgZGl2b3QgPSBtX3N0YXJ0T2Zm
c2V0ICsgbV9pZGVudC5sZW5ndGgoKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90LCBtX2lkZW50Lmxlbmd0aCgpLCAwLCBtX2Rpdm90TGluZSwgbV9kaXZvdExpbmVTdGFy
dCk7CisgICAgSlNUZXh0UG9zaXRpb24gZGl2b3QgPSBtX3N0YXJ0ICsgbV9pZGVudC5sZW5ndGgo
KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBtX3N0YXJ0LCBkaXZv
dCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZl
U2NvcGUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBtX2lkZW50KTsKICAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiB9CkBAIC0zMjUs
MTMgKzMyNSwxMyBAQCBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0CiAg
ICAgICAgICYmIGdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHN0YXRpY19jYXN0PFJl
c29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpKQogICAgICAgICAmJiAhZ2VuZXJhdG9y
LnN5bWJvbFRhYmxlKCkuc2xvd0FyZ3VtZW50cygpKSB7CiAgICAgICAgIFJlZ2lzdGVySUQqIHBy
b3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90
RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRBcmd1bWVudEJ5VmFsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZv
ckFyZ3VtZW50cygpLCBwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNj
cmlwdEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAg
IFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsK
LSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZz
ZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOwor
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBk
aXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7CiB9CiAKQEAgLTM0
NSwxMyArMzQ1LDEzIEBAIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2QK
ICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmVOb2RlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5v
ZGUqPihtX2Jhc2UpOwogICAgICAgICBpZiAoIWdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1l
bnRzKHJlc29sdmVOb2RlLT5pZGVudGlmaWVyKCkpKQogICAgICAgICAgICAgZ290byBub25Bcmd1
bWVudHNQYXRoOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCks
IGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90
TGluZVN0YXJ0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdEdldEFyZ3VtZW50c0xlbmd0aChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBn
ZW5lcmF0b3IudW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKSk7CiAgICAgfQogCiBub25B
cmd1bWVudHNQYXRoOgogICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9iYXNlKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90
U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0
YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UsIG1faWRlbnQpOwogfQogCkBAIC0z
NzUsNyArMzc1LDcgQEAgUmVnaXN0ZXJJRCogTmV3RXhwck5vZGU6OmVtaXRCeXRlY29kZShCeQog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVu
dHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0cnVj
dChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBk
aXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
Q29uc3RydWN0KHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogfQog
CiBpbmxpbmUgQ2FsbEFyZ3VtZW50czo6Q2FsbEFyZ3VtZW50cyhCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlKQpAQCAtNDEyLDE1ICs0MTIs
MTYgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRCeQogICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBj
YWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
b2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3Rh
cnQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVu
dHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogCiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgQ2Fs
bEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKLSAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBkaXZvdFN0YXJ0T2Zmc2V0KCkgKyA0LCA0
LCAwLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgSlNUZXh0UG9zaXRpb24g
bmV3RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyA0OworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwogICAgIGdlbmVyYXRvci5l
bWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci5w
cm9wZXJ0eU5hbWVzKCkuZXZhbCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVu
Yy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnByb3BlcnR5
TmFtZXMoKS5ldmFsLCBUaHJvd0lmTm90Rm91bmQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1
bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGRpdm90RW5k
T2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMu
Z2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVu
Y3Rpb25DYWxsVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTQzMSw3ICs0MzIsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRC
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVu
dHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rp
b24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRP
ZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRG
dW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbFJl
c29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ0NywxOCAr
NDQ4LDE4IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5k
ZWZpbmVkKCkpOwogICAgICAgICAvLyBUaGlzIHBhc3NlcyBOb0V4cGVjdGVkRnVuY3Rpb24gYmVj
YXVzZSB3ZSBleHBlY3QgdGhhdCBpZiB0aGUgZnVuY3Rpb24gaXMgaW4gYQogICAgICAgICAvLyBs
b2NhbCB2YXJpYWJsZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Ygb3VyIGJ1aWx0LWluIGNvbnN0cnVj
dG9ycy4KLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQo
KSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgp
LCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZv
dExpbmVTdGFydCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5W
YWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRz
LCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KIAogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKLSAgICBpbnQgaWRlbnRpZmllclN0YXJ0ID0gZGl2b3QoKSAtIGRpdm90U3Rh
cnRPZmZzZXQoKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oaWRlbnRpZmll
clN0YXJ0ICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCwgZGl2b3RMaW5l
KCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90ID0gZGl2
b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKICAgICBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsK
ICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2
b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIGV4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNh
bGxCcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00Njcs
MTIgKzQ2OCwxMiBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pCiB7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNl
KTsKICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNj
cmlwdCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2
b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQo
KSwgc3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHBy
ZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24u
Z2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJn
cyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGJhc2UuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUu
Z2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5l
KCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwocmV0
dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxEb3ROb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4Myw5ICs0ODQsOSBAQCBSZWdpc3RlcklE
KiBGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
dHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQo
KSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsK
ICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9i
YXNlKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZv
dCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgp
LCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkpOworICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJl
c3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0R2V0
QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVu
dCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RM
aW5lU3RhcnQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5n
ZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogQ2Fs
bEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC00OTMsNyArNDk0LDcgQEAgUmVnaXN0ZXJJRCog
Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgIFJlZlB0cjxMYWJlbD4gcmVhbENhbGwg
PSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBSZWZQdHI8TGFiZWw+IGVuZCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHBy
ZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCksIHN1YmV4cHJlc3Npb25F
bmRPZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCgp
KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgp
LCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1
bmN0aW9uLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChm
dW5jdGlvbi5nZXQoKSwgcmVhbENhbGwuZ2V0KCkpOwpAQCAtNTA1LDcgKzUwNiw3IEBAIFJlZ2lz
dGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgIENhbGxBcmd1bWVu
dHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xkTGlzdC0+bV9leHBy
KTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgcmVh
bEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRp
dm90TGluZVN0YXJ0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZh
bHVlLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgICAgICBtX2FyZ3MtPm1f
bGlzdE5vZGUgPSBvbGRMaXN0OwpAQCAtNTEzLDcgKzUxNCw3IEBAIFJlZ2lzdGVySUQqIENhbGxG
dW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
ZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQo
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgp
KTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgcmVh
bEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dEp1bXAoZW5kLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTUyMSw3ICs1MjIsNyBAQCBS
ZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgewogICAgICAgICBD
YWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rp
b24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5l
U3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwg
ZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRM
YWJlbChlbmQuZ2V0KCkpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZS5nZXQoKTsKQEAgLTU0Myw3
ICs1NDQsNyBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAg
UmVmUHRyPExhYmVsPiByZWFsQ2FsbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgIFJlZlB0
cjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKLSAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRP
ZmZzZXQoKSwgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBz
dWJleHByZXNzaW9uTGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNz
aW9uRW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci5l
bWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIG1f
aWRlbnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0
SnVtcElmTm90RnVuY3Rpb25BcHBseShmdW5jdGlvbi5nZXQoKSwgcmVhbENhbGwuZ2V0KCkpOwpA
QCAtNTU4LDIwICs1NTksMjAgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbQogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9u
ID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFz
ZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwotICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIHJl
YWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZv
dCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBk
aXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxs
KHJldHVyblZhbHVlLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlz
dE5vZGUgPSBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dDsKICAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAg
ICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgb2xkTGlzdC0+bV9leHByKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0
ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBk
aXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgcmVhbEZ1
bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG9sZExpc3Q7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5l
cmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgp
KTsKICAgICAgICAgICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9y
LCBtX2FyZ3MpOwogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0
KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIHJlYWxG
dW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQVNTRVJUKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1f
bGlzdE5vZGUtPm1fbmV4dCk7CkBAIC01OTIsNyArNTkzLDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlG
dW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICAgICAgd2hpbGUgKChhcmdzID0gYXJncy0+
bV9uZXh0KSkKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYXJncy0+bV9leHBy
KTsKIAotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJncyhyZXR1cm5WYWx1ZS5n
ZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIGFyZ3NSZWdpc3Rl
ci5nZXQoKSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9maWxlSG9va1JlZ2lzdGVyLmdl
dCgpLCBkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90
TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2Fs
bFZhcmFyZ3MocmV0dXJuVmFsdWUuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgdGhpc1JlZ2lz
dGVyLmdldCgpLCBhcmdzUmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
cHJvZmlsZUhvb2tSZWdpc3Rlci5nZXQoKSwgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICAgICAgfQogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsK
ICAgICB9CkBAIC02MDAsNyArNjAxLDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxE
b3ROb2RlOjplbQogICAgIHsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdl
bmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdENh
bGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZz
ZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVu
Y3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgfQogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKICAgICByZXR1cm4g
cmV0dXJuVmFsdWUuZ2V0KCk7CkBAIC02MzksNyArNjQwLDcgQEAgUmVnaXN0ZXJJRCogUG9zdGZp
eE5vZGU6OmVtaXRSZXNvbHZlKEJ5dAogICAgICAgICByZXR1cm4gZW1pdFBvc3RJbmNPckRlYyhn
ZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpLCBt
X29wZXJhdG9yKTsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCks
IGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
c2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIGlkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1p
dEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBpZGVu
dCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gb2xkVmFsdWUgPSBl
bWl0UG9zdEluY09yRGVjKGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOwpAQCAtNjYwLDEwICs2NjEsMTAgQEAgUmVnaXN0
ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KEJ5dAogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKGJhc2VOb2RlLCBicmFj
a2V0QWNjZXNzb3ItPnN1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzKCksIHN1YnNjcmlwdC0+aXNQdXJl
KGdlbmVyYXRvcikpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShzdWJzY3JpcHQpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhicmFja2V0QWNjZXNzb3ItPmRpdm90KCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RTdGFydE9m
ZnNldCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90RW5kT2Zmc2V0KCksIGJyYWNrZXRBY2Nlc3Nv
ci0+ZGl2b3RMaW5lKCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhicmFja2V0QWNjZXNzb3ItPmRpdm90KCksIGJy
YWNrZXRBY2Nlc3Nvci0+ZGl2b3RTdGFydCgpLCBicmFja2V0QWNjZXNzb3ItPmRpdm90RW5kKCkp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAg
ICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBlbWl0UG9zdEluY09yRGVjKGdlbmVyYXRvciwgZ2Vu
ZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7Ci0g
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0
KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0
eS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGlu
YXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVlKTsKIH0KQEAgLTY4MCwxMCArNjgxLDEwIEBAIFJl
Z2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2QKIAogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2VOb2RlKTsKIAotICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZG90QWNjZXNzb3ItPmRpdm90KCksIGRvdEFjY2Vzc29y
LT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGRvdEFjY2Vzc29yLT5kaXZvdEVuZE9mZnNldCgpLCBkb3RB
Y2Nlc3Nvci0+ZGl2b3RMaW5lKCksIGRvdEFjY2Vzc29yLT5kaXZvdExpbmVTdGFydCgpKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBkb3RB
Y2Nlc3Nvci0+ZGl2b3RTdGFydCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgaWRlbnQpOwogICAgIFJlZ2lzdGVySUQqIG9sZFZh
bHVlID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRvci50ZW1wRGVzdGluYXRp
b24oZHN0KSwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOwotICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgp
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVy
YXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCkpOwogICAgIHJl
dHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVlKTsK
IH0KQEAgLTcxMSw3ICs3MTIsNyBAQCBSZWdpc3RlcklEKiBEZWxldGVSZXNvbHZlTm9kZTo6ZW1p
dEJ5dGVjCiAgICAgaWYgKGdlbmVyYXRvci5sb2NhbChtX2lkZW50KS5nZXQoKSkKICAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCBmYWxzZSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGlu
ZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwg
bV9pZGVudCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsK
IH0KQEAgLTcyMyw3ICs3MjQsNyBAQCBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1p
dEJ5dGVjCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
YmFzZSk7CiAgICAgUmVnaXN0ZXJJRCogcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3Jp
cHQpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFy
dCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlWYWwo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIHIxKTsKIH0KIApAQCAt
NzMzLDcgKzczNCw3IEBAIFJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSgK
IHsKICAgICBSZWdpc3RlcklEKiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogCi0g
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0
KCksIGRpdm90RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMCwgbV9pZGVudCk7CiB9CiAKQEAgLTgwNSw3ICs4MDYs
NyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXRlCiAgICAgICAgIHJl
dHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGxvY2FsLmdldCgp
KTsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGlu
ZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBn
ZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCks
IGlkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdl
dEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBpZGVudCwg
VGhyb3dJZk5vdEZvdW5kKTsKICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB2YWx1ZS5nZXQo
KSwgbV9vcGVyYXRvcik7CkBAIC04MjQsMTAgKzgyNSwxMCBAQCBSZWdpc3RlcklEKiBQcmVmaXhO
b2RlOjplbWl0QnJhY2tldChCeXRlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0g
Z2VuZXJhdG9yLmVtaXROb2RlKHN1YnNjcmlwdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBy
b3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAKLSAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3QoKSwgYnJhY2tldEFjY2Vz
c29yLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGJyYWNrZXRBY2Nlc3Nvci0+ZGl2b3RFbmRPZmZzZXQo
KSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdExpbmUoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdExp
bmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGJyYWNrZXRBY2Nl
c3Nvci0+ZGl2b3QoKSwgYnJhY2tldEFjY2Vzc29yLT5kaXZvdFN0YXJ0KCksIGJyYWNrZXRBY2Nl
c3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5VmFsKHByb3BEc3QuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAg
ICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB2YWx1ZSwgbV9vcGVyYXRvcik7Ci0gICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90
RW5kT2Zmc2V0KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwg
dmFsdWUpOwogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHByb3BEc3QuZ2V0KCkpOwogfQpAQCAtODQyLDEwICs4NDMsMTAgQEAgUmVnaXN0ZXJJRCog
UHJlZml4Tm9kZTo6ZW1pdERvdChCeXRlY29kZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNl
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2VOb2RlKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKIAotICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZG90QWNjZXNzb3ItPmRpdm90KCksIGRvdEFjY2Vzc29yLT5k
aXZvdFN0YXJ0T2Zmc2V0KCksIGRvdEFjY2Vzc29yLT5kaXZvdEVuZE9mZnNldCgpLCBkb3RBY2Nl
c3Nvci0+ZGl2b3RMaW5lKCksIGRvdEFjY2Vzc29yLT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRvdEFjY2Vzc29yLT5kaXZvdCgpLCBkb3RBY2Nl
c3Nvci0+ZGl2b3RTdGFydCgpLCBkb3RBY2Nlc3Nvci0+ZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0
ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQocHJvcERzdC5nZXQoKSwgYmFzZS5n
ZXQoKSwgaWRlbnQpOwogICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIHZhbHVlLCBtX29wZXJh
dG9yKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3Rh
cnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwg
aWRlbnQsIHZhbHVlKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZO
ZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKIH0KQEAgLTg3MSw3ICs4NzIsNyBAQCBSZWdpc3Rl
cklEKiBQcmVmaXhOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0CiBSZWdpc3RlcklEKiBVbmFyeU9wTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKICAgICBSZWdpc3RlcklEKiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
KTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN0YXJ0T2Zmc2V0KCksIDAsIDAs
IGxpbmVObygpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhwb3NpdGlvbigpLCBwb3NpdGlvbigpLCBwb3NpdGlvbigpKTsKICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wY29kZUlEKCksIGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIHNyYyk7CiB9CiAKQEAgLTEwMDMsOCArMTAwNCw3IEBAIFJlZ2lzdGVySUQqIEJp
bmFyeU9wTm9kZTo6ZW1pdFN0cmNhdChCeXQKICAgICAvLyBDZXJ0YWluIHJlYWQtbW9kaWZ5IG5v
ZGVzIHJlcXVpcmUgZXhwcmVzc2lvbiBpbmZvIHRvIGJlIGVtaXR0ZWQgKmFmdGVyKiBtX3JpZ2h0
IGhhcyBiZWVuIGdlbmVyYXRlZC4KICAgICAvLyBJZiB0aGlzIGlzIHJlcXVpcmVkIHRoZSBub2Rl
IGlzIHBhc3NlZCBhcyAnZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUnOyBkbyBzbyBub3cuCiAgICAg
aWYgKGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lKQotICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdCgpLCBlbWl0RXhwcmVzc2lv
bkluZm9Gb3JNZS0+ZGl2b3RTdGFydE9mZnNldCgpLCBlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+
ZGl2b3RFbmRPZmZzZXQoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90TGluZSgpLCBl
bWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3RMaW5lU3RhcnQoKSk7Ci0KKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3Qo
KSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90U3RhcnQoKSwgZW1pdEV4cHJlc3Npb25J
bmZvRm9yTWUtPmRpdm90RW5kKCkpOwogICAgIC8vIElmIHRoZXJlIGlzIGFuIGFzc2lnbm1lbnQg
Y29udmVydCB0aGUgbGhzIG5vdy4gIFRoaXMgd2lsbCBhbHNvIGNvcHkgbGhzIHRvCiAgICAgLy8g
dGhlIHRlbXBvcmFyeSByZWdpc3RlciB3ZSBhbGxvY2F0ZWQgZm9yIGl0LgogICAgIGlmIChsaHMp
CkBAIC0xMDc2LDcgKzEwNzYsNyBAQCBSZWdpc3RlcklEKiBCaW5hcnlPcE5vZGU6OmVtaXRCeXRl
Y29kZShCCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSB0aGlzLT5vcGNvZGVJRCgpOwogCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX2FkZCAmJiBtX2V4cHIxLT5pc0FkZCgpICYmIG1fZXhwcjEtPnJl
c3VsdERlc2NyaXB0b3IoKS5kZWZpbml0ZWx5SXNTdHJpbmcoKSkgewotICAgICAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN0YXJ0T2Zmc2V0KCksIDAsIDAsIGxpbmVObygpLCBsaW5l
U3RhcnRPZmZzZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8ocG9z
aXRpb24oKSwgcG9zaXRpb24oKSwgcG9zaXRpb24oKSk7CiAgICAgICAgIHJldHVybiBlbWl0U3Ry
Y2F0KGdlbmVyYXRvciwgZHN0KTsKICAgICB9CiAKQEAgLTEwOTgsNyArMTA5OCw3IEBAIFJlZ2lz
dGVySUQqIEJpbmFyeU9wTm9kZTo6ZW1pdEJ5dGVjb2RlKEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShsZWZ0LCBtX3JpZ2h0
SGFzQXNzaWdubWVudHMsIHJpZ2h0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgYm9vbCB3YXNU
eXBlb2YgPSBnZW5lcmF0b3IubV9sYXN0T3Bjb2RlSUQgPT0gb3BfdHlwZW9mOwogICAgIFJlZ2lz
dGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUocmlnaHQpOwotICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oc3RhcnRPZmZzZXQoKSwgMCwgMCwgbGluZU5vKCksIGxpbmVTdGFy
dE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHBvc2l0aW9uKCks
IHBvc2l0aW9uKCksIHBvc2l0aW9uKCkpOwogICAgIGlmICh3YXNUeXBlb2YgJiYgKG9wY29kZUlE
ID09IG9wX25lcSB8fCBvcGNvZGVJRCA9PSBvcF9uc3RyaWN0ZXEpKSB7CiAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB0bXAgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAg
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXEpCkBAIC0xMTQ2LDcgKzExNDYsNyBAQCBSZWdpc3Rl
cklEKiBUaHJvd2FibGVCaW5hcnlPcE5vZGU6OmVtaXRCCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9leHByMSwgbV9y
aWdodEhhc0Fzc2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgUmVn
aXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyKTsKLSAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RF
bmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChvcGNvZGVJRCgpLCBnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyLCBPcGVy
YW5kVHlwZXMobV9leHByMS0+cmVzdWx0RGVzY3JpcHRvcigpLCBtX2V4cHIyLT5yZXN1bHREZXNj
cmlwdG9yKCkpKTsKIH0KIApAQCAtMTE1OCwxMyArMTE1OCwxMyBAQCBSZWdpc3RlcklEKiBJbnN0
YW5jZU9mTm9kZTo6ZW1pdEJ5dGVjb2RlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRzdFJlZyA9
IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSk7CiAgICAgUmVmUHRy
PExhYmVsPiB0YXJnZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9m
ZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAg
IGdlbmVyYXRvci5lbWl0Q2hlY2tIYXNJbnN0YW5jZShkc3RSZWcuZ2V0KCksIHNyYzEuZ2V0KCks
IHNyYzIuZ2V0KCksIHRhcmdldC5nZXQoKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2
b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3Iu
ZW1pdEdldEJ5SWQocHJvdG90eXBlLmdldCgpLCBzcmMyLmdldCgpLCBnZW5lcmF0b3Iudm0oKS0+
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZv
dExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lzdGVySUQq
IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SW5zdGFuY2VPZihkc3RSZWcuZ2V0KCksIHNyYzEuZ2V0
KCksIHByb3RvdHlwZS5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0YXJnZXQuZ2V0
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMjc1LDggKzEyNzUsNyBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBSZWdpc3RlcklEKiBlbWl0UmVhCiAgICAgLy8gQ2VydGFpbiByZWFkLW1vZGlm
eSBub2RlcyByZXF1aXJlIGV4cHJlc3Npb24gaW5mbyB0byBiZSBlbWl0dGVkICphZnRlciogbV9y
aWdodCBoYXMgYmVlbiBnZW5lcmF0ZWQuCiAgICAgLy8gSWYgdGhpcyBpcyByZXF1aXJlZCB0aGUg
bm9kZSBpcyBwYXNzZWQgYXMgJ2VtaXRFeHByZXNzaW9uSW5mb0Zvck1lJzsgZG8gc28gbm93Lgog
ICAgIGlmIChlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZSkKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhlbWl0RXhwcmVzc2lvbkluZm9Gb3JNZS0+ZGl2b3QoKSwgZW1pdEV4cHJl
c3Npb25JbmZvRm9yTWUtPmRpdm90U3RhcnRPZmZzZXQoKSwgZW1pdEV4cHJlc3Npb25JbmZvRm9y
TWUtPmRpdm90RW5kT2Zmc2V0KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdExpbmUo
KSwgZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRpdm90TGluZVN0YXJ0KCkpOwotCisgICAgICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZW1pdEV4cHJlc3Npb25JbmZvRm9yTWUtPmRp
dm90KCksIGVtaXRFeHByZXNzaW9uSW5mb0Zvck1lLT5kaXZvdFN0YXJ0KCksIGVtaXRFeHByZXNz
aW9uSW5mb0Zvck1lLT5kaXZvdEVuZCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5h
cnlPcChvcGNvZGVJRCwgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CiB9CiAKQEAgLTEzMDAsNyAr
MTI5OSw4IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKICAgICAg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0
KTsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBk
aXZvdFN0YXJ0T2Zmc2V0KCkgKyBtX2lkZW50Lmxlbmd0aCgpLCBtX2lkZW50Lmxlbmd0aCgpLCAw
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgSlNUZXh0UG9zaXRpb24gbmV3
RGl2b3QgPSBkaXZvdFN0YXJ0KCkgKyBtX2lkZW50Lmxlbmd0aCgpOworICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgbV9pZGVudCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwg
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdldCgp
LCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5
cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSwgdGhpcyk7CkBAIC0xMzIwLDExICsx
MzIwLDEzIEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWMKICAgICAg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0
KTsKICAgICB9CiAKKyAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNv
bHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBtX2lkZW50KTsKICAgICBpZiAoZHN0
ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgIGRzdCA9IDA7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQp
OwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9m
ZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7
CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUu
Z2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8g
VGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogfQogCkBAIC0xMzM1LDcg
KzEzMzcsNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25Eb3ROb2RlOjplbWl0Qnl0ZWNvZGUoCiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNp
ZGUobV9iYXNlLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0
b3IpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZGVzdGluYXRp
b25Gb3JBc3NpZ25SZXN1bHQoZHN0KTsKICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0
b3IuZW1pdE5vZGUodmFsdWUuZ2V0KCksIG1fcmlnaHQpOwotICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgp
LCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lz
dGVySUQqIGZvcndhcmRSZXN1bHQgPSAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkp
ID8gcmVzdWx0IDogZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihyZXN1bHQpLCByZXN1bHQpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0
QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCBmb3J3YXJkUmVzdWx0KTsKICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBmb3J3YXJkUmVzdWx0KTsKQEAg
LTEzNDcsMTEgKzEzNDksMTEgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeURvdE5vZGU6OmVtaXRC
eXRlYwogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2Rl
Rm9yTGVmdEhhbmRTaWRlKG1fYmFzZSwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5p
c1B1cmUoZ2VuZXJhdG9yKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1
YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSwgc3ViZXhwcmVz
c2lvbkVuZE9mZnNldCgpLCBzdWJleHByZXNzaW9uTGluZSgpLCBzdWJleHByZXNzaW9uTGluZVN0
YXJ0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRp
dm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwogICAgIFJlZ2lzdGVy
SUQqIHVwZGF0ZWRWYWx1ZSA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1ZS5nZXQoKSwg
bV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBl
KCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0
KCksIGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB1cGRhdGVkVmFs
dWUpOwogfQogCkBAIC0xMzcxLDcgKzEzNzMsNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25CcmFja2V0
Tm9kZTo6ZW1pdEJ5dGVjCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9y
LmRlc3RpbmF0aW9uRm9yQXNzaWduUmVzdWx0KGRzdCk7CiAgICAgUmVnaXN0ZXJJRCogcmVzdWx0
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKHZhbHVlLmdldCgpLCBtX3JpZ2h0KTsKIAotICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9mZnNldCgpLCBkaXZv
dEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIFJlZ2lzdGVySUQqIGZvcndhcmRSZXN1bHQgPSAoZHN0ID09IGdlbmVyYXRvci5pZ25v
cmVkUmVzdWx0KCkpID8gcmVzdWx0IDogZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVk
ZWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihyZXN1bHQpLCByZXN1bHQpOwogICAgIGdlbmVy
YXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCksIGZvcndhcmRSZXN1
bHQpOwogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3Qs
IGZvcndhcmRSZXN1bHQpOwpAQCAtMTM4NCwxMSArMTM4NiwxMSBAQCBSZWdpc3RlcklEKiBSZWFk
TW9kaWZ5QnJhY2tldE5vZGU6OmVtaXRCCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBn
ZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLCBtX3N1YnNjcmlwdEhhc0Fz
c2lnbm1lbnRzIHx8IG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShn
ZW5lcmF0b3IpICYmIG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9z
dWJzY3JpcHQsIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRv
cikpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2
b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0KCksIHN1YmV4cHJlc3Npb25FbmRPZmZzZXQo
KSwgc3ViZXhwcmVzc2lvbkxpbmUoKSwgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCgpKTsKKyAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHBy
ZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRp
b24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIHVw
ZGF0ZWRWYWx1ZSA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1ZS5nZXQoKSwgbV9yaWdo
dCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1f
cmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCksIGRp
dm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdXBkYXRlZFZhbHVlKTsK
IAogICAgIHJldHVybiB1cGRhdGVkVmFsdWU7CkBAIC0xNjk1LDggKzE2OTcsMTAgQEAgdm9pZCBG
b3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbgogICAgICAgICBpZiAoIXByb3BlcnR5
TmFtZSkgewogICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5h
bWU7CisgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlID0gZ2VuZXJhdG9y
LmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBpZGVudCk7Ci0gICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnRP
ZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCksIGRpdm90TGluZVN0YXJ0KCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Nj
b3BlKHNjb3BlLCBpZGVudCwgcHJvcGVydHlOYW1lLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkg
PyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBleHBlY3RlZFN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0TW92ZShn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzEwLDcgKzE3MTQs
NyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwogICAgICAgICBSZWdpc3Rl
cklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2UoKSk7CiAKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5kaXZvdCgpLCBh
c3NpZ25Ob2RlLT5kaXZvdFN0YXJ0T2Zmc2V0KCksIGFzc2lnbk5vZGUtPmRpdm90RW5kT2Zmc2V0
KCksIGFzc2lnbk5vZGUtPmRpdm90TGluZSgpLCBhc3NpZ25Ob2RlLT5kaXZvdExpbmVTdGFydCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5kaXZv
dCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90RW5kKCkpOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHByb3BlcnR5TmFtZSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fbGV4cHItPmlzQnJhY2tldEFjY2Vzc29y
Tm9kZSgpKTsKQEAgLTE3MjAsNyArMTcyNCw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW4KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+YmFzZSgpKTsKICAgICAgICAgUmVnaXN0ZXJJRCogc3Vi
c2NyaXB0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPnN1YnNjcmlwdCgpKTsKICAg
ICAgICAgCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYXNzaWduTm9kZS0+
ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydE9mZnNldCgpLCBhc3NpZ25Ob2RlLT5kaXZv
dEVuZE9mZnNldCgpLCBhc3NpZ25Ob2RlLT5kaXZvdExpbmUoKSwgYXNzaWduTm9kZS0+ZGl2b3RM
aW5lU3RhcnQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYXNzaWdu
Tm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgpLCBhc3NpZ25Ob2RlLT5kaXZv
dEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBzdWJz
Y3JpcHQsIHByb3BlcnR5TmFtZSk7CiAgICAgfSAgIAogCkBAIC0xODE2LDcgKzE4MjAsNyBAQCB2
b2lkIFdpdGhOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lCiAgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgp
LCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fZXhwcmVzc2lvbkxlbmd0aCwgMCwgbV9kaXZv
dExpbmUsIG1fZGl2b3RMaW5lU3RhcnQpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8obV9kaXZvdCwgbV9kaXZvdCAtIG1fZXhwcmVzc2lvbkxlbmd0aCwgbV9kaXZvdCk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRQdXNoV2l0aFNjb3BlKHNjb3BlLmdldCgpKTsKICAgICBnZW5lcmF0b3Iu
ZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZSgp
OwpAQCAtMjAyMCw3ICsyMDI0LDcgQEAgdm9pZCBUaHJvd05vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbgogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAg
ICAgZHN0ID0gMDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhwciA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2V4cHIpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwg
ZGl2b3RTdGFydE9mZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RM
aW5lU3RhcnQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0VGhyb3coZXhwci5n
ZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRl
ci5oCShyZXZpc2lvbiAxNTM0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjAgKzMzLDEyIEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQVNUQnVpbGRlciB7Ci0gICAgc3RydWN0IFBvc2l0aW9uSW5mbyB7Ci0g
ICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zOwotICAgICAgICB1bnNpZ25lZCBsaW5lOwotICAgICAg
ICB1bnNpZ25lZCBsaW5lU3RhcnRQb3M7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBCaW5hcnlPcElu
Zm8gewogICAgICAgICBCaW5hcnlPcEluZm8oKSB7fQotICAgICAgICBCaW5hcnlPcEluZm8oaW50
IG90aGVyU3RhcnQsIGludCBvdGhlckRpdm90LCBpbnQgb3RoZXJFbmQsIHVuc2lnbmVkIG90aGVy
RGl2b3RMaW5lLCB1bnNpZ25lZCBvdGhlckRpdm90TGluZVN0YXJ0LCBib29sIHJoc0hhc0Fzc2ln
bm1lbnQpCisgICAgICAgIEJpbmFyeU9wSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgb3RoZXJT
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIG90aGVyRGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBvdGhlckVuZCwgYm9vbCByaHNIYXNBc3NpZ25tZW50KQogICAgICAgICAgICAgOiBzdGFy
dChvdGhlclN0YXJ0KQogICAgICAgICAgICAgLCBkaXZvdChvdGhlckRpdm90KQogICAgICAgICAg
ICAgLCBlbmQob3RoZXJFbmQpCi0gICAgICAgICAgICAsIGRpdm90TGluZShvdGhlckRpdm90TGlu
ZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQob3RoZXJEaXZvdExpbmVTdGFydCkKICAg
ICAgICAgICAgICwgaGFzQXNzaWdubWVudChyaHNIYXNBc3NpZ25tZW50KQogICAgICAgICB7CiAg
ICAgICAgIH0KQEAgLTU0LDM5ICs0NiwzMSBAQCBjbGFzcyBBU1RCdWlsZGVyIHsKICAgICAgICAg
ICAgIDogc3RhcnQobGhzLnN0YXJ0KQogICAgICAgICAgICAgLCBkaXZvdChyaHMuc3RhcnQpCiAg
ICAgICAgICAgICAsIGVuZChyaHMuZW5kKQotICAgICAgICAgICAgLCBkaXZvdExpbmUocmhzLmRp
dm90TGluZSkKLSAgICAgICAgICAgICwgZGl2b3RMaW5lU3RhcnQocmhzLmRpdm90TGluZVN0YXJ0
KQogICAgICAgICAgICAgLCBoYXNBc3NpZ25tZW50KGxocy5oYXNBc3NpZ25tZW50IHx8IHJocy5o
YXNBc3NpZ25tZW50KQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgaW50IHN0YXJ0Owot
ICAgICAgICBpbnQgZGl2b3Q7Ci0gICAgICAgIGludCBlbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGRp
dm90TGluZTsKLSAgICAgICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQ7CisgICAgICAgIEpTVGV4
dFBvc2l0aW9uIHN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBkaXZvdDsKKyAgICAgICAg
SlNUZXh0UG9zaXRpb24gZW5kOwogICAgICAgICBib29sIGhhc0Fzc2lnbm1lbnQ7CiAgICAgfTsK
ICAgICAKICAgICAKICAgICBzdHJ1Y3QgQXNzaWdubWVudEluZm8gewogICAgICAgICBBc3NpZ25t
ZW50SW5mbygpIHt9Ci0gICAgICAgIEFzc2lnbm1lbnRJbmZvKEV4cHJlc3Npb25Ob2RlKiBub2Rl
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQsIGludCBpbml0QXNzaWdubWVudHMsIE9wZXJhdG9yIG9wKQor
ICAgICAgICBBc3NpZ25tZW50SW5mbyhFeHByZXNzaW9uTm9kZSogbm9kZSwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGludCBpbml0QXNz
aWdubWVudHMsIE9wZXJhdG9yIG9wKQogICAgICAgICAgICAgOiBtX25vZGUobm9kZSkKICAgICAg
ICAgICAgICwgbV9zdGFydChzdGFydCkKICAgICAgICAgICAgICwgbV9kaXZvdChkaXZvdCkKLSAg
ICAgICAgICAgICwgbV9kaXZvdExpbmUoZGl2b3RMaW5lKQotICAgICAgICAgICAgLCBtX2Rpdm90
TGluZVN0YXJ0KGRpdm90TGluZVN0YXJ0KQogICAgICAgICAgICAgLCBtX2luaXRBc3NpZ25tZW50
cyhpbml0QXNzaWdubWVudHMpCiAgICAgICAgICAgICAsIG1fb3Aob3ApCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2Rpdm90ID49IG1fZGl2b3RMaW5lU3RhcnQpOwotICAgICAgICAg
ICAgQVNTRVJUKG1fc3RhcnQgPj0gbV9kaXZvdExpbmVTdGFydCk7CisgICAgICAgICAgICBBU1NF
UlQobV9kaXZvdC5vZmZzZXQgPj0gbV9kaXZvdC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICAg
ICAgQVNTRVJUKG1fc3RhcnQub2Zmc2V0ID49IG1fc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAg
ICAgICAgfQogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9ub2RlOwotICAgICAgICB1bnNpZ25l
ZCBtX3N0YXJ0OwotICAgICAgICB1bnNpZ25lZCBtX2Rpdm90OwotICAgICAgICB1bnNpZ25lZCBt
X2Rpdm90TGluZTsKLSAgICAgICAgdW5zaWduZWQgbV9kaXZvdExpbmVTdGFydDsKKyAgICAgICAg
SlNUZXh0UG9zaXRpb24gbV9zdGFydDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdDsK
ICAgICAgICAgaW50IG1faW5pdEFzc2lnbm1lbnRzOwogICAgICAgICBPcGVyYXRvciBtX29wOwog
ICAgIH07CkBAIC0xMzEsNyArMTE1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBpbnQg
IERvbnRCdWlsZFN0cmluZ3MgPSAwOwogCiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaW5hcnlO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCB0b2tlbiwgc3RkOjpwYWlyPEV4cHJlc3Np
b25Ob2RlKiwgQmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5
T3BJbmZvPik7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBh
cmdzLCBpbnQgc3RhcnQsIHVuc2lnbmVkIGRpdm90LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICBFeHByZXNzaW9uTm9kZSogbWFrZUZ1
bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGZ1
bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCk7CiAKICAgICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygp
IHsgcmV0dXJuIG5ldyAobV92bSkgSlNDOjpTb3VyY2VFbGVtZW50cygpOyB9CiAKQEAgLTE0NCwx
MSArMTI4LDExIEBAIHB1YmxpYzoKIAogICAgIENvbW1hTm9kZSogY3JlYXRlQ29tbWFFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJl
c3Npb25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV92bSkgQ29tbWFOb2RlKGxvY2F0aW9uLCBs
aHMsIHJocyk7IH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Np
b25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3Np
Z25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGlu
ZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOwotICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUHJl
Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9y
LCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNp
Z25lZCBkaXZvdExpbmVTdGFydCk7Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VQb3N0Zml4Tm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCBpbnQg
c3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBk
aXZvdExpbmVTdGFydCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25Ob2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBPcGVyYXRvciwgRXhwcmVz
c2lvbk5vZGUqIHJpZ2h0LCBib29sIGxlZnRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CisgICAgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2Rl
KiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKKyAgICBFeHByZXNzaW9u
Tm9kZSogbWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKICAgICBFeHByZXNz
aW9uTm9kZSogbWFrZVR5cGVPZk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
bk5vZGUqKTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZURlbGV0ZU5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVu
ZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7IAorICAgIEV4
cHJlc3Npb25Ob2RlKiBtYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKICAgICBFeHByZXNzaW9u
Tm9kZSogbWFrZU5lZ2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5v
ZGUqKTsKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdHdpc2VOb3ROb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKik7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VN
dWx0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgRXhw
cmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwpAQCAtMTgxLDEx
ICsxNjUsMTEgQEAgcHVibGljOgogICAgICAgICB1c2VzVGhpcygpOwogICAgICAgICByZXR1cm4g
bmV3IChtX3ZtKSBUaGlzTm9kZShsb2NhdGlvbik7CiAgICAgfQotICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNp
Z25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlUmVzb2x2ZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYgKG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCiAgICAgICAgICAgICB1c2VzQXJndW1l
bnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFJlc29sdmVOb2RlKGxvY2F0aW9uLCAq
aWRlbnQsIHN0YXJ0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJu
IG5ldyAobV92bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sICppZGVudCwgc3RhcnQpOwogICAgIH0K
ICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uKSB7IHJldHVybiBuZXcgKG1fdm0pIE9iamVjdExpdGVyYWxOb2RlKGxv
Y2F0aW9uKTsgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5TGlzdE5vZGUqIHByb3BlcnRpZXMp
IHsgcmV0dXJuIG5ldyAobV92bSkgT2JqZWN0TGl0ZXJhbE5vZGUobG9jYXRpb24sIHByb3BlcnRp
ZXMpOyB9CkBAIC0yMjgsNDEgKzIxMiw0MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBuZXcg
KG1fdm0pIE51bGxOb2RlKGxvY2F0aW9uKTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSog
Y3JlYXRlQnJhY2tldEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5LCBib29sIHByb3BlcnR5
SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNpZ25lZCBk
aXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogcHJvcGVydHksIGJvb2wgcHJvcGVydHlI
YXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAg
ICBCcmFja2V0QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBCcmFja2V0QWNjZXNzb3JO
b2RlKGxvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlIYXNBc3NpZ25tZW50cyk7Ci0g
ICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAg
ICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG90QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0
eSwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZURvdEFjY2Vz
cyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwg
Y29uc3QgSWRlbnRpZmllciogcHJvcGVydHksIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQog
ICAgIHsKICAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBEb3RBY2Nl
c3Nvck5vZGUobG9jYXRpb24sIGJhc2UsICpwcm9wZXJ0eSk7Ci0gICAgICAgIHNldEV4Y2VwdGlv
bkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0
YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBl
bmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSog
Y3JlYXRlUmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50
aWZpZXImIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXImIGZsYWdzLCBpbnQgc3RhcnQsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZVJlZ0V4cChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJ
ZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncywgY29uc3QgSlNUZXh0
UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYgKFlhcnI6OmNoZWNrU3ludGF4KHBh
dHRlcm4uc3RyaW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIFJlZ0V4cE5v
ZGUqIG5vZGUgPSBuZXcgKG1fdm0pIFJlZ0V4cE5vZGUobG9jYXRpb24sIHBhdHRlcm4sIGZsYWdz
KTsKICAgICAgICAgaW50IHNpemUgPSBwYXR0ZXJuLmxlbmd0aCgpICsgMjsgLy8gKyAyIGZvciB0
aGUgdHdvIC8ncwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgc3Rh
cnQgKyBzaXplLCBzdGFydCArIHNpemUsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAg
ICAgICBKU1RleHRQb3NpdGlvbiBlbmQgPSBzdGFydCArIHNpemU7CisgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAgIHJldHVybiBub2Rl
OwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2Rl
KiBhcmd1bWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZv
dExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZW5kKQogICAgIHsKICAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIE5ld0V4
cHJOb2RlKGxvY2F0aW9uLCBleHByLCBhcmd1bWVudHMpOwotICAgICAgICBzZXRFeGNlcHRpb25M
b2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFy
dCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5k
KTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25l
ZCBkaXZvdExpbmVTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3RXhwcihjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogICAgIHsK
ICAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIE5ld0V4cHJOb2RlKGxvY2F0
aW9uLCBleHByKTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGVu
ZCwgZW5kLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9u
TG9jYXRpb24obm9kZSwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgfQogCkBAIC0yNzEsMTIgKzI1NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBuZXcg
KG1fdm0pIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBsaHMsIHJocyk7CiAg
ICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Np
b25Ob2RlKiByaHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCB1bnNpZ25lZCBkaXZv
dExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmhzLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKICAgICB7CiAgICAgICAgIGlmIChyaHMtPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihyaHMpLT5ib2R5KCktPnNldEluZmVy
cmVkTmFtZShpZGVudCk7CiAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBub2RlID0gbmV3ICht
X3ZtKSBBc3NpZ25SZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIHJocyk7Ci0gICAgICAgIHNl
dEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kLCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQs
IGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKQEAgLTM1NSwxMCAr
MzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0KIAotICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZUV4cHJTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVuZCkKKyAgICBT
dGF0ZW1lbnROb2RlKiBjcmVhdGVFeHByU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3Rh
cnQsIGludCBlbmQpCiAgICAgewogICAgICAgICBFeHByU3RhdGVtZW50Tm9kZSogcmVzdWx0ID0g
bmV3IChtX3ZtKSBFeHByU3RhdGVtZW50Tm9kZShsb2NhdGlvbiwgZXhwcik7Ci0gICAgICAgIHJl
c3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5s
aW5lU3RhcnRPZmZzZXQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5lLCBlbmQs
IHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKQEAgLTM3NiwxOSArMzYxLDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JJbkxvb3Ao
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQs
IEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRl
bWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCBpbnQg
aW5pdFN0YXJ0LCBpbnQgaW5pdEVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIHVuc2ln
bmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIsIEV4cHJlc3Np
b25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGVuZCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGluaXRFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAg
ICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZShtX3ZtLCBsb2Nh
dGlvbiwgKmlkZW50LCBpbml0aWFsaXplciwgaXRlciwgc3RhdGVtZW50cywgaW5pdFN0YXJ0LCBp
bml0U3RhcnQgLSBzdGFydCwgaW5pdEVuZCAtIGluaXRTdGFydCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCk7CisgICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBGb3JJbk5v
ZGUobV92bSwgbG9jYXRpb24sICppZGVudCwgaW5pdGlhbGl6ZXIsIGl0ZXIsIHN0YXRlbWVudHMs
IGluaXRTdGFydCwgc3RhcnQsIGluaXRFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFy
dExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRP
ZmZzZXQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBkaXZv
dCArIDEsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGRpdm90ICsgMSwgZW5kKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JJbkxvb3Ao
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxocywgRXhw
cmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBlU3RhcnQs
IGludCBlRGl2b3QsIGludCBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRl
Rm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZURpdm90
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsK
ICAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZShsb2NhdGlv
biwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQs
IGVuZCwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7Ci0g
ICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRGl2b3QsIGVFbmQs
IGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlv
bihyZXN1bHQsIGVTdGFydCwgZURpdm90LCBlRW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKQEAgLTQwNSw0MyArMzkwLDQzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Np
b24sIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb24sIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIFJldHVybk5vZGUq
IHJlc3VsdCA9IG5ldyAobV92bSkgUmV0dXJuTm9kZShsb2NhdGlvbiwgZXhwcmVzc2lvbik7Ci0g
ICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kLCBk
aXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRM
aW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zm
c2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBl
bmQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5lLCBlbmQubGluZSwgc3RhcnQu
b2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRM
aW5lLCBpbnQgZW5kTGluZSwgdW5zaWduZWQgZW5kTGluZVN0YXJ0KQorICAgIFN0YXRlbWVudE5v
ZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkK
ICAgICB7CiAgICAgICAgIEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBCcmVha05vZGUo
bV92bSwgbG9jYXRpb24pOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIGVT
dGFydCwgZUVuZCwgZUVuZCwgZW5kTGluZSwgZW5kTGluZVN0YXJ0KTsKLSAgICAgICAgcmVzdWx0
LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRp
b24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0
LCBzdGFydCwgZW5kLCBlbmQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5lLCBl
bmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3Rh
dGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUs
IHVuc2lnbmVkIGVuZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCcmVha1N0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZW5kKQogICAgIHsKICAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEJy
ZWFrTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKLSAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24o
cmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQsIGVuZExpbmUsIGVuZExpbmVTdGFydCk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZz
ZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVDb250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBpbnQg
ZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIHVuc2lnbmVkIGVu
ZExpbmVTdGFydCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBDb250aW51ZU5v
ZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQ29udGludWVOb2RlKG1fdm0sIGxvY2F0aW9uKTsKLSAg
ICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQsIGVu
ZExpbmUsIGVuZExpbmVTdGFydCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwg
ZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7
CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0Lm9mZnNl
dCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDb250aW51ZVN0YXRlbWVudChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IGVTdGFy
dCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25lZCBlbmRMaW5l
U3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7
CiAgICAgICAgIENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBDb250aW51ZU5vZGUo
bG9jYXRpb24sICppZGVudCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwg
ZVN0YXJ0LCBlRW5kLCBlRW5kLCBlbmRMaW5lLCBlbmRMaW5lU3RhcnQpOwotICAgICAgICByZXN1
bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2Nh
dGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1
bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LmxpbmUs
IGVuZC5saW5lLCBzdGFydC5vZmZzZXQsIHN0YXJ0LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00NzYsMjYgKzQ2MSwyNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRl
TGFiZWxTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRl
bnRpZmllciogaWRlbnQsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFy
dCkKKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVMYWJlbFN0YXRlbWVudChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgU3RhdGVtZW50Tm9k
ZSogc3RhdGVtZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBlbmQpCiAgICAgewogICAgICAgICBMYWJlbE5vZGUqIHJlc3VsdCA9IG5ldyAobV92
bSkgTGFiZWxOb2RlKGxvY2F0aW9uLCAqaWRlbnQsIHN0YXRlbWVudCk7Ci0gICAgICAgIHNldEV4
Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kLCBkaXZvdExpbmUsIGRpdm90
TGluZVN0YXJ0KTsKKyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwg
ZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVu
dE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgdW5zaWduZWQgc3RhcnRMaW5lLCB1bnNpZ25lZCBlbmRM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwg
dW5zaWduZWQgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0
TGluZSwgdW5zaWduZWQgZW5kTGluZSkKICAgICB7CiAgICAgICAgIHVzZXNXaXRoKCk7Ci0gICAg
ICAgIFdpdGhOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFdpdGhOb2RlKGxvY2F0aW9uLCBleHBy
LCBzdGF0ZW1lbnQsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCwgZW5kIC0gc3RhcnQp
OworICAgICAgICBXaXRoTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBXaXRoTm9kZShsb2NhdGlv
biwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24u
bGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9ICAgIAogICAg
IAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRocm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBl
bmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2ln
bmVkIGRpdm90TGluZVN0YXJ0KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRocm93U3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQp
CiAgICAgewogICAgICAgICBUaHJvd05vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgVGhyb3dOb2Rl
KGxvY2F0aW9uLCBleHByKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRM
aW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKLSAg
ICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBlbmQsIGRpdm90
TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5l
LCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRPZmZzZXQpOworICAgICAg
ICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtNTQ2LDEwICs1MzEsMTAgQEAgcHVibGlj
OgogCiAgICAgaW50IGV2YWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENvdW50OyB9CiAK
LSAgICB2b2lkIGFwcGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKGludCYgb3BlcmFuZFN0YWNrRGVw
dGgsIEV4cHJlc3Npb25Ob2RlKiBjdXJyZW50LCBpbnQgZXhwclN0YXJ0LCBpbnQgbGhzLCBpbnQg
cmhzLCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0LCBib29sIGhh
c0Fzc2lnbm1lbnRzKQorICAgIHZvaWQgYXBwZW5kQmluYXJ5RXhwcmVzc2lvbkluZm8oaW50JiBv
cGVyYW5kU3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIGN1cnJlbnQsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBleHByU3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBsaHMsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiByaHMsIGJvb2wgaGFzQXNzaWdubWVudHMpCiAgICAgewogICAgICAgICBvcGVy
YW5kU3RhY2tEZXB0aCsrOwotICAgICAgICBtX2JpbmFyeU9wZXJhbmRTdGFjay5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoY3VycmVudCwgQmluYXJ5T3BJbmZvKGV4cHJTdGFydCwgbGhzLCByaHMsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQsIGhhc0Fzc2lnbm1lbnRzKSkpOworICAgICAgICBtX2Jp
bmFyeU9wZXJhbmRTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY3VycmVudCwgQmluYXJ5T3BJ
bmZvKGV4cHJTdGFydCwgbGhzLCByaHMsIGhhc0Fzc2lnbm1lbnRzKSkpOwogICAgIH0KIAogICAg
IC8vIExvZ2ljIHRvIGhhbmRsZSBkYXRhc3RydWN0dXJlcyB1c2VkIGR1cmluZyBwYXJzaW5nIG9m
IGJpbmFyeSBleHByZXNzaW9ucwpAQCAtNTg2LDExICs1NzEsMTAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIGFwcGVuZFVuYXJ5VG9rZW4o
aW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0eXBlLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICB2b2lkIGFwcGVuZFVuYXJ5
VG9rZW4oaW50JiB0b2tlblN0YWNrRGVwdGgsIGludCB0eXBlLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgc3RhcnQpCiAgICAgewogICAgICAgICB0b2tlblN0YWNrRGVwdGgrKzsKLSAgICAgICAgUG9z
aXRpb25JbmZvIHBvc2l0aW9uID0geyBzdGFydCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCB9
OwotICAgICAgICBtX3VuYXJ5VG9rZW5TdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIodHlwZSwg
cG9zaXRpb24pKTsKKyAgICAgICAgbV91bmFyeVRva2VuU3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKHR5cGUsIHN0YXJ0KSk7CiAgICAgfQogCiAgICAgaW50IHVuYXJ5VG9rZW5TdGFja0xhc3RU
eXBlKGludCYpCkBAIC01OTgsMzQgKzU4MiwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X3VuYXJ5VG9rZW5TdGFjay5sYXN0KCkuZmlyc3Q7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVk
IHVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydChpbnQmKQorICAgIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiB1bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQoaW50JikKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X3VuYXJ5VG9rZW5TdGFjay5sYXN0KCkuc2Vjb25kLnN0YXJ0UG9zOworICAgICAgICByZXR1cm4g
bV91bmFyeVRva2VuU3RhY2subGFzdCgpLnNlY29uZDsKICAgICB9CiAgICAgCi0gICAgdW5zaWdu
ZWQgdW5hcnlUb2tlblN0YWNrTGFzdExpbmVTdGFydFBvc2l0aW9uKGludCYpCi0gICAgewotICAg
ICAgICByZXR1cm4gbV91bmFyeVRva2VuU3RhY2subGFzdCgpLnNlY29uZC5saW5lU3RhcnRQb3M7
Ci0gICAgfQotCiAgICAgdm9pZCB1bmFyeVRva2VuU3RhY2tSZW1vdmVMYXN0KGludCYgdG9rZW5T
dGFja0RlcHRoKQogICAgIHsKICAgICAgICAgdG9rZW5TdGFja0RlcHRoLS07CiAgICAgICAgIG1f
dW5hcnlUb2tlblN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhc3Np
Z25tZW50U3RhY2tBcHBlbmQoaW50JiBhc3NpZ25tZW50U3RhY2tEZXB0aCwgRXhwcmVzc2lvbk5v
ZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgZGl2b3RM
aW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCwgaW50IGFzc2lnbm1lbnRDb3VudCwgT3BlcmF0
b3Igb3ApCisgICAgdm9pZCBhc3NpZ25tZW50U3RhY2tBcHBlbmQoaW50JiBhc3NpZ25tZW50U3Rh
Y2tEZXB0aCwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBpbnQgYXNzaWdubWVudENvdW50LCBPcGVy
YXRvciBvcCkKICAgICB7CiAgICAgICAgIGFzc2lnbm1lbnRTdGFja0RlcHRoKys7Ci0gICAgICAg
IEFTU0VSVChzdGFydCA+PSBkaXZvdExpbmVTdGFydCk7Ci0gICAgICAgIEFTU0VSVChkaXZvdCA+
PSBkaXZvdExpbmVTdGFydCk7Ci0gICAgICAgIG1fYXNzaWdubWVudEluZm9TdGFjay5hcHBlbmQo
QXNzaWdubWVudEluZm8obm9kZSwgc3RhcnQsIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0
YXJ0LCBhc3NpZ25tZW50Q291bnQsIG9wKSk7CisgICAgICAgIEFTU0VSVChzdGFydC5vZmZzZXQg
Pj0gc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+
PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBtX2Fzc2lnbm1lbnRJbmZvU3RhY2su
YXBwZW5kKEFzc2lnbm1lbnRJbmZvKG5vZGUsIHN0YXJ0LCBkaXZvdCwgYXNzaWdubWVudENvdW50
LCBvcCkpOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBc3NpZ25tZW50KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCYgYXNzaWdubWVudFN0YWNrRGVwdGgs
IEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBpbml0aWFsQXNzaWdubWVudENvdW50LCBpbnQgY3Vy
cmVudEFzc2lnbm1lbnRDb3VudCwgaW50IGxhc3RUb2tlbkVuZCkKKyAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlQXNzaWdubWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBpbnQm
IGFzc2lnbm1lbnRTdGFja0RlcHRoLCBFeHByZXNzaW9uTm9kZSogcmhzLCBpbnQgaW5pdGlhbEFz
c2lnbm1lbnRDb3VudCwgaW50IGN1cnJlbnRBc3NpZ25tZW50Q291bnQsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBsYXN0VG9rZW5FbmQpCiAgICAgewogICAgICAgICBBc3NpZ25tZW50SW5mbyYgaW5m
byA9IG1fYXNzaWdubWVudEluZm9TdGFjay5sYXN0KCk7Ci0gICAgICAgIEV4cHJlc3Npb25Ob2Rl
KiByZXN1bHQgPSBtYWtlQXNzaWduTm9kZShsb2NhdGlvbiwgaW5mby5tX25vZGUsIGluZm8ubV9v
cCwgcmhzLCBpbmZvLm1faW5pdEFzc2lnbm1lbnRzICE9IGluaXRpYWxBc3NpZ25tZW50Q291bnQs
IGluZm8ubV9pbml0QXNzaWdubWVudHMgIT0gY3VycmVudEFzc2lnbm1lbnRDb3VudCwgaW5mby5t
X3N0YXJ0LCBpbmZvLm1fZGl2b3QgKyAxLCBsYXN0VG9rZW5FbmQsIGluZm8ubV9kaXZvdExpbmUs
IGluZm8ubV9kaXZvdExpbmVTdGFydCk7CisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiByZXN1bHQg
PSBtYWtlQXNzaWduTm9kZShsb2NhdGlvbiwgaW5mby5tX25vZGUsIGluZm8ubV9vcCwgcmhzLCBp
bmZvLm1faW5pdEFzc2lnbm1lbnRzICE9IGluaXRpYWxBc3NpZ25tZW50Q291bnQsIGluZm8ubV9p
bml0QXNzaWdubWVudHMgIT0gY3VycmVudEFzc2lnbm1lbnRDb3VudCwgaW5mby5tX3N0YXJ0LCBp
bmZvLm1fZGl2b3QgKyAxLCBsYXN0VG9rZW5FbmQpOwogICAgICAgICBtX2Fzc2lnbm1lbnRJbmZv
U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICBhc3NpZ25tZW50U3RhY2tEZXB0aC0tOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjUxLDEwICs2MzAsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgIH07CiAKLSAgICBzdGF0aWMgdm9pZCBzZXRFeGNl
cHRpb25Mb2NhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgc3RhdGljIHZvaWQgc2V0RXhjZXB0aW9uTG9jYXRp
b24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdEVuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChkaXZvdCA+PSBkaXZvdExpbmVT
dGFydCk7Ci0gICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90
IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAg
ICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOworICAgICAg
ICBub2RlLT5zZXRFeGNlcHRpb25Tb3VyY2VDb2RlKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVu
ZCk7CiAgICAgfQogCiAgICAgdm9pZCBpbmNDb25zdGFudHMoKSB7IG1fc2NvcGUubV9udW1Db25z
dGFudHMrKzsgfQpAQCAtNjc4LDcgKzY1Nyw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEJpbmFy
eU9wZXJhbmQsIDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVyYW5kU3RhY2s7
CiAgICAgVmVjdG9yPEFzc2lnbm1lbnRJbmZvLCAxMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1f
YXNzaWdubWVudEluZm9TdGFjazsKICAgICBWZWN0b3I8cGFpcjxpbnQsIGludD4sIDEwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVyYXRvclN0YWNrOwotICAgIFZlY3RvcjxwYWly
PGludCwgUG9zaXRpb25JbmZvPiwgMTAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3VuYXJ5VG9r
ZW5TdGFjazsKKyAgICBWZWN0b3I8cGFpcjxpbnQsIEpTVGV4dFBvc2l0aW9uPiwgMTAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBtX3VuYXJ5VG9rZW5TdGFjazsKICAgICBpbnQgbV9ldmFsQ291bnQ7
CiB9OwogCkBAIC02OTEsMjEgKzY3MCwyMSBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6
bWFrZVR5cGVPZk5vCiAgICAgcmV0dXJuIG5ldyAobV92bSkgVHlwZU9mVmFsdWVOb2RlKGxvY2F0
aW9uLCBleHByKTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNp
Z25lZCBkaXZvdExpbmVTdGFydCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGVs
ZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSog
ZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKCFleHByLT5pc0xv
Y2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVZhbHVlTm9kZShsb2Nh
dGlvbiwgZXhwcik7CiAgICAgaWYgKGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBS
ZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZXhwcik7Ci0g
ICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNv
bHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwgZGl2
b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0
ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBzdGFy
dCwgZW5kKTsKICAgICB9CiAgICAgaWYgKGV4cHItPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7
CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFj
a2V0QWNjZXNzb3JOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0
ZUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlw
dCgpLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RM
aW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVCcmFja2V0Tm9kZShs
b2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZGl2b3QsIHN0
YXJ0LCBlbmQpOwogICAgIH0KICAgICBBU1NFUlQoZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUoKSk7
CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUq
PihleHByKTsKLSAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVEb3ROb2RlKGxvY2F0aW9uLCBk
b3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQg
LSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgcmV0dXJuIG5ldyAobV92
bSkgRGVsZXRlRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigp
LCBkaXZvdCwgc3RhcnQsIGVuZCk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjpt
YWtlTmVnYXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogbikKQEAgLTgyMiwzNiArODAxLDM2IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlQml0WE9yTm8KICAgICByZXR1cm4gbmV3IChtX3ZtKSBCaXRYT3JOb2RlKGxvY2F0aW9u
LCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCi1FeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGlu
dCBzdGFydCwgdW5zaWduZWQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5z
aWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1
bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdEVuZCkKIHsKLSAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5lU3RhcnQpOwor
ICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGluZVN0YXJ0T2Zmc2V0KTsKICAgICBp
ZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgRnVuY3Rp
b25DYWxsVmFsdWVOb2RlKGxvY2F0aW9uLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFy
dCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1
cm4gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3Ms
IGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5v
ZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29s
dmVOb2RlKj4oZnVuYyk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSBy
ZXNvbHZlLT5pZGVudGlmaWVyKCk7CiAgICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmV2YWwpIHsKICAgICAgICAgICAgIHVzZXNFdmFsKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgYXJncywg
ZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0
YXJ0KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEV2YWxGdW5jdGlvbkNhbGxOb2Rl
KGxvY2F0aW9uLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGxvY2F0
aW9uLCBpZGVudGlmaWVyLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3Qs
IGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBG
dW5jdGlvbkNhbGxSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnRpZmllciwgYXJncywgZGl2b3Qs
IGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICB9CiAgICAgaWYgKGZ1bmMtPmlzQnJhY2tldEFj
Y2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBz
dGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4oZnVuYyk7Ci0gICAgICAgIEZ1bmN0aW9u
Q2FsbEJyYWNrZXROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9k
ZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYXJncywg
ZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0
YXJ0KTsKLSAgICAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tldC0+ZGl2b3Qo
KSwgYnJhY2tldC0+ZGl2b3RFbmRPZmZzZXQoKSwgYnJhY2tldC0+ZGl2b3RMaW5lKCksIGJyYWNr
ZXQtPmRpdm90TGluZVN0YXJ0KCkpOworICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSog
bm9kZSA9IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNr
ZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCk7CisgICAgICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGJyYWNrZXQt
PmRpdm90KCksIGJyYWNrZXQtPmRpdm90RW5kKCkub2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG5v
ZGU7CiAgICAgfQogICAgIEFTU0VSVChmdW5jLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKICAgICBE
b3RBY2Nlc3Nvck5vZGUqIGRvdCA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSo+KGZ1bmMp
OwogICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUqIG5vZGU7CiAgICAgaWYgKGRvdC0+aWRlbnRpZmll
cigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmNhbGwpCi0gICAgICAgIG5vZGUgPSBuZXcgKG1f
dm0pIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5p
ZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCwgZGl2
b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIENhbGxG
dW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVy
KCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgZWxzZSBpZiAoZG90
LT5pZGVudGlmaWVyKCkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXBwbHkpCi0gICAgICAgIG5v
ZGUgPSBuZXcgKG1fdm0pIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5i
YXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5k
IC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBub2RlID0gbmV3
IChtX3ZtKSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBk
b3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAg
ICBlbHNlCi0gICAgICAgIG5vZGUgPSBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9j
YXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90
IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKLSAgICBu
b2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3RFbmRPZmZz
ZXQoKSwgZG90LT5kaXZvdExpbmUoKSwgZG90LT5kaXZvdExpbmVTdGFydCgpKTsKKyAgICAgICAg
bm9kZSA9IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNl
KCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQp
OworICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90LT5kaXZv
dEVuZCgpLm9mZnNldCk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTg5OSwxMyArODc4LDEz
IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQmluYXJ5Tm8KIAogICAgIGNhc2Ug
SU5TVEFOQ0VPRjogewogICAgICAgICBJbnN0YW5jZU9mTm9kZSogbm9kZSA9IG5ldyAobV92bSkg
SW5zdGFuY2VPZk5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25k
Lmhhc0Fzc2lnbm1lbnQpOwotICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBsaHMu
c2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLmVuZCwgcmhzLnNlY29u
ZC5kaXZvdExpbmUsIHJocy5zZWNvbmQuZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBzZXRFeGNl
cHRpb25Mb2NhdGlvbihub2RlLCBsaHMuc2Vjb25kLnN0YXJ0LCByaHMuc2Vjb25kLnN0YXJ0LCBy
aHMuc2Vjb25kLmVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIGNhc2Ug
SU5UT0tFTjogewogICAgICAgICBJbk5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEluTm9kZShsb2Nh
dGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7Ci0g
ICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3RhcnQsIHJocy5z
ZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuZW5kLCByaHMuc2Vjb25kLmRpdm90TGluZSwgcmhzLnNl
Y29uZC5kaXZvdExpbmVTdGFydCk7CisgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUs
IGxocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuZW5kKTsKICAg
ICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC05MzcsMTAgKzkxNiwxMCBAQCBFeHByZXNz
aW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vCiAgICAgcmV0dXJuIDA7CiB9CiAKLUV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciBvcCwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIsIGJvb2wgbG9jSGFzQXNzaWdubWVudHMsIGJvb2wgZXhwckhhc0Fzc2ln
bm1lbnRzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjpt
YWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogbG9jLCBPcGVyYXRvciBvcCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJvb2wgbG9jSGFz
QXNzaWdubWVudHMsIGJvb2wgZXhwckhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKIHsKICAgICBpZiAoIWxvYy0+aXNMb2NhdGlvbigpKQotICAgICAgICByZXR1cm4g
bmV3IChtX3ZtKSBBc3NpZ25FcnJvck5vZGUobG9jYXRpb24sIGRpdm90LCBkaXZvdCAtIHN0YXJ0
LCBlbmQgLSBkaXZvdCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fdm0pIEFzc2lnbkVycm9yTm9kZShsb2NhdGlvbiwgZGl2b3QsIHN0YXJ0LCBlbmQp
OwogCiAgICAgaWYgKGxvYy0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2Rl
KiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihsb2MpOwpAQCAtOTQ4LDE3ICs5
MjcsMTcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25ObwogICAgICAg
ICAgICAgaWYgKGV4cHItPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZXhwciktPmJvZHkoKS0+c2V0SW5mZXJyZWROYW1lKHJlc29s
dmUtPmlkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9
IG5ldyAobV92bSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZp
ZXIoKSwgZXhwcik7Ci0gICAgICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFy
dCwgZGl2b3QsIGVuZCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgICAgICBz
ZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBSZWFk
TW9kaWZ5UmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgb3AsIGV4
cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90
LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkg
UmVhZE1vZGlmeVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIG9w
LCBleHByLCBleHBySGFzQXNzaWdubWVudHMsIGRpdm90LCBzdGFydCwgZW5kKTsKICAgICB9CiAg
ICAgaWYgKGxvYy0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgQnJhY2tldEFj
Y2Vzc29yTm9kZSogYnJhY2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihs
b2MpOwogICAgICAgICBpZiAob3AgPT0gT3BFcXVhbCkKLSAgICAgICAgICAgIHJldHVybiBuZXcg
KG1fdm0pIEFzc2lnbkJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNr
ZXQtPnN1YnNjcmlwdCgpLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhhc0Fzc2lnbm1l
bnRzLCBicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdCgpIC0gc3RhcnQsIGVuZCAtIGJy
YWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90TGluZSgpLCBicmFja2V0LT5kaXZvdExpbmVT
dGFydCgpKTsKLSAgICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKiBub2RlID0gbmV3IChtX3Zt
KSBSZWFkTW9kaWZ5QnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tl
dC0+c3Vic2NyaXB0KCksIG9wLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhhc0Fzc2ln
bm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2
b3RMaW5lU3RhcnQpOwotICAgICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0
LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdEVuZE9mZnNldCgpLCBicmFja2V0LT5kaXZvdExpbmUo
KSwgYnJhY2tldC0+ZGl2b3RMaW5lU3RhcnQoKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBBc3NpZ25CcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0
LT5zdWJzY3JpcHQoKSwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50
cywgYnJhY2tldC0+ZGl2b3QoKSwgc3RhcnQsIGVuZCk7CisgICAgICAgIFJlYWRNb2RpZnlCcmFj
a2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgUmVhZE1vZGlmeUJyYWNrZXROb2RlKGxvY2F0aW9u
LCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhwciwgbG9jSGFz
QXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIHN0YXJ0LCBlbmQpOworICAg
ICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0
LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBB
U1NFUlQobG9jLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKQEAgLTk2NiwyMiArOTQ1LDIyIEBAIEV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm8KICAgICBpZiAob3AgPT0gT3BF
cXVhbCkgewogICAgICAgICBpZiAoZXhwci0+aXNGdW5jRXhwck5vZGUoKSkKICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGV4cHIpLT5ib2R5KCktPnNldEluZmVycmVkTmFt
ZShkb3QtPmlkZW50aWZpZXIoKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkRv
dE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZXhwciwgZXhw
ckhhc0Fzc2lnbm1lbnRzLCBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3QoKSAtIHN0YXJ0LCBlbmQg
LSBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3RMaW5lKCksIGRvdC0+ZGl2b3RMaW5lU3RhcnQoKSk7
CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkRvdE5vZGUobG9jYXRpb24sIGRvdC0+
YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkb3Qt
PmRpdm90KCksIHN0YXJ0LCBlbmQpOwogICAgIH0KIAotICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBu
b2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCks
IGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwg
ZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpOwot
ICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90LT5kaXZvdEVu
ZE9mZnNldCgpLCBkb3QtPmRpdm90TGluZSgpLCBkb3QtPmRpdm90TGluZVN0YXJ0KCkpOworICAg
IFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5RG90Tm9kZShs
b2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhh
c0Fzc2lnbm1lbnRzLCBkaXZvdCwgc3RhcnQsIGVuZCk7CisgICAgbm9kZS0+c2V0U3ViZXhwcmVz
c2lvbkluZm8oZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90RW5kKCkub2Zmc2V0KTsKICAgICByZXR1
cm4gbm9kZTsKIH0KIAotRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VQcmVmaXhOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBP
cGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQsIHVuc2lnbmVkIGRpdm90
TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkK
IHsKLSAgICByZXR1cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcCwg
ZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90LCBkaXZvdExpbmUsIGRpdm90TGluZVN0
YXJ0KTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBv
cCwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCi1FeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6
bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Np
b25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQs
IHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCitFeHByZXNzaW9u
Tm9kZSogQVNUQnVpbGRlcjo6bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgcmV0dXJuIG5ldyAobV92bSkgUG9zdGZpeE5vZGUobG9j
YXRpb24sIGV4cHIsIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QsIGRpdm90
TGluZSwgZGl2b3RMaW5lU3RhcnQpOworICAgIHJldHVybiBuZXcgKG1fdm0pIFBvc3RmaXhOb2Rl
KGxvY2F0aW9uLCBleHByLCBvcCwgZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gMTUzNDI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMDYsOCArMTMwNiwxMCBAQCBib29sIExleGVyPFQ+OjpuZXh0VG9rZW5Jc0NvbG9uKCkKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1KU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4KEpTVG9r
ZW5EYXRhKiB0b2tlbkRhdGEsIEpTVG9rZW5Mb2NhdGlvbiogdG9rZW5Mb2NhdGlvbiwgdW5zaWdu
ZWQgbGV4ZXJGbGFncywgYm9vbCBzdHJpY3RNb2RlKQorSlNUb2tlblR5cGUgTGV4ZXI8VD46Omxl
eChKU1Rva2VuKiB0b2tlblJlY29yZCwgdW5zaWduZWQgbGV4ZXJGbGFncywgYm9vbCBzdHJpY3RN
b2RlKQogeworICAgIEpTVG9rZW5EYXRhKiB0b2tlbkRhdGEgPSAmdG9rZW5SZWNvcmQtPm1fZGF0
YTsKKyAgICBKU1Rva2VuTG9jYXRpb24qIHRva2VuTG9jYXRpb24gPSAmdG9rZW5SZWNvcmQtPm1f
bG9jYXRpb247CiAgICAgQVNTRVJUKCFtX2Vycm9yKTsKICAgICBBU1NFUlQobV9idWZmZXI4Lmlz
RW1wdHkoKSk7CiAgICAgQVNTRVJUKG1fYnVmZmVyMTYuaXNFbXB0eSgpKTsKQEAgLTEzMjQsNiAr
MTMyNiw3IEBAIHN0YXJ0OgogICAgIAogICAgIHRva2VuTG9jYXRpb24tPnN0YXJ0T2Zmc2V0ID0g
Y3VycmVudE9mZnNldCgpOwogICAgIEFTU0VSVChjdXJyZW50T2Zmc2V0KCkgPj0gY3VycmVudExp
bmVTdGFydE9mZnNldCgpKTsKKyAgICB0b2tlblJlY29yZC0+bV9zdGFydFBvc2l0aW9uID0gY3Vy
cmVudFBvc2l0aW9uKCk7CiAKICAgICBDaGFyYWN0ZXJUeXBlIHR5cGU7CiAgICAgaWYgKExJS0VM
WShpc0xhdGluMShtX2N1cnJlbnQpKSkKQEAgLTE2OTksNiArMTcwMiw3IEBAIHJldHVyblRva2Vu
OgogICAgIHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICB0
b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7
CiAgICAgQVNTRVJUKHRva2VuTG9jYXRpb24tPmVuZE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5s
aW5lU3RhcnRPZmZzZXQpOworICAgIHRva2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVu
dFBvc2l0aW9uKCk7CiAgICAgbV9sYXN0VG9rZW4gPSB0b2tlbjsKICAgICByZXR1cm4gdG9rZW47
CiAKQEAgLTE3MDgsNiArMTcxMiw3IEBAIHJldHVybkVycm9yOgogICAgIHRva2VuTG9jYXRpb24t
PmVuZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKICAgICB0b2tlbkxvY2F0aW9uLT5saW5lU3Rh
cnRPZmZzZXQgPSBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAgICAgQVNTRVJUKHRva2VuTG9j
YXRpb24tPmVuZE9mZnNldCA+PSB0b2tlbkxvY2F0aW9uLT5saW5lU3RhcnRPZmZzZXQpOworICAg
IHRva2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQodG9rZW4gJiBFcnJvclRva2VuRmxhZyk7CiAgICAgcmV0dXJuIHRva2VuOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMTUzNDI3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NiwxMSArODYsMTUgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNSZXBhcnNpbmcoKSB7
IG1faXNSZXBhcnNpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBpc1JlcGFyc2luZygpIGNvbnN0IHsg
cmV0dXJuIG1faXNSZXBhcnNpbmc7IH0KIAotICAgIEpTVG9rZW5UeXBlIGxleChKU1Rva2VuRGF0
YSosIEpTVG9rZW5Mb2NhdGlvbiosIHVuc2lnbmVkLCBib29sIHN0cmljdE1vZGUpOworICAgIEpT
VG9rZW5UeXBlIGxleChKU1Rva2VuKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAg
Ym9vbCBuZXh0VG9rZW5Jc0NvbG9uKCk7CiAgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVOdW1iZXI7IH0KICAgICBBTFdBWVNfSU5MSU5FIGludCBjdXJyZW50T2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0RnJvbVNvdXJjZVB0cihtX2NvZGUpOyB9CiAgICAgQUxX
QVlTX0lOTElORSBpbnQgY3VycmVudExpbmVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG9m
ZnNldEZyb21Tb3VyY2VQdHIobV9saW5lU3RhcnQpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1Rl
eHRQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTVGV4dFBvc2l0aW9uKG1fbGluZU51bWJlciwgY3VycmVudE9mZnNldCgpLCBjdXJyZW50TGlu
ZVN0YXJ0T2Zmc2V0KCkpOworICAgIH0KICAgICB2b2lkIHNldExhc3RMaW5lTnVtYmVyKGludCBs
YXN0TGluZU51bWJlcikgeyBtX2xhc3RMaW5lTnVtYmVyID0gbGFzdExpbmVOdW1iZXI7IH0KICAg
ICBpbnQgbGFzdExpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xhc3RMaW5lTnVtYmVyOyB9
CiAgICAgYm9vbCBwcmV2VGVybWluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGVybWluYXRvcjsg
fQpAQCAtMTI1LDcgKzEyOSw3IEBAIHB1YmxpYzoKIAogICAgIFNvdXJjZVByb3ZpZGVyKiBzb3Vy
Y2VQcm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5wcm92aWRlcigpOyB9CiAKLSAg
ICBKU1Rva2VuVHlwZSBsZXhFeHBlY3RJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgSlNUb2tlbkxv
Y2F0aW9uKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CisgICAgSlNUb2tlblR5cGUgbGV4
RXhwZWN0SWRlbnRpZmllcihKU1Rva2VuKiwgdW5zaWduZWQsIGJvb2wgc3RyaWN0TW9kZSk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmQ4KGludCk7CkBAIC0zMzEsMTIgKzMzNSwxNSBAQCBB
TFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjxUPjo6bGV4RXhwZWN0
SWRlbnRpZmllcihKU1Rva2VuRGF0YSogdG9rZW5EYXRhLCBKU1Rva2VuTG9jYXRpb24qIHRva2Vu
TG9jYXRpb24sIHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3RyaWN0TW9kZSkKK0FMV0FZU19J
TkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI8VD46OmxleEV4cGVjdElkZW50aWZpZXIoSlNUb2tlbiog
dG9rZW5SZWNvcmQsIHVuc2lnbmVkIGxleGVyRmxhZ3MsIGJvb2wgc3RyaWN0TW9kZSkKIHsKKyAg
ICBKU1Rva2VuRGF0YSogdG9rZW5EYXRhID0gJnRva2VuUmVjb3JkLT5tX2RhdGE7CisgICAgSlNU
b2tlbkxvY2F0aW9uKiB0b2tlbkxvY2F0aW9uID0gJnRva2VuUmVjb3JkLT5tX2xvY2F0aW9uOwog
ICAgIEFTU0VSVCgobGV4ZXJGbGFncyAmIExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzKSk7
CiAgICAgY29uc3QgVCogc3RhcnQgPSBtX2NvZGU7CiAgICAgY29uc3QgVCogcHRyID0gc3RhcnQ7
CiAgICAgY29uc3QgVCogZW5kID0gbV9jb2RlRW5kOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0
UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb24oKTsKICAgICBpZiAocHRyID49IGVuZCkgewogICAg
ICAgICBBU1NFUlQocHRyID09IGVuZCk7CiAgICAgICAgIGdvdG8gc2xvd0Nhc2U7CkBAIC0zNzEs
MTEgKzM3OCwxMyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFCiAg
ICAgdG9rZW5Mb2NhdGlvbi0+c3RhcnRPZmZzZXQgPSBvZmZzZXRGcm9tU291cmNlUHRyKHN0YXJ0
KTsKICAgICB0b2tlbkxvY2F0aW9uLT5lbmRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CiAgICAg
QVNTRVJUKHRva2VuTG9jYXRpb24tPnN0YXJ0T2Zmc2V0ID49IHRva2VuTG9jYXRpb24tPmxpbmVT
dGFydE9mZnNldCk7CisgICAgdG9rZW5SZWNvcmQtPm1fc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9z
aXRpb247CisgICAgdG9rZW5SZWNvcmQtPm1fZW5kUG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb24o
KTsKICAgICBtX2xhc3RUb2tlbiA9IElERU5UOwogICAgIHJldHVybiBJREVOVDsKICAgICAKIHNs
b3dDYXNlOgotICAgIHJldHVybiBsZXgodG9rZW5EYXRhLCB0b2tlbkxvY2F0aW9uLCBsZXhlckZs
YWdzLCBzdHJpY3RNb2RlKTsKKyAgICByZXR1cm4gbGV4KHRva2VuUmVjb3JkLCBsZXhlckZsYWdz
LCBzdHJpY3RNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTUz
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQog
CiAgICAgaW5saW5lIE5vZGU6Ok5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikK
LSAgICAgICAgOiBtX2xpbmVOdW1iZXIobG9jYXRpb24ubGluZSkKLSAgICAgICAgLCBtX3N0YXJ0
T2Zmc2V0KGxvY2F0aW9uLnN0YXJ0T2Zmc2V0KQotICAgICAgICAsIG1fbGluZVN0YXJ0T2Zmc2V0
KGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCkKKyAgICAgICAgOiBtX3Bvc2l0aW9uKGxvY2F0aW9u
LmxpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpCiAg
ICAgewogICAgICAgICBBU1NFUlQobG9jYXRpb24uc3RhcnRPZmZzZXQgPj0gbG9jYXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0KTsKICAgICB9CkBAIC0xMDIsMTQgKzEwMCwxMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB7CiAgICAgfQogCi1pbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCkKK2lubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAg
LCBtX2lkZW50KGlkZW50KQotICAgICAgICAsIG1fc3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCi0g
ICAgICAgICwgbV9kaXZvdExpbmUoZGl2b3RMaW5lKQotICAgICAgICAsIG1fZGl2b3RMaW5lU3Rh
cnQoZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgbV9zdGFydChzdGFydCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3N0YXJ0T2Zmc2V0ID49IG1fZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBB
U1NFUlQobV9zdGFydC5vZmZzZXQgPj0gbV9zdGFydC5saW5lU3RhcnRPZmZzZXQpOwogICAgIH0K
IAogICAgIGlubGluZSBFbGVtZW50Tm9kZTo6RWxlbWVudE5vZGUoaW50IGVsaXNpb24sIEV4cHJl
c3Npb25Ob2RlKiBub2RlKQpAQCAtMjQ2LDgxICsyNDIsODEgQEAgaW5saW5lIFJlc29sdmVOb2Rl
OjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRXZhbEZ1
bmN0aW9uQ2FsbE5vZGU6OkV2YWxGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVu
c2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6
RXZhbEZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgQXJn
dW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQog
ICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZUV4
cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRp
dm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2FyZ3MoYXJncykKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChkaXZvdCA+PSBkaXZvdExpbmVTdGFydCk7CiAgICAgfQogCi0gICAgaW5saW5l
IEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2Rl
KiBhcmdzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAg
ICBpbmxpbmUgRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIEFyZ3Vt
ZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAg
ICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVFeHBy
ZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZv
dExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2
b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9h
cmdzKGFyZ3MpCiAgICAgeworICAgICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90U3Rh
cnQub2Zmc2V0KTsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2RlKiBhcmdzLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgRnVuY3Rpb25D
YWxsUmVzb2x2ZU5vZGU6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNOb2RlKiBh
cmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEo
ZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQp
CisgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRp
dm90RW5kKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgICAgICwgbV9hcmdzKGFyZ3Mp
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6RnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEFyZ3VtZW50c05v
ZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQor
ICAgIGlubGluZSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6RnVuY3Rpb25DYWxsQnJhY2tldE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2Us
IEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShs
b2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAg
LCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQp
CiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0
KQogICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVu
Y3Rpb25DYWxsRG90Tm9kZTo6RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRp
dm90TGluZVN0YXJ0KQorICAgIGlubGluZSBGdW5jdGlvbkNhbGxEb3ROb2RlOjpGdW5jdGlvbkNh
bGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFy
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKGxvY2F0aW9uKQotICAgICAgICAsIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhKGRpdm90
LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAg
ICAgICAsIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZCkKICAgICAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQog
ICAgICAgICAsIG1fYXJncyhhcmdzKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQ2FsbEZ1
bmN0aW9uQ2FsbERvdE5vZGU6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQpCi0gICAgICAgIDogRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlv
biwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBDYWxsRnVuY3Rpb25DYWxsRG90Tm9k
ZTo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVu
dHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCisgICAg
ICAgIDogRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRp
dm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEFw
cGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgdW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwg
dW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCi0gICAgICAgIDogRnVuY3Rpb25DYWxsRG90Tm9kZShs
b2NhdGlvbiwgYmFzZSwgaWRlbnQsIGFyZ3MsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBBcHBseUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVu
ZCkKKyAgICAgICAgOiBGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBiYXNlLCBpZGVudCwg
YXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgIHsKICAgICB9CiAKLSAgICBp
bmxpbmUgUG9zdGZpeE5vZGU6OlBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcGVyLCB1bnNpZ25lZCBkaXZv
dCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2
b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKLSAgICAgICAgOiBQcmVmaXhOb2RlKGxv
Y2F0aW9uLCBleHByLCBvcGVyLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RM
aW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgUG9zdGZpeE5vZGU6OlBvc3RmaXhOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBP
cGVyYXRvciBvcGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCisgICAg
ICAgIDogUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3BlciwgZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRGVsZXRlUmVzb2x2ZU5vZGU6
OkRlbGV0ZVJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExp
bmVTdGFydCkKKyAgICBpbmxpbmUgRGVsZXRlUmVzb2x2ZU5vZGU6OkRlbGV0ZVJlc29sdmVOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisg
ICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAgICAgewogICAgIH0KIAotICAgIGlubGlu
ZSBEZWxldGVCcmFja2V0Tm9kZTo6RGVsZXRlQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJz
Y3JpcHQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAg
IGlubGluZSBEZWxldGVCcmFja2V0Tm9kZTo6RGVsZXRlQnJhY2tldE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2Rl
KiBzdWJzY3JpcHQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2FibGVFeHByZXNz
aW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExp
bmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RT
dGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9zdWJz
Y3JpcHQoc3Vic2NyaXB0KQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRGVsZXRlRG90Tm9k
ZTo6RGVsZXRlRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBEZWxldGVEb3ROb2RlOjpE
ZWxldGVEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAg
ICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2Jhc2Uo
YmFzZSkKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgIHsKQEAgLTM1MCw5ICszNDYsOSBA
QCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0K
IAotICAgIGlubGluZSBQcmVmaXhOb2RlOjpQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcGVyLCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWdu
ZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgUHJlZml4
Tm9kZTo6UHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3BlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAs
IFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxl
UHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAg
ICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcGVyKQogICAgIHsK
QEAgLTUzNiwxNiArNTMyLDE0IEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29u
c3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6
UmVhZE1vZGlmeVJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogIHJp
Z2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2ln
bmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OlJl
YWRNb2RpZnlSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqICByaWdo
dCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RFbmQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRp
dm90TGluZSwgZGl2b3RMaW5lU3RhcnQpCisgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQp
CiAgICAgICAgICwgbV9yaWdodChyaWdodCkKICAgICAgICAgLCBtX29wZXJhdG9yKG9wZXIpCiAg
ICAgICAgICwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzKHJpZ2h0SGFzQXNzaWdubWVudHMpCiAgICAg
ewotICAgICAgICBBU1NFUlQoZGl2b3QgPj0gZGl2b3RMaW5lU3RhcnQpOwotICAgICAgICBBU1NF
UlQoZGl2b3QgLSBzdGFydE9mZnNldCA+PSBkaXZvdExpbmVTdGFydCk7CiAgICAgfQogCiAgICAg
aW5saW5lIEFzc2lnblJlc29sdmVOb2RlOjpBc3NpZ25SZXNvbHZlTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5v
ZGUqIHJpZ2h0KQpAQCAtNTU1LDkgKzU0OSwxMCBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29s
dmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBSZWFkTW9kaWZ5QnJh
Y2tldE5vZGU6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwg
T3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fz
c2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUs
IHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorCisgICAgaW5saW5lIFJlYWRNb2RpZnlCcmFja2V0
Tm9kZTo6UmVhZE1vZGlmeUJyYWNrZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBPcGVy
YXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0SGFzQXNzaWdu
bWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAg
ICAsIFRocm93YWJsZVN1YkV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJsZVN1YkV4
cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBtX2Jh
c2UoYmFzZSkKICAgICAgICAgLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpCiAgICAgICAgICwgbV9y
aWdodChyaWdodCkKQEAgLTU2Nyw5ICs1NjIsOSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29s
dmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBc3NpZ25CcmFja2V0
Tm9kZTo6QXNzaWduQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEV4cHJlc3Np
b25Ob2RlKiByaWdodCwgYm9vbCBzdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhh
c0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFy
dCkKKyAgICBpbmxpbmUgQXNzaWduQnJhY2tldE5vZGU6OkFzc2lnbkJyYWNrZXROb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNz
aW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0
SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9u
KQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAgICAsIFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgLCBt
X2Jhc2UoYmFzZSkKICAgICAgICAgLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpCiAgICAgICAgICwg
bV9yaWdodChyaWdodCkKQEAgLTU3OCw5ICs1NzMsOSBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJl
c29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBBc3NpZ25Eb3RO
b2RlOjpBc3NpZ25Eb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUq
IHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVu
c2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBBc3NpZ25Eb3ROb2RlOjpBc3NpZ25E
b3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBi
YXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29s
IHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVu
ZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZGl2b3RMaW5l
LCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YShkaXZv
dCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9iYXNlKGJhc2UpCiAgICAgICAg
ICwgbV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX3JpZ2h0KHJpZ2h0KQpAQCAtNTg4LDkgKzU4
Myw5IEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAg
ICAgfQogCi0gICAgaW5saW5lIFJlYWRNb2RpZnlEb3ROb2RlOjpSZWFkTW9kaWZ5RG90Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiByaWdo
dCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25l
ZCBkaXZvdExpbmVTdGFydCkKKyAgICBpbmxpbmUgUmVhZE1vZGlmeURvdE5vZGU6OlJlYWRNb2Rp
ZnlEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lv
bk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdEVuZCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikK
LSAgICAgICAgLCBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgLCBUaHJvd2Fi
bGVTdWJFeHByZXNzaW9uRGF0YShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCiAgICAgICAg
ICwgbV9iYXNlKGJhc2UpCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKICAgICAgICAgLCBtX3Jp
Z2h0KHJpZ2h0KQpAQCAtNTk5LDkgKzU5NCw5IEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2
ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEFzc2lnbkVycm9yTm9k
ZTo6QXNzaWduRXJyb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNp
Z25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KQorICAgIGlubGluZSBBc3Np
Z25FcnJvck5vZGU6OkFzc2lnbkVycm9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpCiAgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEo
ZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RMaW5lU3RhcnQp
CisgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRp
dm90RW5kKQogICAgIHsKICAgICB9CiAKQEAgLTcwNiwxMyArNzAxLDExIEBAIGlubGluZSBSZXNv
bHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5l
IFdpdGhOb2RlOjpXaXRoTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCB1aW50MzJfdCBkaXZv
dCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCwgdWludDMyX3Qg
ZXhwcmVzc2lvbkxlbmd0aCkKKyAgICBpbmxpbmUgV2l0aE5vZGU6OldpdGhOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgdWludDMyX3QgZXhw
cmVzc2lvbkxlbmd0aCkKICAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQogICAgICAg
ICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKICAgICAg
ICAgLCBtX2Rpdm90KGRpdm90KQotICAgICAgICAsIG1fZGl2b3RMaW5lKGRpdm90TGluZSkKLSAg
ICAgICAgLCBtX2Rpdm90TGluZVN0YXJ0KGRpdm90TGluZVN0YXJ0KQogICAgICAgICAsIG1fZXhw
cmVzc2lvbkxlbmd0aChleHByZXNzaW9uTGVuZ3RoKQogICAgIHsKICAgICB9CkBAIC04MjIsMTcg
KzgxNSwxNyBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAg
ewogICAgIH0KIAotICAgIGlubGluZSBGb3JJbk5vZGU6OkZvckluTm9kZShWTSogdm0sIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHBy
ZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0
ZW1lbnQsIHVuc2lnbmVkIGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVu
c2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisgICAgaW5saW5lIEZv
ckluTm9kZTo6Rm9ySW5Ob2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbiwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCiAg
ICAgICAgICwgbV9pbml0KDApCi0gICAgICAgICwgbV9sZXhwcihuZXcgKHZtKSBSZXNvbHZlTm9k
ZShsb2NhdGlvbiwgaWRlbnQsIGRpdm90IC0gc3RhcnRPZmZzZXQsIGRpdm90TGluZSwgZGl2b3RM
aW5lU3RhcnQpKQorICAgICAgICAsIG1fbGV4cHIobmV3ICh2bSkgUmVzb2x2ZU5vZGUobG9jYXRp
b24sIGlkZW50LCBkaXZvdFN0YXJ0KSkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAg
LCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgewogICAgICAgICBpZiAoaW4pIHsKICAgICAg
ICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBub2RlID0gbmV3ICh2bSkgQXNzaWduUmVzb2x2ZU5v
ZGUobG9jYXRpb24sIGlkZW50LCBpbik7Ci0gICAgICAgICAgICBBU1NFUlQoZGl2b3QgPj0gZGl2
b3RMaW5lU3RhcnQpOwotICAgICAgICAgICAgbm9kZS0+c2V0RXhjZXB0aW9uU291cmNlQ29kZShk
aXZvdCwgZGl2b3QgLSBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gZGl2b3QsIGRpdm90TGluZSwg
ZGl2b3RMaW5lU3RhcnQpOworICAgICAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZv
dC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICAgICAgbm9kZS0+c2V0RXhjZXB0aW9uU291cmNl
Q29kZShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgICAgICAgICAgbV9pbml0ID0g
bm9kZTsKICAgICAgICAgfQogICAgICAgICAvLyBmb3IoIHZhciBmb28gPSBiYXIgaW4gYmF6ICkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAxNTM0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsMTEgKzU0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgU3RhdGVtZW50
Tm9kZTo6c2V0TG9jKHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIGludCBz
dGFydE9mZnNldCwgaW50IGxpbmVTdGFydE9mZnNldCkKIHsKLSAgICBtX2xpbmVOdW1iZXIgPSBm
aXJzdExpbmU7CiAgICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOwotICAgIG1fc3RhcnRPZmZzZXQg
PSBzdGFydE9mZnNldDsKLSAgICBtX2xpbmVTdGFydE9mZnNldCA9IGxpbmVTdGFydE9mZnNldDsK
LSAgICBBU1NFUlQobV9zdGFydE9mZnNldCA+PSBtX2xpbmVTdGFydE9mZnNldCk7CisgICAgbV9w
b3NpdGlvbiA9IEpTVGV4dFBvc2l0aW9uKGZpcnN0TGluZSwgc3RhcnRPZmZzZXQsIGxpbmVTdGFy
dE9mZnNldCk7CisgICAgQVNTRVJUKG1fcG9zaXRpb24ub2Zmc2V0ID49IG1fcG9zaXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNv
dXJjZUVsZW1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNTM0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSwxNCAr
MTI5LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+
Tm9kZSgpIHsgfQogCi0gICAgICAgIGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiBtX2xpbmVO
dW1iZXI7IH0KLSAgICAgICAgaW50IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dE9mZnNldDsgfQotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9saW5lU3RhcnRPZmZzZXQ7IH0KKyAgICAgICAgaW50IGxpbmVObygpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb24ubGluZTsgfQorICAgICAgICBpbnQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX3Bvc2l0aW9uLm9mZnNldDsgfQorICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbi5saW5lU3RhcnRPZmZzZXQ7IH0KKyAgICAgICAgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsg
fQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBpbnQgbV9saW5lTnVtYmVyOwotICAgICAgICBp
bnQgbV9zdGFydE9mZnNldDsKLSAgICAgICAgaW50IG1fbGluZVN0YXJ0T2Zmc2V0OworICAgICAg
ICBKU1RleHRQb3NpdGlvbiBtX3Bvc2l0aW9uOwogICAgIH07CiAKICAgICBjbGFzcyBFeHByZXNz
aW9uTm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTI1NCw0OSArMjUzLDQzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKCkKLSAgICAgICAgICAgIDogbV9kaXZvdChz
dGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpKQotICAgICAgICAgICAgLCBtX2Rpdm90U3RhcnRPZmZz
ZXQoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KC0xKSkKLSAgICAgICAgICAgICwgbV9kaXZvdEVuZE9m
ZnNldChzdGF0aWNfY2FzdDx1aW50MTZfdD4oLTEpKQotICAgICAgICAgICAgLCBtX2Rpdm90TGlu
ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpKQotICAgICAgICAgICAgLCBtX2Rpdm90TGluZVN0
YXJ0KHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkpCisgICAgICAgICAgICA6IG1fZGl2b3QoLTEs
IC0xLCAtMSkKKyAgICAgICAgICAgICwgbV9kaXZvdFN0YXJ0KC0xLCAtMSwgLTEpCisgICAgICAg
ICAgICAsIG1fZGl2b3RFbmQoLTEsIC0xLCAtMSkKICAgICAgICAgewogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSh1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICAgICAgVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGEoY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgICAgICAgICA6IG1fZGl2b3QoZGl2
b3QpCi0gICAgICAgICAgICAsIG1fZGl2b3RTdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAg
ICAgICAgICwgbV9kaXZvdEVuZE9mZnNldChlbmRPZmZzZXQpCi0gICAgICAgICAgICAsIG1fZGl2
b3RMaW5lKGRpdm90TGluZSkKLSAgICAgICAgICAgICwgbV9kaXZvdExpbmVTdGFydChkaXZvdExp
bmVTdGFydCkKKyAgICAgICAgICAgICwgbV9kaXZvdFN0YXJ0KHN0YXJ0KQorICAgICAgICAgICAg
LCBtX2Rpdm90RW5kKGVuZCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3Qg
Pj0gbV9kaXZvdExpbmVTdGFydCk7CisgICAgICAgICAgICBBU1NFUlQobV9kaXZvdC5vZmZzZXQg
Pj0gbV9kaXZvdC5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKG1fZGl2b3RT
dGFydC5vZmZzZXQgPj0gbV9kaXZvdFN0YXJ0LmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgICAg
ICBBU1NFUlQobV9kaXZvdEVuZC5vZmZzZXQgPj0gbV9kaXZvdEVuZC5saW5lU3RhcnRPZmZzZXQp
OwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldEV4Y2VwdGlvblNvdXJjZUNv
ZGUodW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCisKKyAgICAg
ICAgdm9pZCBzZXRFeGNlcHRpb25Tb3VyY2VDb2RlKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdEVuZCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGRpdm90ID49IGRpdm90
TGluZVN0YXJ0KTsKKyAgICAgICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3QubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChkaXZvdFN0YXJ0Lm9mZnNldCA+PSBk
aXZvdFN0YXJ0LmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgICAgICBBU1NFUlQoZGl2b3RFbmQu
b2Zmc2V0ID49IGRpdm90RW5kLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgICAgICBtX2Rpdm90
ID0gZGl2b3Q7Ci0gICAgICAgICAgICBtX2Rpdm90U3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsK
LSAgICAgICAgICAgIG1fZGl2b3RFbmRPZmZzZXQgPSBlbmRPZmZzZXQ7Ci0gICAgICAgICAgICBt
X2Rpdm90TGluZSA9IGRpdm90TGluZTsKLSAgICAgICAgICAgIG1fZGl2b3RMaW5lU3RhcnQgPSBk
aXZvdExpbmVTdGFydDsKKyAgICAgICAgICAgIG1fZGl2b3RTdGFydCA9IGRpdm90U3RhcnQ7Cisg
ICAgICAgICAgICBtX2Rpdm90RW5kID0gZGl2b3RFbmQ7CiAgICAgICAgIH0KIAotICAgICAgICB1
aW50MzJfdCBkaXZvdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3Q7IH0KLSAgICAgICAgdWludDE2
X3QgZGl2b3RTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3RTdGFydE9mZnNldDsg
fQotICAgICAgICB1aW50MTZfdCBkaXZvdEVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2
b3RFbmRPZmZzZXQ7IH0KLSAgICAgICAgdWludDMyX3QgZGl2b3RMaW5lKCkgY29uc3QgeyByZXR1
cm4gbV9kaXZvdExpbmU7IH0KLSAgICAgICAgdWludDMyX3QgZGl2b3RMaW5lU3RhcnQoKSBjb25z
dCB7IHJldHVybiBtX2Rpdm90TGluZVN0YXJ0OyB9CisgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGl2b3Q7IH0KKyAgICAgICAgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90U3RhcnQ7IH0K
KyAgICAgICAgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKCkgY29uc3QgeyByZXR1cm4g
bV9kaXZvdEVuZDsgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBSZWdpc3RlcklEKiBlbWl0
VGhyb3dSZWZlcmVuY2VFcnJvcihCeXRlY29kZUdlbmVyYXRvciYsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB1aW50MzJfdCBtX2Rpdm90OwotICAgICAg
ICB1aW50MTZfdCBtX2Rpdm90U3RhcnRPZmZzZXQ7Ci0gICAgICAgIHVpbnQxNl90IG1fZGl2b3RF
bmRPZmZzZXQ7Ci0gICAgICAgIHVpbnQzMl90IG1fZGl2b3RMaW5lOwotICAgICAgICB1aW50MzJf
dCBtX2Rpdm90TGluZVN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBtX2Rpdm90OworICAg
ICAgICBKU1RleHRQb3NpdGlvbiBtX2Rpdm90U3RhcnQ7CisgICAgICAgIEpTVGV4dFBvc2l0aW9u
IG1fZGl2b3RFbmQ7CiAgICAgfTsKIAogICAgIGNsYXNzIFRocm93YWJsZVN1YkV4cHJlc3Npb25E
YXRhIDogcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKQEAgLTMwOSw4ICszMDIsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgVGhyb3dh
YmxlU3ViRXhwcmVzc2lvbkRhdGEodW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RM
aW5lU3RhcnQpCi0gICAgICAgICAgICA6IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KQorICAgICAg
ICBUaHJvd2FibGVTdWJFeHByZXNzaW9uRGF0YShjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RFbmQpCisgICAgICAgICAgICA6IFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAgICAgICwgbV9zdWJleHByZXNzaW9uRGl2b3RP
ZmZzZXQoMCkKICAgICAgICAgICAgICwgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KDApCiAgICAg
ICAgICAgICAsIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQoMCkKQEAgLTMxOCwyOCArMzExLDM0
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lk
IHNldFN1YmV4cHJlc3Npb25JbmZvKHVpbnQzMl90IHN1YmV4cHJlc3Npb25EaXZvdCwgdWludDE2
X3Qgc3ViZXhwcmVzc2lvbk9mZnNldCwgdWludDMyX3Qgc3ViZXhwcmVzc2lvbkxpbmUsIHVpbnQz
Ml90IHN1YmV4cHJlc3Npb25MaW5lU3RhcnQpCisgICAgICAgIHZvaWQgc2V0U3ViZXhwcmVzc2lv
bkluZm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN1YmV4cHJlc3Npb25EaXZvdCwgaW50IHN1YmV4
cHJlc3Npb25PZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzdWJleHByZXNz
aW9uRGl2b3QgPD0gZGl2b3QoKSk7CisgICAgICAgICAgICBBU1NFUlQoc3ViZXhwcmVzc2lvbkRp
dm90Lm9mZnNldCA8PSBkaXZvdCgpLm9mZnNldCk7CiAgICAgICAgICAgICAvLyBPdmVyZmxvdyBt
ZWFucyB3ZSBjYW4ndCBkbyB0aGlzIHNhZmVseSwgc28ganVzdCBwb2ludCBhdCB0aGUgcHJpbWFy
eSBkaXZvdCwKICAgICAgICAgICAgIC8vIGRpdm90TGluZSwgb3IgZGl2b3RMaW5lU3RhcnQuCi0g
ICAgICAgICAgICBpZiAoKGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3QpICYgfjB4RkZGRikK
KyAgICAgICAgICAgIGlmICgoZGl2b3QoKSAtIHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQpICYg
fjB4RkZGRikKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoKGRpdm90
TGluZSgpIC0gc3ViZXhwcmVzc2lvbkxpbmUpICYgfjB4RkZGRikKKyAgICAgICAgICAgIGlmICgo
ZGl2b3QoKS5saW5lIC0gc3ViZXhwcmVzc2lvbkRpdm90LmxpbmUpICYgfjB4RkZGRikKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoKGRpdm90TGluZVN0YXJ0KCkgLSBz
dWJleHByZXNzaW9uTGluZVN0YXJ0KSAmIH4weEZGRkYpCisgICAgICAgICAgICBpZiAoKGRpdm90
KCkubGluZVN0YXJ0T2Zmc2V0IC0gc3ViZXhwcmVzc2lvbkRpdm90LmxpbmVTdGFydE9mZnNldCkg
JiB+MHhGRkZGKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fc3ViZXhw
cmVzc2lvbkRpdm90T2Zmc2V0ID0gZGl2b3QoKSAtIHN1YmV4cHJlc3Npb25EaXZvdDsKLSAgICAg
ICAgICAgIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCA9IHN1YmV4cHJlc3Npb25PZmZzZXQ7Ci0g
ICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0ID0gZGl2b3RMaW5lKCkgLSBzdWJl
eHByZXNzaW9uTGluZTsKLSAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNl
dCA9IGRpdm90TGluZVN0YXJ0KCkgLSBzdWJleHByZXNzaW9uTGluZVN0YXJ0OworICAgICAgICAg
ICAgaWYgKChkaXZvdEVuZCgpIC0gc3ViZXhwcmVzc2lvbk9mZnNldCkgJiB+MHhGRkZGKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zm
c2V0ID0gZGl2b3QoKSAtIHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQ7CisgICAgICAgICAgICBt
X3N1YmV4cHJlc3Npb25FbmRPZmZzZXQgPSBkaXZvdEVuZCgpIC0gc3ViZXhwcmVzc2lvbk9mZnNl
dDsKKyAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkxpbmVPZmZzZXQgPSBkaXZvdCgpLmxpbmUg
LSBzdWJleHByZXNzaW9uRGl2b3QubGluZTsKKyAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkxp
bmVTdGFydE9mZnNldCA9IGRpdm90KCkubGluZVN0YXJ0T2Zmc2V0IC0gc3ViZXhwcmVzc2lvbkRp
dm90LmxpbmVTdGFydE9mZnNldDsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIHN1YmV4
cHJlc3Npb25EaXZvdCgpIHsgcmV0dXJuIGRpdm90KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9m
ZnNldDsgfQotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoKSB7IHJl
dHVybiBkaXZvdFN0YXJ0T2Zmc2V0KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldDsgfQot
ICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uRW5kT2Zmc2V0KCkgeyByZXR1cm4gbV9zdWJl
eHByZXNzaW9uRW5kT2Zmc2V0OyB9Ci0gICAgICAgIHVuc2lnbmVkIHN1YmV4cHJlc3Npb25MaW5l
KCkgeyByZXR1cm4gZGl2b3RMaW5lKCkgLSBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0OyB9Ci0g
ICAgICAgIHVuc2lnbmVkIHN1YmV4cHJlc3Npb25MaW5lU3RhcnQoKSB7IHJldHVybiBkaXZvdExp
bmVTdGFydCgpIC0gbV9zdWJleHByZXNzaW9uTGluZVN0YXJ0T2Zmc2V0OyB9CisgICAgICAgIEpT
VGV4dFBvc2l0aW9uIHN1YmV4cHJlc3Npb25EaXZvdCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGludCBuZXdMaW5lID0gZGl2b3QoKS5saW5lIC0gbV9zdWJleHByZXNzaW9uTGluZU9mZnNldDsK
KyAgICAgICAgICAgIGludCBuZXdPZmZzZXQgPSBkaXZvdCgpLm9mZnNldCAtIG1fc3ViZXhwcmVz
c2lvbkRpdm90T2Zmc2V0OworICAgICAgICAgICAgaW50IG5ld0xpbmVTdGFydE9mZnNldCA9IGRp
dm90KCkubGluZVN0YXJ0T2Zmc2V0IC0gbV9zdWJleHByZXNzaW9uTGluZVN0YXJ0T2Zmc2V0Owor
ICAgICAgICAgICAgcmV0dXJuIEpTVGV4dFBvc2l0aW9uKG5ld0xpbmUsIG5ld09mZnNldCwgbmV3
TGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBKU1RleHRQb3NpdGlvbiBzdWJl
eHByZXNzaW9uU3RhcnQoKSB7IHJldHVybiBkaXZvdFN0YXJ0KCk7IH0KKyAgICAgICAgSlNUZXh0
UG9zaXRpb24gc3ViZXhwcmVzc2lvbkVuZCgpIHsgcmV0dXJuIGRpdm90RW5kKCkgLSBzdGF0aWNf
Y2FzdDxpbnQ+KG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7IH0KIAogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgdWludDE2X3QgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQ7CkBAIC0zNTgsOCAr
MzU3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRhdGEodW5zaWduZWQgZGl2b3QsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwg
dW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpCi0gICAgICAgICAgICA6IFRocm93YWJsZUV4cHJlc3Np
b25EYXRhKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBkaXZvdExpbmUsIGRpdm90TGlu
ZVN0YXJ0KQorICAgICAgICBUaHJvd2FibGVQcmVmaXhlZFN1YkV4cHJlc3Npb25EYXRhKGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZW5kKQorICAgICAgICAgICAgOiBUaHJvd2FibGVFeHByZXNzaW9u
RGF0YShkaXZvdCwgc3RhcnQsIGVuZCkKICAgICAgICAgICAgICwgbV9zdWJleHByZXNzaW9uRGl2
b3RPZmZzZXQoMCkKICAgICAgICAgICAgICwgbV9zdWJleHByZXNzaW9uU3RhcnRPZmZzZXQoMCkK
ICAgICAgICAgICAgICwgbV9zdWJleHByZXNzaW9uTGluZU9mZnNldCgwKQpAQCAtMzY3LDI4ICsz
NjYsMzQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IHZvaWQgc2V0U3ViZXhwcmVzc2lvbkluZm8odWludDMyX3Qgc3ViZXhwcmVzc2lvbkRpdm90LCB1
aW50MTZfdCBzdWJleHByZXNzaW9uT2Zmc2V0LCB1aW50MzJfdCBzdWJleHByZXNzaW9uTGluZSwg
dWludDMyX3Qgc3ViZXhwcmVzc2lvbkxpbmVTdGFydCkKKyAgICAgICAgdm9pZCBzZXRTdWJleHBy
ZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3ViZXhwcmVzc2lvbkRpdm90LCBpbnQg
c3ViZXhwcmVzc2lvbk9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN1YmV4
cHJlc3Npb25EaXZvdCA+PSBkaXZvdCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChzdWJleHByZXNz
aW9uRGl2b3Qub2Zmc2V0ID49IGRpdm90KCkub2Zmc2V0KTsKICAgICAgICAgICAgIC8vIE92ZXJm
bG93IG1lYW5zIHdlIGNhbid0IGRvIHRoaXMgc2FmZWx5LCBzbyBqdXN0IHBvaW50IGF0IHRoZSBw
cmltYXJ5IGRpdm90LAogICAgICAgICAgICAgLy8gZGl2b3RMaW5lLCBvciBkaXZvdExpbmVTdGFy
dC4KLSAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90IC0gZGl2b3QoKSkgJiB+MHhG
RkZGKSAKKyAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90Lm9mZnNldCAtIGRpdm90
KCkpICYgfjB4RkZGRikgCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYg
KChzdWJleHByZXNzaW9uRGl2b3QubGluZSAtIGRpdm90KCkubGluZSkgJiB+MHhGRkZGKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkxpbmUg
LSBkaXZvdExpbmUoKSkgJiB+MHhGRkZGKQorICAgICAgICAgICAgaWYgKChzdWJleHByZXNzaW9u
RGl2b3QubGluZVN0YXJ0T2Zmc2V0IC0gZGl2b3QoKS5saW5lU3RhcnRPZmZzZXQpICYgfjB4RkZG
RikKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoKHN1YmV4cHJlc3Np
b25MaW5lU3RhcnQgLSBkaXZvdExpbmVTdGFydCgpKSAmIH4weEZGRkYpCisgICAgICAgICAgICBp
ZiAoKHN1YmV4cHJlc3Npb25PZmZzZXQgLSBkaXZvdFN0YXJ0KCkpICYgfjB4RkZGRikgCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZz
ZXQgPSBzdWJleHByZXNzaW9uRGl2b3QgLSBkaXZvdCgpOwotICAgICAgICAgICAgbV9zdWJleHBy
ZXNzaW9uU3RhcnRPZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0OwotICAgICAgICAgICAgbV9z
dWJleHByZXNzaW9uTGluZU9mZnNldCA9IHN1YmV4cHJlc3Npb25MaW5lIC0gZGl2b3RMaW5lKCk7
Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQgPSBzdWJleHByZXNz
aW9uTGluZVN0YXJ0IC0gZGl2b3RMaW5lU3RhcnQoKTsKKyAgICAgICAgICAgIG1fc3ViZXhwcmVz
c2lvbkRpdm90T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkRpdm90Lm9mZnNldCAtIGRpdm90KCk7Cisg
ICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25TdGFydE9mZnNldCA9IHN1YmV4cHJlc3Npb25PZmZz
ZXQgLSBkaXZvdFN0YXJ0KCk7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25MaW5lT2Zmc2V0
ID0gc3ViZXhwcmVzc2lvbkRpdm90LmxpbmUgLSBkaXZvdCgpLmxpbmU7CisgICAgICAgICAgICBt
X3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQgPSBzdWJleHByZXNzaW9uRGl2b3QubGluZVN0
YXJ0T2Zmc2V0IC0gZGl2b3QoKS5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIH0KIAotICAgICAg
ICB1bnNpZ25lZCBzdWJleHByZXNzaW9uRGl2b3QoKSB7IHJldHVybiBkaXZvdCgpICsgbV9zdWJl
eHByZXNzaW9uRGl2b3RPZmZzZXQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvblN0
YXJ0T2Zmc2V0KCkgeyByZXR1cm4gbV9zdWJleHByZXNzaW9uU3RhcnRPZmZzZXQ7IH0KLSAgICAg
ICAgdW5zaWduZWQgc3ViZXhwcmVzc2lvbkVuZE9mZnNldCgpIHsgcmV0dXJuIGRpdm90RW5kT2Zm
c2V0KCkgKyBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldDsgfQotICAgICAgICB1bnNpZ25lZCBz
dWJleHByZXNzaW9uTGluZSgpIHsgcmV0dXJuIGRpdm90TGluZSgpICsgbV9zdWJleHByZXNzaW9u
TGluZU9mZnNldDsgfQotICAgICAgICB1bnNpZ25lZCBzdWJleHByZXNzaW9uTGluZVN0YXJ0KCkg
eyByZXR1cm4gZGl2b3RMaW5lU3RhcnQoKSArIG1fc3ViZXhwcmVzc2lvbkxpbmVTdGFydE9mZnNl
dDsgfQorICAgICAgICBKU1RleHRQb3NpdGlvbiBzdWJleHByZXNzaW9uRGl2b3QoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQgbmV3TGluZSA9IGRpdm90KCkubGluZSArIG1fc3ViZXhwcmVz
c2lvbkxpbmVPZmZzZXQ7CisgICAgICAgICAgICBpbnQgbmV3T2Zmc2V0ID0gZGl2b3QoKS5vZmZz
ZXQgKyBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldDsKKyAgICAgICAgICAgIGludCBuZXdMaW5l
U3RhcnRPZmZzZXQgPSBkaXZvdCgpLmxpbmVTdGFydE9mZnNldCArIG1fc3ViZXhwcmVzc2lvbkxp
bmVTdGFydE9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBKU1RleHRQb3NpdGlvbihuZXdMaW5l
LCBuZXdPZmZzZXQsIG5ld0xpbmVTdGFydE9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgSlNU
ZXh0UG9zaXRpb24gc3ViZXhwcmVzc2lvblN0YXJ0KCkgeyByZXR1cm4gZGl2b3RTdGFydCgpICsg
c3RhdGljX2Nhc3Q8aW50PihtX3N1YmV4cHJlc3Npb25TdGFydE9mZnNldCk7IH0KKyAgICAgICAg
SlNUZXh0UG9zaXRpb24gc3ViZXhwcmVzc2lvbkVuZCgpIHsgcmV0dXJuIGRpdm90RW5kKCk7IH0K
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdWludDE2X3QgbV9zdWJleHByZXNzaW9uRGl2b3RP
ZmZzZXQ7CkBAIC00MTgsNyArNDIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBS
ZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAg
ICBSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RM
aW5lU3RhcnQpOworICAgICAgICBSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KTsKIAogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudDsg
fQogCkBAIC00MzAsOSArNDM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1Jlc29sdmVOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIG1faWRlbnQ7Ci0gICAgICAgIHVpbnQzMl90IG1fc3RhcnRPZmZzZXQ7
Ci0gICAgICAgIHVpbnQzMl90IG1fZGl2b3RMaW5lOwotICAgICAgICB1aW50MzJfdCBtX2Rpdm90
TGluZVN0YXJ0OworICAgICAgICBKU1RleHRQb3NpdGlvbiBtX3N0YXJ0OwogICAgIH07CiAKICAg
ICBjbGFzcyBFbGVtZW50Tm9kZSA6IHB1YmxpYyBQYXJzZXJBcmVuYUZyZWVhYmxlIHsKQEAgLTU3
OSw3ICs1ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEV2YWxGdW5jdGlvbkNh
bGxOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lv
bkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVu
c2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7
CkBAIC01ODksNyArNTkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jdGlv
bkNhbGxWYWx1ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBBcmd1bWVudHNOb2Rl
KiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAg
ICBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lv
bk5vZGUqLCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTYwMCw3ICs2
MDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQ2FsbFJlc29sdmVO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCB1bnNp
Z25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5z
aWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEZ1bmN0
aW9uQ2FsbFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZp
ZXImLCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5k
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTYxMSw3ICs2MTQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAKICAgICBjbGFzcyBGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZVN1YkV4cHJlc3Np
b25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9k
ZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWdu
ZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUq
IHN1YnNjcmlwdCwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC02MjMs
NyArNjI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jdGlvbkNhbGxEb3RO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlU3ViRXhwcmVzc2lv
bkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYs
IEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVT
dGFydCk7CisgICAgICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2Rl
KiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTYzNiw3ICs2MzksNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGNsYXNzIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlIDogcHVibGljIEZ1bmN0aW9u
Q2FsbERvdE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQg
ZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYs
IEFyZ3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNjQ0LDcgKzY0Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNsYXNzIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9k
ZSA6IHB1YmxpYyBGdW5jdGlvbkNhbGxEb3ROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFw
cGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
Tm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEFwcGx5RnVuY3Rp
b25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
OwpAQCAtNjUyLDcgKzY1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVsZXRl
UmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHBy
ZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBEZWxldGVSZXNvbHZlTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgdW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGRpdm90TGlu
ZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBEZWxldGVSZXNvbHZlTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKTsKQEAgLTY2Miw3ICs2NjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERl
bGV0ZUJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxl
RXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRGVsZXRlQnJhY2tldE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25O
b2RlKiBzdWJzY3JpcHQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0
YXJ0KTsKKyAgICAgICAgRGVsZXRlQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCk7CkBAIC02NzMsNyArNjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBEZWxldGVEb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dh
YmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRGVsZXRlRG90Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRp
ZmllciYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAg
ICAgICAgRGVsZXRlRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC03MjYs
NyArNzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQcmVmaXhOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9u
RGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVu
c2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgUHJlZml4Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RFbmQpOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCk7CkBAIC03NDAsNyArNzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQb3N0
Zml4Tm9kZSA6IHB1YmxpYyBQcmVmaXhOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBvc3Rm
aXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3Is
IHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAg
UG9zdGZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBPcGVy
YXRvciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTk4Myw3ICs5ODYsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIFJlYWRNb2RpZnlSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIFJlYWRNb2RpZnlSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVTdGFydCk7Cisg
ICAgICAgIFJlYWRNb2RpZnlSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyJiwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEwMDcsNyArMTAxMCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVhZE1vZGlmeUJyYWNrZXROb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2Ny
aXB0LCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1YnNjcmlwdEhhc0Fz
c2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExpbmUs
IHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgUmVhZE1vZGlmeUJyYWNrZXROb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9u
Tm9kZSogc3Vic2NyaXB0LCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHN1
YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCk7CkBAIC0xMDIyLDcgKzEwMjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIEFzc2lnbkJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgQXNzaWduQnJh
Y2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4
cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBzdWJz
Y3JpcHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEFzc2lnbkJyYWNr
ZXROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHBy
ZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2Ny
aXB0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKTsKQEAgLTEwMzYsNyArMTAzOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgQXNzaWduRG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFzc2lnbkRvdE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZp
ZXImLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgdW5z
aWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIHVu
c2lnbmVkIGRpdm90TGluZSwgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQpOworICAgICAgICBBc3Np
Z25Eb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBj
b25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDQ5LDcgKzEwNTIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlYWRNb2RpZnlEb3ROb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgUmVhZE1vZGlmeURvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBPcGVyYXRvciwgRXhwcmVzc2lv
bk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBkaXZvdExp
bmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgUmVhZE1vZGlmeURvdE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50
aWZpZXImLCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC0xMDYzLDcgKzEwNjYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFzc2lnbkVycm9yTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEFzc2lnbkVycm9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgdW5zaWduZWQg
ZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEFzc2lnbkVycm9y
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RFbmQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTIz
OSw3ICsxMjQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRm9ySW5Ob2RlIDogcHVi
bGljIFN0YXRlbWVudE5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAg
cHVibGljOgogICAgICAgICBGb3JJbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqKTsKLSAgICAgICAgRm9y
SW5Ob2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4
cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgdW5zaWduZWQg
ZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQgZGl2b3RMaW5l
LCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCk7CisgICAgICAgIEZvckluTm9kZShWTSosIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIEV4
cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdEVuZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTEyOTIsMTYg
KzEyOTUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBXaXRoTm9kZSA6IHB1Ymxp
YyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFdpdGhOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIHVpbnQzMl90
IGRpdm90LCB1bnNpZ25lZCBkaXZvdExpbmUsIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0LCB1aW50
MzJfdCBleHByZXNzaW9uTGVuZ3RoKTsKKyAgICAgICAgV2l0aE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCB1aW50MzJfdCBleHByZXNzaW9uTGVuZ3RoKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApOwogCiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHI7CiAgICAg
ICAgIFN0YXRlbWVudE5vZGUqIG1fc3RhdGVtZW50OwotICAgICAgICB1aW50MzJfdCBtX2Rpdm90
OwotICAgICAgICB1aW50MzJfdCBtX2Rpdm90TGluZTsKLSAgICAgICAgdWludDMyX3QgbV9kaXZv
dExpbmVTdGFydDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdDsKICAgICAgICAgdWlu
dDMyX3QgbV9leHByZXNzaW9uTGVuZ3RoOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDE1MzQyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksOCArNjks
NiBAQCBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKFZNKiB2bSwgY29uc3QgCiAgICAgLCBtX3N0
YWNrKCp2bSwgd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkpCiAgICAgLCBtX2hhc1N0YWNrT3ZlcmZs
b3coZmFsc2UpCiAgICAgLCBtX2FsbG93c0luKHRydWUpCi0gICAgLCBtX2xhc3RMaW5lKDApCi0g
ICAgLCBtX2xhc3RUb2tlbkVuZCgwKQogICAgICwgbV9hc3NpZ25tZW50Q291bnQoMCkKICAgICAs
IG1fbm9uTEhTQ291bnQoMCkKICAgICAsIG1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZChzb3VyY2Uu
cHJvdmlkZXIoKS0+aXNWYWxpZCgpKQpAQCAtMTMxLDIxICsxMjksMjAgQEAgU3RyaW5nIFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKCkKICAgICAgICAgZmVhdHVyZXMgfD0gU2hhZG93c0Fy
Z3VtZW50c0ZlYXR1cmU7CiAKICAgICBkaWRGaW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBj
b250ZXh0LnZhckRlY2xhcmF0aW9ucygpLCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgZmVh
dHVyZXMsCi0gICAgICAgICAgICAgICAgICAgICBtX2xhc3RMaW5lLCBjb250ZXh0Lm51bUNvbnN0
YW50cygpLCBjYXB0dXJlZFZhcmlhYmxlcyk7CisgICAgICAgIGNvbnRleHQubnVtQ29uc3RhbnRz
KCksIGNhcHR1cmVkVmFyaWFibGVzKTsKIAogICAgIHJldHVybiBwYXJzZUVycm9yOwogfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlk
RmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyogc291cmNlRWxlbWVudHMsIFBhcnNlckFyZW5h
RGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiB2YXJTdGFjaywgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1
bmN0aW9uU3RhY2s+KiBmdW5jU3RhY2ssIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IGxhc3RM
aW5lLCBpbnQgbnVtQ29uc3RhbnRzLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcnMpCisgICAg
UGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiogZnVuY1N0
YWNrLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMsIElkZW50aWZpZXJT
ZXQmIGNhcHR1cmVkVmFycykKIHsKICAgICBtX3NvdXJjZUVsZW1lbnRzID0gc291cmNlRWxlbWVu
dHM7CiAgICAgbV92YXJEZWNsYXJhdGlvbnMgPSB2YXJTdGFjazsKICAgICBtX2Z1bmNEZWNsYXJh
dGlvbnMgPSBmdW5jU3RhY2s7CiAgICAgbV9jYXB0dXJlZFZhcmlhYmxlcy5zd2FwKGNhcHR1cmVk
VmFycyk7CiAgICAgbV9mZWF0dXJlcyA9IGZlYXR1cmVzOwotICAgIG1fbGFzdExpbmUgPSBsYXN0
TGluZTsKICAgICBtX251bUNvbnN0YW50cyA9IG51bUNvbnN0YW50czsKIH0KIApAQCAtMjAzLDcg
KzIwMCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBp
bnQgc2NyYXRjaDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBzY3JhdGNoMSA9IDA7CiAgICAgVHJl
ZUV4cHJlc3Npb24gc2NyYXRjaDIgPSAwOwotICAgIGludCBzY3JhdGNoMyA9IDA7CisgICAgSlNU
ZXh0UG9zaXRpb24gc2NyYXRjaDM7CiAgICAgVHJlZUV4cHJlc3Npb24gdmFyRGVjbHMgPSBwYXJz
ZVZhckRlY2xhcmF0aW9uTGlzdChjb250ZXh0LCBzY3JhdGNoLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IHNjcmF0Y2gzLCBzY3JhdGNoMywgc2NyYXRjaDMpOwogICAgIGZhaWxJZlRydWUoaGFzRXJyb3Io
KSk7CiAgICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKQEAgLTI2OSw3ICsyNjYsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVF
eHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVl
QnVpbGRlciYgY29udGV4dCwgaW50JiBkZWNsYXJhdGlvbnMsIGNvbnN0IElkZW50aWZpZXIqJiBs
YXN0SWRlbnQsIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIGludCYgaWRlbnRTdGFy
dCwgaW50JiBpbml0U3RhcnQsIGludCYgaW5pdEVuZCkKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlVmFyRGVjbGFyYXRp
b25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBpbnQmIGRlY2xhcmF0aW9ucywgY29uc3QgSWRl
bnRpZmllciomIGxhc3RJZGVudCwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwgSlNU
ZXh0UG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0U3RhcnQsIEpTVGV4
dFBvc2l0aW9uJiBpbml0RW5kKQogewogICAgIFRyZWVFeHByZXNzaW9uIHZhckRlY2xzID0gMDsK
ICAgICBkbyB7CkBAIC0yNzgsNyArMjc1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzcwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIG1hdGNoT3JGYWlsKElERU5U
KTsKICAgICAgICAgCi0gICAgICAgIGludCB2YXJTdGFydCA9IHRva2VuU3RhcnQoKTsKKyAgICAg
ICAgSlNUZXh0UG9zaXRpb24gdmFyU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAg
ICAgaWRlbnRTdGFydCA9IHZhclN0YXJ0OwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1l
ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgIGxhc3RJZGVudCA9IG5hbWU7CkBAIC0y
ODcsMTcgKzI4NCwxNSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
CiAgICAgICAgIGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoZGVjbGFyZVZh
cmlhYmxlKG5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSB2YXJpYWJsZSBuYW1lZCIsIG5hbWUtPmlt
cGwoKSwgImluIHN0cmljdCBtb2RlLiIpOwogICAgICAgICBjb250ZXh0LmFkZFZhcihuYW1lLCAo
aGFzSW5pdGlhbGl6ZXIgfHwgKCFtX2FsbG93c0luICYmIG1hdGNoKElOVE9LRU4pKSkgPyBEZWNs
YXJhdGlvblN0YWNrczo6SGFzSW5pdGlhbGl6ZXIgOiAwKTsKICAgICAgICAgaWYgKGhhc0luaXRp
YWxpemVyKSB7Ci0gICAgICAgICAgICBpbnQgdmFyRGl2b3QgPSB0b2tlblN0YXJ0KCkgKyAxOwot
ICAgICAgICAgICAgdW5zaWduZWQgdmFyTGluZSA9IHRva2VuTGluZSgpOyAKLSAgICAgICAgICAg
IHVuc2lnbmVkIHZhckxpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7Ci0gICAgICAgICAgICBp
bml0U3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiB2YXJE
aXZvdCA9IHRva2VuU3RhcnRQb3NpdGlvbigpICsgMTsKKyAgICAgICAgICAgIGluaXRTdGFydCA9
IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9u
dEJ1aWxkU3RyaW5ncyk7IC8vIGNvbnN1bWUgJz0nCiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lv
biBpbml0aWFsaXplciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAg
ICAgICAgICBpbml0RW5kID0gbGFzdFRva2VuRW5kKCk7CisgICAgICAgICAgICBpbml0RW5kID0g
bGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgICAgIGxhc3RJbml0aWFsaXplciA9IGlu
aXRpYWxpemVyOwogICAgICAgICAgICAgZmFpbElmRmFsc2UoaW5pdGlhbGl6ZXIpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBub2RlID0gY29udGV4dC5jcmVhdGVB
c3NpZ25SZXNvbHZlKGxvY2F0aW9uLCAqbmFtZSwgaW5pdGlhbGl6ZXIsIHZhclN0YXJ0LCB2YXJE
aXZvdCwgbGFzdFRva2VuRW5kKCksIHZhckxpbmUsIHZhckxpbmVTdGFydCk7CisgICAgICAgICAg
ICBUcmVlRXhwcmVzc2lvbiBub2RlID0gY29udGV4dC5jcmVhdGVBc3NpZ25SZXNvbHZlKGxvY2F0
aW9uLCAqbmFtZSwgaW5pdGlhbGl6ZXIsIHZhclN0YXJ0LCB2YXJEaXZvdCwgbGFzdFRva2VuRW5k
UG9zaXRpb24oKSk7CiAgICAgICAgICAgICBpZiAoIXZhckRlY2xzKQogICAgICAgICAgICAgICAg
IHZhckRlY2xzID0gbm9kZTsKICAgICAgICAgICAgIGVsc2UKQEAgLTM0NSwxMCArMzQwLDggQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIGNvbnN1bWVPckZh
aWwoT1BFTlBBUkVOKTsKICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwogICAg
IGludCBkZWNsYXJhdGlvbnMgPSAwOwotICAgIGludCBkZWNsc1N0YXJ0ID0gMDsKLSAgICBpbnQg
ZGVjbHNFbmQgPSAwOwotICAgIHVuc2lnbmVkIGRlY2xzTGluZSA9IDA7Ci0gICAgdW5zaWduZWQg
ZGVjbHNMaW5lU3RhcnQgPSAwOworICAgIEpTVGV4dFBvc2l0aW9uIGRlY2xzU3RhcnQ7CisgICAg
SlNUZXh0UG9zaXRpb24gZGVjbHNFbmQ7CiAgICAgVHJlZUV4cHJlc3Npb24gZGVjbHMgPSAwOwog
ICAgIGlmIChtYXRjaChWQVIpKSB7CiAgICAgICAgIC8qCkBAIC0zNTksOCArMzUyLDggQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICBjb25zdCBJZGVu
dGlmaWVyKiBmb3JJblRhcmdldCA9IDA7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGZvckluSW5p
dGlhbGl6ZXIgPSAwOwogICAgICAgICBtX2FsbG93c0luID0gZmFsc2U7Ci0gICAgICAgIGludCBp
bml0U3RhcnQgPSAwOwotICAgICAgICBpbnQgaW5pdEVuZCA9IDA7CisgICAgICAgIEpTVGV4dFBv
c2l0aW9uIGluaXRTdGFydDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gaW5pdEVuZDsKICAgICAg
ICAgZGVjbHMgPSBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChjb250ZXh0LCBkZWNsYXJhdGlvbnMs
IGZvckluVGFyZ2V0LCBmb3JJbkluaXRpYWxpemVyLCBkZWNsc1N0YXJ0LCBpbml0U3RhcnQsIGlu
aXRFbmQpOwogICAgICAgICBtX2FsbG93c0luID0gdHJ1ZTsKICAgICAgICAgZmFpbElmVHJ1ZSho
YXNFcnJvcigpKTsKQEAgLTM3MiwxNCArMzY1LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgZmFpbElmRmFsc2UoZGVjbGFyYXRpb25zID09IDEp
OwogICAgICAgICAKICAgICAgICAgLy8gSGFuZGxlIGZvci1pbiB3aXRoIHZhciBkZWNsYXJhdGlv
bgotICAgICAgICBpbnQgaW5Mb2NhdGlvbiA9IHRva2VuU3RhcnQoKTsKLSAgICAgICAgdW5zaWdu
ZWQgaW5MaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgICAgIHVuc2lnbmVkIGluTGluZVN0YXJ0ID0g
dG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gaW5Mb2NhdGlvbiA9IHRv
a2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBjb25zdW1lT3JGYWlsKElOVE9LRU4pOwogICAg
ICAgICAKICAgICAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lvbihjb250
ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2UoZXhwcik7Ci0gICAgICAgIGludCBleHByRW5kID0g
bGFzdFRva2VuRW5kKCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJFbmQgPSBsYXN0VG9r
ZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAKICAgICAgICAgaW50IGVuZExpbmUgPSB0b2tlbkxp
bmUoKTsKICAgICAgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKQEAgLTM5MCwxNiArMzgx
LDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAg
ZW5kTG9vcCgpOwogICAgICAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOwogICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBmb3JJblRhcmdl
dCwgZm9ySW5Jbml0aWFsaXplciwgZXhwciwgc3RhdGVtZW50LCBkZWNsc1N0YXJ0LCBpbkxvY2F0
aW9uLCBleHByRW5kLCBpbml0U3RhcnQsIGluaXRFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgaW5M
aW5lLCBpbkxpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZvckluTG9v
cChsb2NhdGlvbiwgZm9ySW5UYXJnZXQsIGZvckluSW5pdGlhbGl6ZXIsIGV4cHIsIHN0YXRlbWVu
dCwgZGVjbHNTdGFydCwgaW5Mb2NhdGlvbiwgZXhwckVuZCwgaW5pdFN0YXJ0LCBpbml0RW5kLCBz
dGFydExpbmUsIGVuZExpbmUpOwogICAgIH0KICAgICAKICAgICBpZiAoIW1hdGNoKFNFTUlDT0xP
TikpIHsKICAgICAgICAgbV9hbGxvd3NJbiA9IGZhbHNlOwotICAgICAgICBkZWNsc1N0YXJ0ID0g
dG9rZW5TdGFydCgpOworICAgICAgICBkZWNsc1N0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7
CiAgICAgICAgIGRlY2xzID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICBkZWNs
c0VuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICBkZWNsc0xpbmUgPSBsYXN0VG9rZW5MaW5l
KCk7Ci0gICAgICAgIGRlY2xzTGluZVN0YXJ0ID0gbGFzdFRva2VuTGluZVN0YXJ0KCk7CisgICAg
ICAgIGRlY2xzRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgbV9hbGxvd3NJ
biA9IHRydWU7CiAgICAgICAgIGZhaWxJZkZhbHNlKGRlY2xzKTsKICAgICB9CkBAIC00MzYsNyAr
NDI1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIGNv
bnN1bWVPckZhaWwoSU5UT0tFTik7CiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhw
cmVzc2lvbihjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBpbnQgZXhwckVu
ZCA9IGxhc3RUb2tlbkVuZCgpOworICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJFbmQgPSBsYXN0VG9r
ZW5FbmRQb3NpdGlvbigpOwogICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CiAgICAgY29u
c3VtZU9yRmFpbChDTE9TRVBBUkVOKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAw
OwpAQCAtNDQ1LDcgKzQzNCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWUKICAgICBlbmRMb29wKCk7CiAgICAgZmFpbElmRmFsc2Uoc3RhdGVtZW50KTsKICAgICAK
LSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGb3JJbkxvb3AobG9jYXRpb24sIGRlY2xzLCBleHBy
LCBzdGF0ZW1lbnQsIGRlY2xzU3RhcnQsIGRlY2xzRW5kLCBleHByRW5kLCBzdGFydExpbmUsIGVu
ZExpbmUsIGRlY2xzTGluZSwgZGVjbHNMaW5lU3RhcnQpOworICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUZvckluTG9vcChsb2NhdGlvbiwgZGVjbHMsIGV4cHIsIHN0YXRlbWVudCwgZGVjbHNTdGFy
dCwgZGVjbHNFbmQsIGV4cHJFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC00NTMsMjYgKzQ0MiwyMSBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB7CiAgICAgQVNTRVJUKG1hdGNoKEJSRUFLKSk7
CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7Ci0gICAgaW50
IHN0YXJ0Q29sID0gdG9rZW5TdGFydCgpOwotICAgIGludCBlbmRDb2wgPSB0b2tlbkVuZCgpOwot
ICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgZW5kTGluZSA9IHRva2Vu
TGluZSgpOwotICAgIHVuc2lnbmVkIGVuZExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7Cisg
ICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICBKU1Rl
eHRQb3NpdGlvbiBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwogICAgIAog
ICAgIGlmIChhdXRvU2VtaUNvbG9uKCkpIHsKICAgICAgICAgZmFpbElmRmFsc2VXaXRoTWVzc2Fn
ZShicmVha0lzVmFsaWQoKSwgIidicmVhaycgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBzd2l0Y2gg
b3IgbG9vcCBzdGF0ZW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtT
dGF0ZW1lbnQobG9jYXRpb24sIHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwgZW5kTGluZSwg
ZW5kTGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1l
bnQobG9jYXRpb24sIHN0YXJ0LCBlbmQpOwogICAgIH0KICAgICBtYXRjaE9yRmFpbChJREVOVCk7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAg
ICBmYWlsSWZGYWxzZVdpdGhOYW1lQW5kTWVzc2FnZShnZXRMYWJlbChpZGVudCksICJMYWJlbCIs
IGlkZW50LT5pbXBsKCksICJpcyBub3QgZGVmaW5lZCIpOwotICAgIGVuZENvbCA9IHRva2VuRW5k
KCk7Ci0gICAgZW5kTGluZSA9IHRva2VuTGluZSgpOwotICAgIGVuZExpbmVTdGFydCA9IHRva2Vu
TGluZVN0YXJ0KCk7CisgICAgZW5kID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQoKTsK
ICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwotICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUJyZWFrU3RhdGVtZW50KGxvY2F0aW9uLCBpZGVudCwgc3RhcnRDb2wsIGVuZENvbCwgc3Rh
cnRMaW5lLCBlbmRMaW5lLCBlbmRMaW5lU3RhcnQpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUJyZWFrU3RhdGVtZW50KGxvY2F0aW9uLCBpZGVudCwgc3RhcnQsIGVuZCk7CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC00ODAsMjggKzQ2NCwyMyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB7CiAgICAgQVNTRVJUKG1hdGNoKENPTlRJ
TlVFKSk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7Ci0g
ICAgaW50IHN0YXJ0Q29sID0gdG9rZW5TdGFydCgpOwotICAgIGludCBlbmRDb2wgPSB0b2tlbkVu
ZCgpOwotICAgIGludCBzdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKLSAgICBpbnQgZW5kTGluZSA9
IHRva2VuTGluZSgpOwotICAgIHVuc2lnbmVkIGVuZExpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0
KCk7CisgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAg
ICBKU1RleHRQb3NpdGlvbiBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwog
ICAgIAogICAgIGlmIChhdXRvU2VtaUNvbG9uKCkpIHsKICAgICAgICAgZmFpbElmRmFsc2VXaXRo
TWVzc2FnZShjb250aW51ZUlzVmFsaWQoKSwgIidjb250aW51ZScgaXMgb25seSB2YWxpZCBpbnNp
ZGUgYSBsb29wIHN0YXRlbWVudCIpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250
aW51ZVN0YXRlbWVudChsb2NhdGlvbiwgc3RhcnRDb2wsIGVuZENvbCwgc3RhcnRMaW5lLCBlbmRM
aW5lLCBlbmRMaW5lU3RhcnQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250aW51
ZVN0YXRlbWVudChsb2NhdGlvbiwgc3RhcnQsIGVuZCk7CiAgICAgfQogICAgIG1hdGNoT3JGYWls
KElERU5UKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlk
ZW50OwogICAgIFNjb3BlTGFiZWxJbmZvKiBsYWJlbCA9IGdldExhYmVsKGlkZW50KTsKICAgICBm
YWlsSWZGYWxzZVdpdGhOYW1lQW5kTWVzc2FnZShsYWJlbCwgIkxhYmVsIiwgaWRlbnQtPmltcGwo
KSwgImlzIG5vdCBkZWZpbmVkIik7CiAgICAgZmFpbElmRmFsc2VXaXRoTWVzc2FnZShsYWJlbC0+
bV9pc0xvb3AsICInY29udGludWUnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBzdGF0ZW1l
bnQiKTsKLSAgICBlbmRDb2wgPSB0b2tlbkVuZCgpOwotICAgIGVuZExpbmUgPSB0b2tlbkxpbmUo
KTsKLSAgICBlbmRMaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgpOworICAgIGVuZCA9IHRva2Vu
RW5kUG9zaXRpb24oKTsKICAgICBuZXh0KCk7CiAgICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xv
bigpKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250aW51ZVN0YXRlbWVudChsb2NhdGlv
biwgaWRlbnQsIHN0YXJ0Q29sLCBlbmRDb2wsIHN0YXJ0TGluZSwgZW5kTGluZSwgZW5kTGluZVN0
YXJ0KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250aW51ZVN0YXRlbWVudChsb2NhdGlv
biwgaWRlbnQsIHN0YXJ0LCBlbmQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBl
PgpAQCAtNTEwLDI5ICs0ODksMjQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZQogICAgIEFTU0VSVChtYXRjaChSRVRVUk4pKTsKICAgICBKU1Rva2VuTG9jYXRpb24g
bG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICBmYWlsSWZGYWxzZShjdXJyZW50U2NvcGUo
KS0+aXNGdW5jdGlvbigpKTsKLSAgICBpbnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAg
aW50IGVuZExpbmUgPSBzdGFydExpbmU7Ci0gICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwot
ICAgIGludCBlbmQgPSB0b2tlbkVuZCgpOwotICAgIHVuc2lnbmVkIGRpdm90TGluZSA9IHRva2Vu
TGluZSgpOwotICAgIHVuc2lnbmVkIGRpdm90TGluZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsK
KyAgICBKU1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOworICAgIEpT
VGV4dFBvc2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBuZXh0KCk7CiAgICAg
Ly8gV2UgZG8gdGhlIGF1dG8gc2VtaWNvbG9uIGNoZWNrIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBh
cnNlIGFuIGV4cHJlc3Npb24KICAgICAvLyBhcyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgYSBsaW5l
IGJyZWFrIGFmdGVyIHRoZSByZXR1cm4gY29ycmVjdGx5IHRlcm1pbmF0ZXMKICAgICAvLyB0aGUg
c3RhdGVtZW50CiAgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikpCi0gICAgICAgIGVuZExpbmUgID0g
dG9rZW5MaW5lKCk7CisgICAgICAgIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKKwogICAgIGlm
IChhdXRvU2VtaUNvbG9uKCkpCi0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJldHVyblN0
YXRlbWVudChsb2NhdGlvbiwgMCwgc3RhcnQsIGVuZCwgc3RhcnRMaW5lLCBlbmRMaW5lLCBkaXZv
dExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmV0
dXJuU3RhdGVtZW50KGxvY2F0aW9uLCAwLCBzdGFydCwgZW5kKTsKICAgICBUcmVlRXhwcmVzc2lv
biBleHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGV4cHIp
OwotICAgIGVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgIGRpdm90TGluZSA9IGxhc3RUb2tlbkxp
bmUoKTsKLSAgICBkaXZvdExpbmVTdGFydCA9IGxhc3RUb2tlbkxpbmVTdGFydCgpOworICAgIGVu
ZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikpCi0g
ICAgICAgIGVuZExpbmUgID0gdG9rZW5MaW5lKCk7CisgICAgICAgIGVuZCAgPSB0b2tlbkVuZFBv
c2l0aW9uKCk7CiAgICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xvbigpKTsKLSAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQobG9jYXRpb24sIGV4cHIsIHN0YXJ0LCBlbmQs
IHN0YXJ0TGluZSwgZW5kTGluZSwgZGl2b3RMaW5lLCBkaXZvdExpbmVTdGFydCk7CisgICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGxvY2F0aW9uLCBleHByLCBzdGFydCwg
ZW5kKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTU0MCwyMSArNTE0
LDE3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHsKICAgICBB
U1NFUlQobWF0Y2goVEhST1cpKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5M
b2NhdGlvbigpKTsKLSAgICBpbnQgZVN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgIGludCBzdGFy
dExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3Rh
cnRQb3NpdGlvbigpOwogICAgIG5leHQoKTsKICAgICAKICAgICBmYWlsSWZUcnVlKGF1dG9TZW1p
Q29sb24oKSk7CiAgICAgCiAgICAgVHJlZUV4cHJlc3Npb24gZXhwciA9IHBhcnNlRXhwcmVzc2lv
bihjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShleHByKTsKLSAgICBpbnQgZUVuZCA9IGxhc3RU
b2tlbkVuZCgpOwotICAgIHVuc2lnbmVkIGRpdm90TGluZSA9IGxhc3RUb2tlbkxpbmUoKTsKLSAg
ICB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCA9IGxhc3RUb2tlbkxpbmVTdGFydCgpOwotICAgIGlu
dCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgSlNUZXh0UG9zaXRpb24gZW5kID0gbGFzdFRv
a2VuRW5kUG9zaXRpb24oKTsKICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCkpOwogICAg
IAotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVRocm93U3RhdGVtZW50KGxvY2F0aW9uLCBleHBy
LCBlU3RhcnQsIGVFbmQsIHN0YXJ0TGluZSwgZW5kTGluZSwgZGl2b3RMaW5lLCBkaXZvdExpbmVT
dGFydCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlVGhyb3dTdGF0ZW1lbnQobG9jYXRpb24s
IGV4cHIsIHN0YXJ0LCBlbmQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpA
QCAtNTcwLDE2ICs1NDAsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZQogICAgIGludCBzdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBUcmVlRXhwcmVzc2lvbiBl
eHByID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGV4cHIpOwot
ICAgIGludCBlbmQgPSBsYXN0VG9rZW5FbmQoKTsKLSAgICB1bnNpZ25lZCBkaXZvdExpbmUgPSBs
YXN0VG9rZW5MaW5lKCk7Ci0gICAgdW5zaWduZWQgZGl2b3RMaW5lU3RhcnQgPSBsYXN0VG9rZW5M
aW5lU3RhcnQoKTsKKyAgICBKU1RleHRQb3NpdGlvbiBlbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpOwogICAgIGludCBlbmRMaW5lID0gdG9rZW5MaW5lKCk7CiAgICAgY29uc3VtZU9yRmFpbChD
TE9TRVBBUkVOKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiB1bnVzZWQgPSAwOwogICAgIFRyZWVT
dGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2VkKTsKICAg
ICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOwogICAgIAotICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZVdpdGhTdGF0ZW1lbnQobG9jYXRpb24sIGV4cHIsIHN0YXRlbWVudCwgc3RhcnQsIGVuZCwgc3Rh
cnRMaW5lLCBlbmRMaW5lLCBkaXZvdExpbmUsIGRpdm90TGluZVN0YXJ0KTsKKyAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVXaXRoU3RhdGVtZW50KGxvY2F0aW9uLCBleHByLCBzdGF0ZW1lbnQsIHN0
YXJ0LCBlbmQsIHN0YXJ0TGluZSwgZW5kTGluZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBM
ZXhlclR5cGU+CkBAIC02NjYsNyArNjM0LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZQogICAgIAogICAgIHRyeUJsb2NrID0gcGFyc2VCbG9ja1N0YXRlbWVudChj
b250ZXh0KTsKICAgICBmYWlsSWZGYWxzZSh0cnlCbG9jayk7Ci0gICAgaW50IGxhc3RMaW5lID0g
bV9sYXN0TGluZTsKKyAgICBpbnQgbGFzdExpbmUgPSBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxp
bmU7CiAgICAgCiAgICAgaWYgKG1hdGNoKENBVENIKSkgewogICAgICAgICBjdXJyZW50U2NvcGUo
KS0+c2V0TmVlZHNGdWxsQWN0aXZhdGlvbigpOwpAQCAtNzE4LDEzICs2ODYsMTMgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIG5leHQoKTsKICAgICBpZiAo
bWF0Y2goQ0xPU0VCUkFDRSkpIHsKICAgICAgICAgbmV4dCgpOwotICAgICAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVCbG9ja1N0YXRlbWVudChsb2NhdGlvbiwgMCwgc3RhcnQsIG1fbGFzdExpbmUp
OworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCbG9ja1N0YXRlbWVudChsb2NhdGlvbiwg
MCwgc3RhcnQsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSk7CiAgICAgfQogICAgIFRyZWVT
b3VyY2VFbGVtZW50cyBzdWJ0cmVlID0gcGFyc2VTb3VyY2VFbGVtZW50czxEb250Q2hlY2tGb3JT
dHJpY3RNb2RlPihjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShzdWJ0cmVlKTsKICAgICBtYXRj
aE9yRmFpbChDTE9TRUJSQUNFKTsKICAgICBuZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlQmxvY2tTdGF0ZW1lbnQobG9jYXRpb24sIHN1YnRyZWUsIHN0YXJ0LCBtX2xhc3RMaW5lKTsK
KyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCbG9ja1N0YXRlbWVudChsb2NhdGlvbiwgc3VidHJl
ZSwgc3RhcnQsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+CkBAIC05MzcsMjQgKzkwNSwyMCBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25J
bmZvPEZ1bmN0aW9uTmVlZHNOYW1lLCB0cnVlPihjb250ZXh0LCBuYW1lLCBwYXJhbWV0ZXJzLCBi
b2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIGJv
ZHlTdGFydENvbHVtbikpKTsKICAgICBmYWlsSWZGYWxzZShuYW1lKTsKICAgICBmYWlsSWZGYWxz
ZUlmU3RyaWN0KGRlY2xhcmVWYXJpYWJsZShuYW1lKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9jYXRpb24sIG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9w
ZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGlu
ZSwgYm9keVN0YXJ0Q29sdW1uKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jRGVjbFN0
YXRlbWVudChsb2NhdGlvbiwgbmFtZSwgYm9keSwgcGFyYW1ldGVycywgb3BlbkJyYWNlT2Zmc2V0
LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9u
LmxpbmUsIGJvZHlTdGFydENvbHVtbik7CiB9CiAKIHN0cnVjdCBMYWJlbEluZm8gewotICAgIExh
YmVsSW5mbyhjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCwgdW5zaWduZWQgZGl2b3RMaW5lLCB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCkKKyAgICBM
YWJlbEluZm8oY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICA6IG1faWRlbnQoaWRlbnQpCiAg
ICAgLCBtX3N0YXJ0KHN0YXJ0KQogICAgICwgbV9lbmQoZW5kKQotICAgICwgbV9kaXZvdExpbmUo
ZGl2b3RMaW5lKQotICAgICwgbV9kaXZvdExpbmVTdGFydChkaXZvdExpbmVTdGFydCkKICAgICB7
CiAgICAgfQogICAgIAogICAgIGNvbnN0IElkZW50aWZpZXIqIG1faWRlbnQ7Ci0gICAgdW5zaWdu
ZWQgbV9zdGFydDsKLSAgICB1bnNpZ25lZCBtX2VuZDsKLSAgICB1bnNpZ25lZCBtX2Rpdm90TGlu
ZTsKLSAgICB1bnNpZ25lZCBtX2Rpdm90TGluZVN0YXJ0OworICAgIEpTVGV4dFBvc2l0aW9uIG1f
c3RhcnQ7CisgICAgSlNUZXh0UG9zaXRpb24gbV9lbmQ7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgTGV4ZXJUeXBlPgpAQCAtOTY3LDggKzkzMSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVN0YXRlbWUKICAgICBWZWN0b3I8TGFiZWxJbmZvPiBsYWJlbHM7CiAgICAgSlNU
b2tlbkxvY2F0aW9uIGxvY2F0aW9uOwogICAgIGRvIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gdG9r
ZW5TdGFydCgpOwotICAgICAgICBpbnQgc3RhcnRpbmdMaW5lID0gdG9rZW5MaW5lKCk7CisgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAg
IGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwogICAgICAgICBpZiAoIW5leHRUb2tlbklzQ29s
b24oKSkgewogICAgICAgICAgICAgLy8gSWYgd2UgaGl0IHRoaXMgcGF0aCB3ZSdyZSBtYWtpbmcg
YSBleHByZXNzaW9uIHN0YXRlbWVudCwgd2hpY2gKQEAgLTk3NywxMiArOTQwLDEwIEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgICAgIFRyZWVFeHBy
ZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgICAg
ICBmYWlsSWZGYWxzZShleHByZXNzaW9uKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGF1dG9T
ZW1pQ29sb24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHByU3RhdGVt
ZW50KGxvY2F0aW9uLCBleHByZXNzaW9uLCBzdGFydGluZ0xpbmUsIG1fbGFzdExpbmUpOworICAg
ICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVudChsb2NhdGlvbiwgZXhw
cmVzc2lvbiwgc3RhcnQsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSk7CiAgICAgICAgIH0K
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsK
LSAgICAgICAgaW50IGVuZCA9IHRva2VuRW5kKCk7Ci0gICAgICAgIHVuc2lnbmVkIGRpdm90TGlu
ZSA9IHRva2VuTGluZSgpOwotICAgICAgICB1bnNpZ25lZCBkaXZvdExpbmVTdGFydCA9IHRva2Vu
TGluZVN0YXJ0KCk7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRp
b24oKTsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBjb25zdW1lT3JGYWlsKENPTE9OKTsKICAg
ICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKQEAgLTk5MSw3ICs5NTIsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxhYmVscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAg
ICBmYWlsSWZUcnVlKGlkZW50LT5pbXBsKCkgPT0gbGFiZWxzW2ldLm1faWRlbnQtPmltcGwoKSk7
CiAgICAgICAgICAgICBmYWlsSWZUcnVlKGdldExhYmVsKGlkZW50KSk7Ci0gICAgICAgICAgICBs
YWJlbHMuYXBwZW5kKExhYmVsSW5mbyhpZGVudCwgc3RhcnQsIGVuZCwgZGl2b3RMaW5lLCBkaXZv
dExpbmVTdGFydCkpOworICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChMYWJlbEluZm8oaWRlbnQs
IHN0YXJ0LCBlbmQpKTsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKG1hdGNoKElERU5UKSk7CiAg
ICAgYm9vbCBpc0xvb3AgPSBmYWxzZTsKQEAgLTEwMTgsNyArOTc5LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIGZhaWxJZkZhbHNlKHN0YXRlbWVudCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyBpKyspIHsKICAgICAg
ICAgY29uc3QgTGFiZWxJbmZvJiBpbmZvID0gbGFiZWxzW2xhYmVscy5zaXplKCkgLSBpIC0gMV07
Ci0gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuY3JlYXRlTGFiZWxTdGF0ZW1lbnQobG9jYXRp
b24sIGluZm8ubV9pZGVudCwgc3RhdGVtZW50LCBpbmZvLm1fc3RhcnQsIGluZm8ubV9lbmQsIGlu
Zm8ubV9kaXZvdExpbmUsIGluZm8ubV9kaXZvdExpbmVTdGFydCk7CisgICAgICAgIHN0YXRlbWVu
dCA9IGNvbnRleHQuY3JlYXRlTGFiZWxTdGF0ZW1lbnQobG9jYXRpb24sIGluZm8ubV9pZGVudCwg
c3RhdGVtZW50LCBpbmZvLm1fc3RhcnQsIGluZm8ubV9lbmQpOwogICAgIH0KICAgICByZXR1cm4g
c3RhdGVtZW50OwogfQpAQCAtMTAyNiwxMiArOTg3LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46
OnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKLSAgICBp
bnQgc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0
b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5M
b2NhdGlvbigpKTsKICAgICBUcmVlRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNz
aW9uKGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGV4cHJlc3Npb24pOwogICAgIGZhaWxJZkZh
bHNlKGF1dG9TZW1pQ29sb24oKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwclN0YXRl
bWVudChsb2NhdGlvbiwgZXhwcmVzc2lvbiwgc3RhcnRMaW5lLCBtX2xhc3RMaW5lKTsKKyAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVFeHByU3RhdGVtZW50KGxvY2F0aW9uLCBleHByZXNzaW9uLCBz
dGFydCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIExleGVyVHlwZT4KQEAgLTExNDcsOSArMTEwOCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBM
ZXhlclR5cGU+CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9u
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRyZWVCdWlsZGVy
JiBjb250ZXh0KQogewogICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKLSAgICBpbnQgc3RhcnQg
PSB0b2tlblN0YXJ0KCk7Ci0gICAgdW5zaWduZWQgbGluZSA9IHRva2VuTGluZSgpOwotICAgIHVu
c2lnbmVkIGxpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgSlNUZXh0UG9zaXRpb24g
c3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRp
b24odG9rZW5Mb2NhdGlvbigpKTsKICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRDb3VudCA9IG1f
YXNzaWdubWVudENvdW50OwogICAgIGludCBpbml0aWFsTm9uTEhTQ291bnQgPSBtX25vbkxIU0Nv
dW50OwpAQCAtMTE4MCwxMCArMTEzOSw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRl
cj4gVHJlZUV4cHIKICAgICAgICAgfQogICAgICAgICBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291
bnQrKzsKICAgICAgICAgaGFkQXNzaWdubWVudCA9IHRydWU7Ci0gICAgICAgIGNvbnRleHQuYXNz
aWdubWVudFN0YWNrQXBwZW5kKGFzc2lnbm1lbnRTdGFjaywgbGhzLCBzdGFydCwgdG9rZW5TdGFy
dCgpLCBsaW5lLCBsaW5lU3RhcnQsIG1fYXNzaWdubWVudENvdW50LCBvcCk7Ci0gICAgICAgIHN0
YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgICAgICBsaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAgICAg
IGxpbmVTdGFydCA9IHRva2VuTGluZVN0YXJ0KCk7CisgICAgICAgIGNvbnRleHQuYXNzaWdubWVu
dFN0YWNrQXBwZW5kKGFzc2lnbm1lbnRTdGFjaywgbGhzLCBzdGFydCwgdG9rZW5TdGFydFBvc2l0
aW9uKCksIG1fYXNzaWdubWVudENvdW50LCBvcCk7CisgICAgICAgIHN0YXJ0ID0gdG9rZW5TdGFy
dFBvc2l0aW9uKCk7CiAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7CiAgICAgICAgIG5leHQo
VHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAgICAgICBpZiAoc3RyaWN0TW9kZSgp
ICYmIG1fbGFzdElkZW50aWZpZXIgJiYgY29udGV4dC5pc1Jlc29sdmUobGhzKSkgewpAQCAtMTIw
NSw3ICsxMTYyLDcgQEAgZW5kOgogICAgICAgICByZXR1cm4gbGhzOwogICAgIAogICAgIHdoaWxl
IChhc3NpZ25tZW50U3RhY2spCi0gICAgICAgIGxocyA9IGNvbnRleHQuY3JlYXRlQXNzaWdubWVu
dChsb2NhdGlvbiwgYXNzaWdubWVudFN0YWNrLCBsaHMsIGluaXRpYWxBc3NpZ25tZW50Q291bnQs
IG1fYXNzaWdubWVudENvdW50LCBsYXN0VG9rZW5FbmQoKSk7CisgICAgICAgIGxocyA9IGNvbnRl
eHQuY3JlYXRlQXNzaWdubWVudChsb2NhdGlvbiwgYXNzaWdubWVudFN0YWNrLCBsaHMsIGluaXRp
YWxBc3NpZ25tZW50Q291bnQsIG1fYXNzaWdubWVudENvdW50LCBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpKTsKICAgICAKICAgICByZXR1cm4gbGhzOwogfQpAQCAtMTI1MSwxMiArMTIwOCwxMiBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgdHlwZW5hbWUgVHJl
ZUJ1aWxkZXI6OkJpbmFyeUV4cHJDb250ZXh0IGJpbmFyeUV4cHJDb250ZXh0KGNvbnRleHQpOwog
ICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICAgIGludCBleHByU3RhcnQgPSB0b2tlblN0YXJ0KCk7CisgICAgICAg
IEpTVGV4dFBvc2l0aW9uIGV4cHJTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAg
ICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9hc3NpZ25tZW50Q291bnQ7CiAgICAgICAgIFRy
ZWVFeHByZXNzaW9uIGN1cnJlbnQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKICAg
ICAgICAgZmFpbElmRmFsc2UoY3VycmVudCk7CiAgICAgICAgIAotICAgICAgICBjb250ZXh0LmFw
cGVuZEJpbmFyeUV4cHJlc3Npb25JbmZvKG9wZXJhbmRTdGFja0RlcHRoLCBjdXJyZW50LCBleHBy
U3RhcnQsIGxhc3RUb2tlbkVuZCgpLCBsYXN0VG9rZW5FbmQoKSwgbGFzdFRva2VuTGluZSgpLCBs
YXN0VG9rZW5MaW5lU3RhcnQoKSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENv
dW50KTsKKyAgICAgICAgY29udGV4dC5hcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhvcGVyYW5k
U3RhY2tEZXB0aCwgY3VycmVudCwgZXhwclN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpLCBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpLCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50
Q291bnQpOwogICAgICAgICBpbnQgcHJlY2VkZW5jZSA9IGlzQmluYXJ5T3BlcmF0b3IobV90b2tl
bi5tX3R5cGUpOwogICAgICAgICBpZiAoIXByZWNlZGVuY2UpCiAgICAgICAgICAgICBicmVhazsK
QEAgLTEzMzYsOCArMTI5Myw4IEBAIHRlbXBsYXRlIDxib29sIGNvbXBsZXRlLCBjbGFzcyBUcmVl
QnVpbGQKICAgICAgICAgbmV4dCgpOwogICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm88RnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgZmFsc2U+KGNvbnRleHQsIGFjY2Vzc29yTmFt
ZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBi
b2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pKSk7CiAgICAgICAgIGlmIChzdHJpbmdQcm9w
ZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0
ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihsb2NhdGlvbiwgdHlwZSwgc3RyaW5nUHJvcGVy
dHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZz
ZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUsIGJvZHlTdGFydENvbHVtbik7Ci0gICAgICAg
IHJldHVybiBjb250ZXh0LnRlbXBsYXRlIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHk8Y29t
cGxldGU+KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbG9jYXRpb24sIHR5cGUsIG51bWVyaWNQcm9w
ZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9m
ZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSwgYm9keVN0YXJ0Q29sdW1uKTsKKyAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVy
dHk8Y29tcGxldGU+KGxvY2F0aW9uLCB0eXBlLCBzdHJpbmdQcm9wZXJ0eU5hbWUsIHBhcmFtZXRl
cnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGlu
ZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBib2R5U3RhcnRDb2x1bW4pOworICAgICAg
ICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNv
bXBsZXRlPihjb25zdF9jYXN0PFZNKj4obV92bSksIGxvY2F0aW9uLCB0eXBlLCBudW1lcmljUHJv
cGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VP
ZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9keVN0
YXJ0Q29sdW1uKTsKICAgICB9CiAgICAgY2FzZSBOVU1CRVI6IHsKICAgICAgICAgZG91YmxlIHBy
b3BlcnR5TmFtZSA9IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwpAQCAtMTUzNSwxNSArMTQ5
MiwxMyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAg
IHJldHVybiBjb250ZXh0LnRoaXNFeHByKGxvY2F0aW9uKTsKICAgICB9CiAgICAgY2FzZSBJREVO
VDogewotICAgICAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgICAgIGludCBsaW5l
ID0gdG9rZW5MaW5lKCk7Ci0gICAgICAgIGludCBsaW5lU3RhcnQgPSB0b2tlbkxpbmVTdGFydCgp
OworICAgICAgICBKU1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwog
ICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50Owog
ICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAg
ICAgbmV4dCgpOwogICAgICAgICBjdXJyZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQsIG1f
dm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKmlkZW50KTsKICAgICAgICAgbV9sYXN0SWRlbnRp
ZmllciA9IGlkZW50OwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVSZXNvbHZlKGxvY2F0
aW9uLCBpZGVudCwgc3RhcnQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZVJlc29sdmUobG9jYXRpb24sIGlkZW50LCBzdGFydCk7CiAgICAgfQogICAgIGNh
c2UgU1RSSU5HOiB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5t
X2RhdGEuaWRlbnQ7CkBAIC0xNTgyLDEyICsxNTM3LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmFpbElmRmFs
c2UobV9sZXhlci0+c2NhblJlZ0V4cChwYXR0ZXJuLCBmbGFncykpOwogICAgICAgICAKLSAgICAg
ICAgaW50IHN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgICAgICBpbnQgbGluZSA9IHRva2VuTGlu
ZSgpOwotICAgICAgICBpbnQgbGluZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAg
SlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgSlNU
b2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgICAgIG5leHQoKTsK
LSAgICAgICAgVHJlZUV4cHJlc3Npb24gcmUgPSBjb250ZXh0LmNyZWF0ZVJlZ0V4cChsb2NhdGlv
biwgKnBhdHRlcm4sICpmbGFncywgc3RhcnQsIGxpbmUsIGxpbmVTdGFydCk7CisgICAgICAgIFRy
ZWVFeHByZXNzaW9uIHJlID0gY29udGV4dC5jcmVhdGVSZWdFeHAobG9jYXRpb24sICpwYXR0ZXJu
LCAqZmxhZ3MsIHN0YXJ0KTsKICAgICAgICAgaWYgKCFyZSkgewogICAgICAgICAgICAgY29uc3Qg
Y2hhciogeWFyckVycm9yTXNnID0gWWFycjo6Y2hlY2tTeW50YXgocGF0dGVybi0+c3RyaW5nKCkp
OwogICAgICAgICAgICAgZmFpbFdpdGhNZXNzYWdlKHlhcnJFcnJvck1zZyk7CkBAIC0xNjI4LDEw
ICsxNTgxLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVt
YmVyRXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4dCkKIHsKICAgICBUcmVlRXhwcmVzc2lv
biBiYXNlID0gMDsKLSAgICBpbnQgc3RhcnQgPSB0b2tlblN0YXJ0KCk7Ci0gICAgaW50IGV4cHJl
c3Npb25TdGFydCA9IHN0YXJ0OwotICAgIGludCBleHByZXNzaW9uTGluZSA9IHRva2VuTGluZSgp
OwotICAgIGludCBleHByZXNzaW9uTGluZVN0YXJ0ID0gdG9rZW5MaW5lU3RhcnQoKTsKKyAgICBK
U1RleHRQb3NpdGlvbiBleHByZXNzaW9uU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAg
ICBpbnQgbmV3Q291bnQgPSAwOwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbjsKICAgICB3
aGlsZSAobWF0Y2goTkVXKSkgewpAQCAtMTY1MCw3ICsxNjAwLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRp
b24oKTsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm88RnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgZmFsc2U+KGNvbnRleHQsIG5hbWUsIHBhcmFt
ZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0
TGluZSwgYm9keVN0YXJ0Q29sdW1uKSkpOwotICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVG
dW5jdGlvbkV4cHIobG9jYXRpb24sIG5hbWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZU9m
ZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0TGluZSwgYm9keVN0
YXJ0Q29sdW1uKTsKKyAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKGxv
Y2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJh
Y2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9k
eVN0YXJ0Q29sdW1uKTsKICAgICB9IGVsc2UKICAgICAgICAgYmFzZSA9IHBhcnNlUHJpbWFyeUV4
cHJlc3Npb24oY29udGV4dCk7CiAgICAgCkBAIC0xNjYwLDE1ICsxNjEwLDEzIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgc3dpdGNoIChtX3Rva2Vu
Lm1fdHlwZSkgewogICAgICAgICBjYXNlIE9QRU5CUkFDS0VUOiB7CiAgICAgICAgICAgICBtX25v
blRyaXZpYWxFeHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgICAgIGludCBleHByZXNzaW9uRW5k
ID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkxpbmUgPSBsYXN0
VG9rZW5MaW5lKCk7Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkxpbmVTdGFydCA9IGxhc3RU
b2tlbkxpbmVTdGFydCgpOworICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVu
ZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAg
ICAgICBpbnQgbm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwogICAgICAgICAgICAgaW50IGlu
aXRpYWxBc3NpZ25tZW50cyA9IG1fYXNzaWdubWVudENvdW50OwogICAgICAgICAgICAgVHJlZUV4
cHJlc3Npb24gcHJvcGVydHkgPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgICAg
ICBmYWlsSWZGYWxzZShwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVh
dGVCcmFja2V0QWNjZXNzKGxvY2F0aW9uLCBiYXNlLCBwcm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1l
bnRzICE9IG1fYXNzaWdubWVudENvdW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQs
IHRva2VuRW5kKCksIGV4cHJlc3Npb25MaW5lLCBleHByZXNzaW9uTGluZVN0YXJ0KTsKKyAgICAg
ICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3MobG9jYXRpb24sIGJhc2Us
IHByb3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQsIGV4cHJl
c3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAg
ICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VCUkFDS0VUKTsKICAgICAgICAgICAgIG1fbm9uTEhTQ291
bnQgPSBub25MSFNDb3VudDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY3OCwzMCArMTYyNiwy
NSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgICAg
ICBpbnQgbm9uTEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwogICAgICAgICAgICAgaWYgKG5ld0Nv
dW50KSB7CiAgICAgICAgICAgICAgICAgbmV3Q291bnQtLTsKLSAgICAgICAgICAgICAgICBpbnQg
ZXhwckVuZCA9IGxhc3RUb2tlbkVuZCgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4cHJl
c3Npb25MaW5lID0gbGFzdFRva2VuTGluZSgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4
cHJlc3Npb25MaW5lU3RhcnQgPSBsYXN0VG9rZW5MaW5lU3RhcnQoKTsKKyAgICAgICAgICAgICAg
ICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsK
ICAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRz
KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwg
YXJndW1lbnRzLCBzdGFydCwgZXhwckVuZCwgbGFzdFRva2VuRW5kKCksIGV4cHJlc3Npb25MaW5l
LCBleHByZXNzaW9uTGluZVN0YXJ0KTsKKyAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5j
cmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwg
ZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGludCBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kKCk7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgZXhwcmVzc2lvbkxpbmUgPSBsYXN0VG9rZW5MaW5l
KCk7Ci0gICAgICAgICAgICAgICAgaW50IGV4cHJlc3Npb25MaW5lU3RhcnQgPSBsYXN0VG9rZW5M
aW5lU3RhcnQoKTsKKyAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5k
ID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRz
IGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQpOwogICAgICAgICAgICAgICAgIGZh
aWxJZkZhbHNlKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQubWFr
ZUZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0
YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmQoKSwgZXhwcmVzc2lvbkxpbmUsIGV4cHJl
c3Npb25MaW5lU3RhcnQpOworICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5j
dGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwg
ZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIERPVDogewogICAgICAgICAgICAgbV9ub25Ucml2
aWFsRXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICBpbnQgZXhwcmVzc2lvbkVuZCA9IGxh
c3RUb2tlbkVuZCgpOwotICAgICAgICAgICAgZXhwcmVzc2lvbkxpbmVTdGFydCA9IGxhc3RUb2tl
bkxpbmVTdGFydCgpOworICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9
IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmll
cihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250QnVpbGRL
ZXl3b3Jkcyk7CiAgICAgICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7Ci0gICAgICAgICAgICBi
YXNlID0gY29udGV4dC5jcmVhdGVEb3RBY2Nlc3MobG9jYXRpb24sIGJhc2UsIG1fdG9rZW4ubV9k
YXRhLmlkZW50LCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kKCksIGV4
cHJlc3Npb25MaW5lLCBleHByZXNzaW9uTGluZVN0YXJ0KTsKKyAgICAgICAgICAgIGJhc2UgPSBj
b250ZXh0LmNyZWF0ZURvdEFjY2Vzcyhsb2NhdGlvbiwgYmFzZSwgbV90b2tlbi5tX2RhdGEuaWRl
bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsK
ICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0x
NzExLDcgKzE2NTQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
CiAgICAgfQogZW5kTWVtYmVyRXhwcmVzc2lvbjoKICAgICB3aGlsZSAobmV3Q291bnQtLSkKLSAg
ICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgc3RhcnQs
IGxhc3RUb2tlbkVuZCgpLCBleHByZXNzaW9uTGluZSwgZXhwcmVzc2lvbkxpbmVTdGFydCk7Cisg
ICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGV4cHJl
c3Npb25TdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgcmV0dXJuIGJhc2U7CiB9
CiAKQEAgLTE3NDQsMTQgKzE2ODcsMTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzcwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG1fbm9uTEhTQ291
bnQrKzsKLSAgICAgICAgY29udGV4dC5hcHBlbmRVbmFyeVRva2VuKHRva2VuU3RhY2tEZXB0aCwg
bV90b2tlbi5tX3R5cGUsIHRva2VuU3RhcnQoKSwgdG9rZW5MaW5lKCksIHRva2VuTGluZVN0YXJ0
KCkpOworICAgICAgICBjb250ZXh0LmFwcGVuZFVuYXJ5VG9rZW4odG9rZW5TdGFja0RlcHRoLCBt
X3Rva2VuLm1fdHlwZSwgdG9rZW5TdGFydFBvc2l0aW9uKCkpOwogICAgICAgICBuZXh0KCk7CiAg
ICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgIH0KLSAgICBpbnQgc3Vi
RXhwclN0YXJ0ID0gdG9rZW5TdGFydCgpOwotICAgIGludCBzdWJFeHByTGluZSA9IHRva2VuTGlu
ZSgpOwotICAgIGludCBzdWJFeHByTGluZVN0YXJ0UG9zaXRpb24gPSB0b2tlbkxpbmVTdGFydCgp
OwotICAgIEFTU0VSVChzdWJFeHByU3RhcnQgPj0gc3ViRXhwckxpbmVTdGFydFBvc2l0aW9uKTsK
KyAgICBKU1RleHRQb3NpdGlvbiBzdWJFeHByU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsK
KyAgICBBU1NFUlQoc3ViRXhwclN0YXJ0Lm9mZnNldCA+PSBzdWJFeHByU3RhcnQubGluZVN0YXJ0
T2Zmc2V0KTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsK
ICAgICBUcmVlRXhwcmVzc2lvbiBleHByID0gcGFyc2VNZW1iZXJFeHByZXNzaW9uKGNvbnRleHQp
OwogICAgIGZhaWxJZkZhbHNlKGV4cHIpOwpAQCAtMTc2NSw3ICsxNzA2LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGNhc2UgUExVU1BMVVM6CiAgICAg
ICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgICAgICBtX25vbkxIU0NvdW50
Kys7Ci0gICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhw
ciwgT3BQbHVzUGx1cywgc3ViRXhwclN0YXJ0LCBsYXN0VG9rZW5FbmQoKSwgdG9rZW5FbmQoKSwg
dG9rZW5MaW5lKCksIHRva2VuTGluZVN0YXJ0KCkpOworICAgICAgICBleHByID0gY29udGV4dC5t
YWtlUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wUGx1c1BsdXMsIHN1YkV4cHJTdGFydCwg
bGFzdFRva2VuRW5kUG9zaXRpb24oKSwgdG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgbV9h
c3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE5hbWVBbmRN
ZXNzYWdlKGlzRXZhbE9yQXJndW1lbnRzLCAiJyIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwg
IicgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBtb2RlIik7CiAgICAgICAgIGZhaWxJZlRy
dWVJZlN0cmljdChyZXF1aXJlc0xFeHByKTsKQEAgLTE3NzQsNyArMTcxNSw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBjYXNlIE1JTlVTTUlOVVM6CiAg
ICAgICAgIG1fbm9uVHJpdmlhbEV4cHJlc3Npb25Db3VudCsrOwogICAgICAgICBtX25vbkxIU0Nv
dW50Kys7Ci0gICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQb3N0Zml4Tm9kZShsb2NhdGlvbiwg
ZXhwciwgT3BNaW51c01pbnVzLCBzdWJFeHByU3RhcnQsIGxhc3RUb2tlbkVuZCgpLCB0b2tlbkVu
ZCgpLCB0b2tlbkxpbmUoKSwgdG9rZW5MaW5lU3RhcnQoKSk7CisgICAgICAgIGV4cHIgPSBjb250
ZXh0Lm1ha2VQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BNaW51c01pbnVzLCBzdWJFeHBy
U3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCksIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAg
ICAgIG1fYXNzaWdubWVudENvdW50Kys7CiAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdFdpdGhO
YW1lQW5kTWVzc2FnZShpc0V2YWxPckFyZ3VtZW50cywgIiciLCBtX2xhc3RJZGVudGlmaWVyLT5p
bXBsKCksICInIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICBm
YWlsSWZUcnVlSWZTdHJpY3QocmVxdWlyZXNMRXhwcik7CkBAIC0xNzg0LDkgKzE3MjUsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAKLSAgICBpbnQgZW5kID0gbGFzdFRva2VuRW5kKCk7Ci0gICAgaW50IGVuZExp
bmUgPSBsYXN0VG9rZW5MaW5lKCk7Ci0gICAgaW50IGVuZExpbmVTdGFydFBvc2l0aW9uID0gbGFz
dFRva2VuTGluZVN0YXJ0KCk7CisgICAgSlNUZXh0UG9zaXRpb24gZW5kID0gbGFzdFRva2VuRW5k
UG9zaXRpb24oKTsKIAogICAgIGlmICghVHJlZUJ1aWxkZXI6OkNyZWF0ZXNBU1QgJiYgKG1fc3lu
dGF4QWxyZWFkeVZhbGlkYXRlZCB8fCAhc3RyaWN0TW9kZSgpKSkKICAgICAgICAgcmV0dXJuIGV4
cHI7CkBAIC0xODA5LDEyICsxNzQ4LDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3MKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBMVVNQTFVTOgog
ICAgICAgICBjYXNlIEFVVE9QTFVTUExVUzoKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1h
a2VQcmVmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBPcFBsdXNQbHVzLCBjb250ZXh0LnVuYXJ5VG9r
ZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBlbmQs
IHN1YkV4cHJMaW5lLCBzdWJFeHByTGluZVN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgZXhw
ciA9IGNvbnRleHQubWFrZVByZWZpeE5vZGUobG9jYXRpb24sIGV4cHIsIE9wUGx1c1BsdXMsIGNv
bnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCksIHN1YkV4cHJT
dGFydCArIDEsIGVuZCk7CiAgICAgICAgICAgICBtX2Fzc2lnbm1lbnRDb3VudCsrOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTUlOVVNNSU5VUzoKICAgICAgICAgY2FzZSBBVVRP
TUlOVVNNSU5VUzoKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VQcmVmaXhOb2RlKGxv
Y2F0aW9uLCBleHByLCBPcE1pbnVzTWludXMsIGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdFN0
YXJ0KHRva2VuU3RhY2tEZXB0aCksIHN1YkV4cHJTdGFydCArIDEsIGVuZCwgc3ViRXhwckxpbmUs
IHN1YkV4cHJMaW5lU3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICBleHByID0gY29udGV4dC5t
YWtlUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgT3BNaW51c01pbnVzLCBjb250ZXh0LnVuYXJ5
VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVwdGgpLCBzdWJFeHByU3RhcnQgKyAxLCBl
bmQpOwogICAgICAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFRZUEVPRjoKQEAgLTE4MjUsMTQgKzE3NjQsMTMgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgREVMRVRFVE9LRU46CiAgICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRo
TmFtZUFuZE1lc3NhZ2UoY29udGV4dC5pc1Jlc29sdmUoZXhwciksICJDYW5ub3QgZGVsZXRlIHVu
cXVhbGlmaWVkIHByb3BlcnR5IiwgbV9sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiaW4gc3RyaWN0
IG1vZGUiKTsKLSAgICAgICAgICAgIGV4cHIgPSBjb250ZXh0Lm1ha2VEZWxldGVOb2RlKGxvY2F0
aW9uLCBleHByLCBjb250ZXh0LnVuYXJ5VG9rZW5TdGFja0xhc3RTdGFydCh0b2tlblN0YWNrRGVw
dGgpLCBlbmQsIGVuZCwgZW5kTGluZSwgZW5kTGluZVN0YXJ0UG9zaXRpb24pOworICAgICAgICAg
ICAgZXhwciA9IGNvbnRleHQubWFrZURlbGV0ZU5vZGUobG9jYXRpb24sIGV4cHIsIGNvbnRleHQu
dW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCksIGVuZCwgZW5kKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gSWYgd2Ug
Z2V0IGhlcmUgc29tZXRoaW5nIGhhcyBnb25lIGhvcnJpYmx5IGhvcnJpYmx5IHdyb25nCiAgICAg
ICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAgICAgICAgIHN1YkV4cHJTdGFydCA9IGNvbnRl
eHQudW5hcnlUb2tlblN0YWNrTGFzdFN0YXJ0KHRva2VuU3RhY2tEZXB0aCk7Ci0gICAgICAgIHN1
YkV4cHJMaW5lU3RhcnRQb3NpdGlvbiA9IGNvbnRleHQudW5hcnlUb2tlblN0YWNrTGFzdExpbmVT
dGFydFBvc2l0aW9uKHRva2VuU3RhY2tEZXB0aCk7CiAgICAgICAgIGNvbnRleHQudW5hcnlUb2tl
blN0YWNrUmVtb3ZlTGFzdCh0b2tlblN0YWNrRGVwdGgpOwogICAgIH0KICAgICByZXR1cm4gZXhw
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTUz
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDc1LDggKzQ3NSw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHBhcnNlSW5uZXIo
KTsKIAogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyosIFBhcnNlckFy
ZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFj
az4qLCBDb2RlRmVhdHVyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBJ
ZGVudGlmaWVyU2V0Jik7CisgICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNr
czo6RnVuY3Rpb25TdGFjaz4qLCBDb2RlRmVhdHVyZXMsIGludCwgSWRlbnRpZmllclNldCYpOwog
CiAgICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgdHlwZSBvZiBlcnJvciB0byByZXBvcnQuCiAgICAg
Ym9vbCBpc0Z1bmN0aW9uQm9keU5vZGUoU2NvcGVOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KQEAg
LTQ4NCwyMCArNDgzLDIyIEBAIHByaXZhdGU6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbmV4
dCh1bnNpZ25lZCBsZXhlckZsYWdzID0gMCkKICAgICB7Ci0gICAgICAgIG1fbGFzdExpbmUgPSBt
X3Rva2VuLm1fbG9jYXRpb24ubGluZTsKLSAgICAgICAgbV9sYXN0VG9rZW5FbmQgPSBtX3Rva2Vu
Lm1fbG9jYXRpb24uZW5kT2Zmc2V0OwotICAgICAgICBtX2xhc3RUb2tlbkxpbmVTdGFydCA9IG1f
dG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7Ci0gICAgICAgIG1fbGV4ZXItPnNldExh
c3RMaW5lTnVtYmVyKG1fbGFzdExpbmUpOwotICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4
ZXItPmxleCgmbV90b2tlbi5tX2RhdGEsICZtX3Rva2VuLm1fbG9jYXRpb24sIGxleGVyRmxhZ3Ms
IHN0cmljdE1vZGUoKSk7CisgICAgICAgIGludCBsYXN0TGluZSA9IG1fdG9rZW4ubV9sb2NhdGlv
bi5saW5lOworICAgICAgICBpbnQgbGFzdFRva2VuRW5kID0gbV90b2tlbi5tX2xvY2F0aW9uLmVu
ZE9mZnNldDsKKyAgICAgICAgaW50IGxhc3RUb2tlbkxpbmVTdGFydCA9IG1fdG9rZW4ubV9sb2Nh
dGlvbi5saW5lU3RhcnRPZmZzZXQ7CisgICAgICAgIG1fbGFzdFRva2VuRW5kUG9zaXRpb24gPSBK
U1RleHRQb3NpdGlvbihsYXN0TGluZSwgbGFzdFRva2VuRW5kLCBsYXN0VG9rZW5MaW5lU3RhcnQp
OworICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihsYXN0TGluZSk7CisgICAgICAg
IG1fdG9rZW4ubV90eXBlID0gbV9sZXhlci0+bGV4KCZtX3Rva2VuLCBsZXhlckZsYWdzLCBzdHJp
Y3RNb2RlKCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBuZXh0RXhwZWN0SWRl
bnRpZmllcih1bnNpZ25lZCBsZXhlckZsYWdzID0gMCkKICAgICB7Ci0gICAgICAgIG1fbGFzdExp
bmUgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZTsKLSAgICAgICAgbV9sYXN0VG9rZW5FbmQgPSBt
X3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0OwotICAgICAgICBtX2xhc3RUb2tlbkxpbmVTdGFy
dCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7Ci0gICAgICAgIG1fbGV4ZXIt
PnNldExhc3RMaW5lTnVtYmVyKG1fbGFzdExpbmUpOwotICAgICAgICBtX3Rva2VuLm1fdHlwZSA9
IG1fbGV4ZXItPmxleEV4cGVjdElkZW50aWZpZXIoJm1fdG9rZW4ubV9kYXRhLCAmbV90b2tlbi5t
X2xvY2F0aW9uLCBsZXhlckZsYWdzLCBzdHJpY3RNb2RlKCkpOworICAgICAgICBpbnQgbGFzdExp
bmUgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZTsKKyAgICAgICAgaW50IGxhc3RUb2tlbkVuZCA9
IG1fdG9rZW4ubV9sb2NhdGlvbi5lbmRPZmZzZXQ7CisgICAgICAgIGludCBsYXN0VG9rZW5MaW5l
U3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OworICAgICAgICBtX2xh
c3RUb2tlbkVuZFBvc2l0aW9uID0gSlNUZXh0UG9zaXRpb24obGFzdExpbmUsIGxhc3RUb2tlbkVu
ZCwgbGFzdFRva2VuTGluZVN0YXJ0KTsKKyAgICAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1i
ZXIobGFzdExpbmUpOworICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleEV4cGVj
dElkZW50aWZpZXIoJm1fdG9rZW4sIGxleGVyRmxhZ3MsIHN0cmljdE1vZGUoKSk7CiAgICAgfQog
CiAgICAgQUxXQVlTX0lOTElORSBib29sIG5leHRUb2tlbklzQ29sb24oKQpAQCAtNTE1LDcgKzUx
Niw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBTdHJpbmcgZ2V0VG9rZW4o
KSB7CiAgICAgICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciA9IG1fc291cmNlLT5w
cm92aWRlcigpOwotICAgICAgICByZXR1cm4gc291cmNlUHJvdmlkZXItPmdldFJhbmdlKHRva2Vu
U3RhcnQoKSwgdG9rZW5FbmQoKSk7CisgICAgICAgIHJldHVybiBzb3VyY2VQcm92aWRlci0+Z2V0
UmFuZ2UodG9rZW5TdGFydCgpLCB0b2tlbkVuZFBvc2l0aW9uKCkub2Zmc2V0KTsKICAgICB9CiAg
ICAgCiAgICAgQUxXQVlTX0lOTElORSBib29sIG1hdGNoKEpTVG9rZW5UeXBlIGV4cGVjdGVkKQpA
QCAtNTI4LDYgKzUyOSwxMSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV90b2tlbi5tX2xv
Y2F0aW9uLnN0YXJ0T2Zmc2V0OwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiB0b2tlblN0YXJ0UG9zaXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdG9rZW4ubV9zdGFydFBvc2l0aW9uOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUg
aW50IHRva2VuTGluZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV90b2tlbi5tX2xvY2F0aW9u
LmxpbmU7CkBAIC01MzgsOSArNTQ0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRva2Vu
U3RhcnQoKSAtIHRva2VuTGluZVN0YXJ0KCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB1
bnNpZ25lZCB0b2tlbkVuZCgpCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBKU1RleHRQb3NpdGlv
biYgdG9rZW5FbmRQb3NpdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gbV90b2tlbi5tX2xv
Y2F0aW9uLmVuZE9mZnNldDsKKyAgICAgICAgcmV0dXJuIG1fdG9rZW4ubV9lbmRQb3NpdGlvbjsK
ICAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCB0b2tlbkxpbmVTdGFydCgp
CkBAIC05MTUsNyArOTIxLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Ym9vbCBzdHJpY3Qs
IGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVQcm9wZXJ0eSBwYXJzZVByb3Bl
cnR5KFRyZWVCdWlsZGVyJik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdB
WVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXIm
KTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZv
cm1hbFBhcmFtZXRlckxpc3QgcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJik7Ci0g
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNz
aW9uIHBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiwgaW50JiBkZWNsYXJhdGlv
bnMsIGNvbnN0IElkZW50aWZpZXIqJiBsYXN0SWRlbnQsIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5p
dGlhbGl6ZXIsIGludCYgaWRlbnRTdGFydCwgaW50JiBpbml0U3RhcnQsIGludCYgaW5pdEVuZCk7
CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHBy
ZXNzaW9uIHBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiwgaW50JiBkZWNsYXJh
dGlvbnMsIGNvbnN0IElkZW50aWZpZXIqJiBsYXN0SWRlbnQsIFRyZWVFeHByZXNzaW9uJiBsYXN0
SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYg
aW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVDb25zdERlY2xMaXN0IHBhcnNlQ29uc3RE
ZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImIGNvbnRleHQpOwogICAgIHRlbXBsYXRlIDxGdW5j
dGlvblJlcXVpcmVtZW50cywgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgY2xhc3MgVHJl
ZUJ1aWxkZXI+IGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImLCBjb25zdCBJZGVu
dGlmaWVyKiYsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0JiwgVHJlZUZ1bmN0aW9uQm9keSYsIHVu
c2lnbmVkJiBvcGVuQnJhY2VPZmZzZXQsIHVuc2lnbmVkJiBjbG9zZUJyYWNlT2Zmc2V0LCBpbnQm
IGJvZHlTdGFydExpbmUsIHVuc2lnbmVkJiBib2R5U3RhcnRDb2x1bW4pOwogICAgIEFMV0FZU19J
TkxJTkUgaW50IGlzQmluYXJ5T3BlcmF0b3IoSlNUb2tlblR5cGUpOwpAQCAtOTM1LDE5ICs5NDEs
OSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9zdGFjay5pc1NhZmVUb1JlY3Vyc2UoKTsK
ICAgICB9CiAgICAgCi0gICAgaW50IGxhc3RUb2tlbkVuZCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9sYXN0VG9rZW5FbmQ7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGFzdFRva2Vu
TGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9sYXN0TGluZTsKLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCBsYXN0VG9rZW5MaW5lU3RhcnQoKSBjb25zdAorICAgIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBsYXN0VG9rZW5FbmRQb3NpdGlvbigpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9sYXN0VG9rZW5MaW5lU3RhcnQ7CisgICAgICAgIHJldHVybiBtX2xhc3RUb2tlbkVu
ZFBvc2l0aW9uOwogICAgIH0KIAogICAgIGJvb2wgaGFzRXJyb3IoKSBjb25zdApAQCAtOTY1LDEw
ICs5NjEsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBKU1Rv
a2VuIG1fdG9rZW47CiAgICAgYm9vbCBtX2FsbG93c0luOwotICAgIHVuc2lnbmVkIG1fbGFzdExp
bmU7Ci0gICAgaW50IG1fbGFzdFRva2VuRW5kOwotICAgIHVuc2lnbmVkIG1fbGFzdFRva2VuTGlu
ZTsKLSAgICB1bnNpZ25lZCBtX2xhc3RUb2tlbkxpbmVTdGFydDsKKyAgICBKU1RleHRQb3NpdGlv
biBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uOwogICAgIGludCBtX2Fzc2lnbm1lbnRDb3VudDsKICAg
ICBpbnQgbV9ub25MSFNDb3VudDsKICAgICBib29sIG1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZDsK
QEAgLTEwNTEsNyArMTA0NCw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVy
VHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptX3NvdXJjZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX251bUNvbnN0YW50cyk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0TG9jKG1fc291cmNlLT5maXJzdExpbmUoKSwgbV9sYXN0TGluZSwgbV9sZXhlci0+Y3Vy
cmVudE9mZnNldCgpLCBtX2xleGVyLT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCkpOworICAgICAg
ICByZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdFRva2VuRW5kUG9z
aXRpb24ubGluZSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVyLT5jdXJyZW50TGlu
ZVN0YXJ0T2Zmc2V0KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGNhbiBuZXZlciBz
ZWUgYSBzeW50YXggZXJyb3Igd2hlbiByZXBhcnNpbmcgYSBmdW5jdGlvbiwgc2luY2Ugd2Ugc2hv
dWxkIGhhdmUKICAgICAgICAgLy8gcmVwb3J0ZWQgdGhlIGVycm9yIHdoZW4gcGFyc2luZyB0aGUg
Y29udGFpbmluZyBwcm9ncmFtIG9yIGV2YWwgY29kZS4gU28gaWYgd2UncmUKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkocmV2aXNpb24gMTUzNDI3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCwyMyBAQCBlbnVtIEpTVG9rZW5UeXBlIHsKICAgICBJTlZB
TElEX1NUUklOR19MSVRFUkFMX0VSUk9SVE9LID0gOSB8IEVycm9yVG9rZW5GbGFnLAogfTsKIAor
c3RydWN0IEpTVGV4dFBvc2l0aW9uIHsKKyAgICBKU1RleHRQb3NpdGlvbigpIDogbGluZSgwKSwg
b2Zmc2V0KDApLCBsaW5lU3RhcnRPZmZzZXQoMCkgeyB9CisgICAgSlNUZXh0UG9zaXRpb24oaW50
IF9saW5lLCBpbnQgX29mZnNldCwgaW50IF9saW5lU3RhcnRPZmZzZXQpIDogbGluZShfbGluZSks
IG9mZnNldChfb2Zmc2V0KSwgbGluZVN0YXJ0T2Zmc2V0KF9saW5lU3RhcnRPZmZzZXQpIHsgfQor
ICAgIEpTVGV4dFBvc2l0aW9uKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBvdGhlcikgOiBsaW5lKG90
aGVyLmxpbmUpLCBvZmZzZXQob3RoZXIub2Zmc2V0KSwgbGluZVN0YXJ0T2Zmc2V0KG90aGVyLmxp
bmVTdGFydE9mZnNldCkgeyB9CisKKyAgICBKU1RleHRQb3NpdGlvbiBvcGVyYXRvcisoaW50IGFk
anVzdG1lbnQpIGNvbnN0IHsgcmV0dXJuIEpTVGV4dFBvc2l0aW9uKGxpbmUsIG9mZnNldCArIGFk
anVzdG1lbnQsIGxpbmVTdGFydE9mZnNldCk7IH0KKyAgICBKU1RleHRQb3NpdGlvbiBvcGVyYXRv
cisodW5zaWduZWQgYWRqdXN0bWVudCkgY29uc3QgeyByZXR1cm4gKnRoaXMgKyBzdGF0aWNfY2Fz
dDxpbnQ+KGFkanVzdG1lbnQpOyB9CisgICAgSlNUZXh0UG9zaXRpb24gb3BlcmF0b3ItKGludCBh
ZGp1c3RtZW50KSBjb25zdCB7IHJldHVybiAqdGhpcyArICgtIGFkanVzdG1lbnQpOyB9CisgICAg
SlNUZXh0UG9zaXRpb24gb3BlcmF0b3ItKHVuc2lnbmVkIGFkanVzdG1lbnQpIGNvbnN0IHsgcmV0
dXJuICp0aGlzICsgKC0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RtZW50KSk7IH0KKworICAgIG9w
ZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldDsgfQorCisgICAgaW50IGxpbmU7Cisg
ICAgaW50IG9mZnNldDsKKyAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0OworfTsKKwogdW5pb24gSlNU
b2tlbkRhdGEgewogICAgIHN0cnVjdCB7CiAgICAgICAgIHVpbnQzMl90IGxpbmU7CkBAIC0xODAs
NiArMTk3LDggQEAgc3RydWN0IEpTVG9rZW4gewogICAgIEpTVG9rZW5UeXBlIG1fdHlwZTsKICAg
ICBKU1Rva2VuRGF0YSBtX2RhdGE7CiAgICAgSlNUb2tlbkxvY2F0aW9uIG1fbG9jYXRpb247Cisg
ICAgSlNUZXh0UG9zaXRpb24gbV9zdGFydFBvc2l0aW9uOworICAgIEpTVGV4dFBvc2l0aW9uIG1f
ZW5kUG9zaXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxNTM0MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE5LDIxICsxMTksMjEgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBEb250QnVpbGRTdHJpbmdzID0gTGV4ZXJGbGFnc0RvbnRCdWlsZFN0cmluZ3M7CiAKICAg
ICBpbnQgY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiAxOyB9Ci0gICAgRXhwcmVzc2lv
blR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBp
bnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBDYWxsRXhwcjsgfQorICAgIEV4
cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBDYWxsRXhwcjsgfQogICAgIHZvaWQg
YXBwZW5kVG9Db21tYShFeHByZXNzaW9uVHlwZSYgYmFzZSwgRXhwcmVzc2lvblR5cGUgcmlnaHQp
IHsgYmFzZSA9IHJpZ2h0OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29tbWFFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSByaWdo
dCkgeyByZXR1cm4gcmlnaHQ7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBtYWtlQXNzaWduTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIEV4cHJlc3Np
b25UeXBlLCBib29sLCBib29sLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNz
aWdubWVudEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBtYWtlUHJlZml4Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSB7IHJldHVybiBQcmVFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZVBv
c3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBPcGVyYXRv
ciwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFBvc3RFeHByOyB9CisgICAgRXhw
cmVzc2lvblR5cGUgbWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvblR5cGUsIE9wZXJhdG9yLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBtYWtl
UHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0
b3IsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFByZUV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlw
ZSBtYWtlUG9zdGZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUs
IE9wZXJhdG9yLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBQb3N0RXhwcjsgfQogICAgIEV4cHJl
c3Npb25UeXBlIG1ha2VUeXBlT2ZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Np
b25UeXBlKSB7IHJldHVybiBUeXBlb2ZFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZURl
bGV0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBEZWxldGVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5
cGUgbWFrZURlbGV0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIERlbGV0ZUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlw
ZSBtYWtlTmVnYXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkg
eyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZUJpdHdpc2VOb3RO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFy
eUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVMb2dpY2FsTm90KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZVZvaWQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJu
IFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIHRoaXNFeHByKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYpIHsgcmV0dXJuIFRoaXNFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRl
UmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBp
bnQsIGludCkgeyByZXR1cm4gUmVzb2x2ZUV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQp
IHsgcmV0dXJuIFJlc29sdmVFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0
TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhw
cjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgaW50KSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1
cm4gQXJyYXlMaXRlcmFsRXhwcjsgfQpAQCAtMTQyLDEzICsxNDIsMTMgQEAgcHVibGljOgogICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZVN0cmluZyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyKikgeyByZXR1cm4gU3RyaW5nRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBl
IGNyZWF0ZUJvb2xlYW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9vbCkgeyByZXR1cm4gQm9v
bEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOdWxsKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYpIHsgcmV0dXJuIE51bGxFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQnJh
Y2tldEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVz
c2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBCcmFja2V0
RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZURvdEFjY2Vzcyhjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBp
bnQsIGludCwgaW50KSB7IHJldHVybiBEb3RFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3Jl
YXRlUmVnRXhwKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImIHBhdHRl
cm4sIGNvbnN0IElkZW50aWZpZXImLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBZYXJyOjpjaGVj
a1N5bnRheChwYXR0ZXJuLnN0cmluZygpKSA/IDAgOiBSZWdFeHBFeHByOyB9Ci0gICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
VHlwZSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQor
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUJyYWNrZXRBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBib29sLCBpbnQsIGludCwgaW50
KSB7IHJldHVybiBCcmFja2V0RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZURvdEFj
Y2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgY29uc3QgSWRlbnRp
ZmllciosIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIERvdEV4cHI7IH0KKyAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVSZWdFeHAoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmll
ciYgcGF0dGVybiwgY29uc3QgSWRlbnRpZmllciYsIGludCkgeyByZXR1cm4gWWFycjo6Y2hlY2tT
eW50YXgocGF0dGVybi5zdHJpbmcoKSkgPyAwIDogUmVnRXhwRXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5
cGUsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gTmV3RXhwcjsgfQorICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5
cGUsIGludCwgaW50KSB7IHJldHVybiBOZXdFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3Jl
YXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
LCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhw
cjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KKyAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElk
ZW50aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdu
bWVudEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gRnVuY3Rpb25FeHByOyB9CiAgICAgaW50IGNyZWF0ZUZ1
bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGJvb2wpIHsgcmV0dXJuIDE7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uU3RhcnQoaW50
LCBpbnQpIHsgfQpAQCAtMTg1LDIyICsxODUsMjIgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVJ
ZlN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3Jl
YXRlRm9yTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGlu
dCBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CisgICAgaW50
IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVy
KiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQog
ICAgIGludCBjcmVhdGVFbXB0eVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJl
dHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZVZhclN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZVJldHVyblN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KLSAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7
IH0KLSAgICBpbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
Y29uc3QgSWRlbnRpZmllciosIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9
Ci0gICAgaW50IGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZUNv
bnRpbnVlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIq
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVS
ZXR1cm5TdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCkgeyBy
ZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVCcmVha1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVCcmVha1N0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQp
IHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlQ29u
dGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllcios
IGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZVRyeVN0YXRlbWVudChjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50
LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlU3dpdGNoU3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJu
IDE7IH0KICAgICBpbnQgY3JlYXRlV2hpbGVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNyZWF0ZVdpdGhT
dGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlV2l0aFN0YXRlbWVu
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7
IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9Ci0gICAgaW50IGNy
ZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZp
ZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVh
dGVUaHJvd1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBp
bnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlTGFiZWxTdGF0
ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50
LCBpbnQpIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlVGhyb3dTdGF0ZW1lbnQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBj
cmVhdGVEZWJ1Z2dlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4g
MTsgfQogICAgIGludCBjcmVhdGVDb25zdFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CiAgICAgaW50IGFwcGVuZENvbnN0RGVjbChj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQpIHsgcmV0
dXJuIDE7IH0KQEAgLTIyMiw3ICsyMjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRWYXIoY29u
c3QgSWRlbnRpZmllciosIGJvb2wpIHsgfQogICAgIGludCBjb21iaW5lQ29tbWFOb2Rlcyhjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAgIGludCBldmFs
Q291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdm9pZCBhcHBlbmRCaW5hcnlFeHByZXNz
aW9uSW5mbyhpbnQmIG9wZXJhbmRTdGFja0RlcHRoLCBpbnQgZXhwciwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGJvb2wpCisgICAgdm9pZCBhcHBlbmRCaW5hcnlFeHByZXNzaW9uSW5mbyhpbnQm
IG9wZXJhbmRTdGFja0RlcHRoLCBpbnQgZXhwciwgaW50LCBpbnQsIGludCwgYm9vbCkKICAgICB7
CiAgICAgICAgIGlmICghbV90b3BCaW5hcnlFeHByKQogICAgICAgICAgICAgbV90b3BCaW5hcnlF
eHByID0gZXhwcjsKQEAgLTI0MCwxMyArMjQwLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZXJh
dG9yU3RhY2tBcHBlbmQoaW50JiBvcGVyYXRvclN0YWNrRGVwdGgsIGludCwgaW50KSB7IG9wZXJh
dG9yU3RhY2tEZXB0aCsrOyB9CiAgICAgaW50IHBvcE9wZXJhbmRTdGFjayhpbnQmKSB7IGludCBy
ZXMgPSBtX3RvcEJpbmFyeUV4cHI7IG1fdG9wQmluYXJ5RXhwciA9IDA7IHJldHVybiByZXM7IH0K
ICAgICAKLSAgICB2b2lkIGFwcGVuZFVuYXJ5VG9rZW4oaW50JiBzdGFja0RlcHRoLCBpbnQgdG9r
LCBpbnQsIGludCwgaW50KSB7IHN0YWNrRGVwdGggPSAxOyBtX3RvcFVuYXJ5VG9rZW4gPSB0b2s7
IH0KKyAgICB2b2lkIGFwcGVuZFVuYXJ5VG9rZW4oaW50JiBzdGFja0RlcHRoLCBpbnQgdG9rLCBp
bnQpIHsgc3RhY2tEZXB0aCA9IDE7IG1fdG9wVW5hcnlUb2tlbiA9IHRvazsgfQogICAgIGludCB1
bmFyeVRva2VuU3RhY2tMYXN0VHlwZShpbnQmKSB7IHJldHVybiBtX3RvcFVuYXJ5VG9rZW47IH0K
LSAgICB1bnNpZ25lZCB1bmFyeVRva2VuU3RhY2tMYXN0U3RhcnQoaW50JikgeyByZXR1cm4gMDsg
fQotICAgIHVuc2lnbmVkIHVuYXJ5VG9rZW5TdGFja0xhc3RMaW5lU3RhcnRQb3NpdGlvbihpbnQm
KSB7IHJldHVybiAwOyB9CisgICAgSlNUZXh0UG9zaXRpb24gdW5hcnlUb2tlblN0YWNrTGFzdFN0
YXJ0KGludCYpIHsgcmV0dXJuIEpTVGV4dFBvc2l0aW9uKDAsIDAsIDApOyB9CiAgICAgdm9pZCB1
bmFyeVRva2VuU3RhY2tSZW1vdmVMYXN0KGludCYgc3RhY2tEZXB0aCkgeyBzdGFja0RlcHRoID0g
MDsgfQogICAgIAotICAgIHZvaWQgYXNzaWdubWVudFN0YWNrQXBwZW5kKGludCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCwgT3BlcmF0b3IpIHsgfQorICAgIHZvaWQgYXNzaWdubWVudFN0
YWNrQXBwZW5kKGludCwgaW50LCBpbnQsIGludCwgaW50LCBPcGVyYXRvcikgeyB9CiAgICAgaW50
IGNyZWF0ZUFzc2lnbm1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDE7IH0KICAg
ICBjb25zdCBJZGVudGlmaWVyJiBnZXROYW1lKGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0eSkgY29u
c3QgeyBBU1NFUlQocHJvcGVydHkubmFtZSk7IHJldHVybiAqcHJvcGVydHkubmFtZTsgfQogICAg
IFByb3BlcnR5Tm9kZTo6VHlwZSBnZXRUeXBlKGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0eSkgY29u
c3QgeyByZXR1cm4gcHJvcGVydHkudHlwZTsgfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzNDI3KQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTMtMDctMzAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEZp
eCBwcm9ibGVtcyB3aXRoIGRpdm90IGFuZCBsaW5lU3RhcnQgbWlzbWF0Y2hlcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODY2Mi4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCByZWdyZXNzaW9u
IHRlc3QgY2FzZXMgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE4NjYyCisgICAgICAgIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE4NjY0LgorCisgICAgICAgICogZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoKKyAg
ICAgICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpzOgorICAg
ICAgICAodHJ5LnRvRnV6ejEpOgorICAgICAgICAodHJ5LnRvRnV6ejIpOgorCiAyMDEzLTA3LTI5
ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgZmFzdC9zcGF0
aWFsLW5hdmlnYXRpb24gdGVzdCBmYWlsIG9uIG1hYy13azIKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvbGluZS1jb2x1bW4tbnVtYmVycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMTUzNDI3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxNCBAQCBPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAgICAgMTggICBnIGF0IGxpbmUtY29sdW1u
LW51bWJlcnMuaHRtbDoxOTA6MzAKICAgICAxOSAgIGcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5o
dG1sOjE5MDozMAogCistLT4gQ2FzZSAyMSBTdGFjayBUcmFjZToKKyAgICAwICAgdG9GdXp6MjEg
YXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjIwNjoyNgorICAgIDEgICBnbG9iYWwgY29kZSBh
dCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MjA5OjEzCisKKy0tPiBDYXNlIDIyIFN0YWNrIFRy
YWNlOgorICAgIDAgICB0b0Z1enoyMiBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MjIwOjQx
CisgICAgMSAgIGdsb2JhbCBjb2RlIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoyMjQ6MTMK
KwogLS0+IENhc2UgMSBTdGFjayBUcmFjZToKICAgICAwICAgZ2xvYmFsIGNvZGUgYXQgbGluZS1j
b2x1bW4tbnVtYmVycy5qczozOjI4CiAKQEAgLTI3MSw2ICsyNzksMTQgQEAgT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogICAgIDE4ICAgZyBhdCBsaW5lLWNvbHVtbi1u
dW1iZXJzLmpzOjEyNzozMAogICAgIDE5ICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEy
NzozMAogCistLT4gQ2FzZSAyMSBTdGFjayBUcmFjZToKKyAgICAwICAgdG9GdXp6MjFiIGF0IGxp
bmUtY29sdW1uLW51bWJlcnMuanM6MTQxOjI2CisgICAgMSAgIGdsb2JhbCBjb2RlIGF0IGxpbmUt
Y29sdW1uLW51bWJlcnMuanM6MTQ0OjE0CisKKy0tPiBDYXNlIDIyIFN0YWNrIFRyYWNlOgorICAg
IDAgICB0b0Z1enoyMmIgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxNTM6NDEKKyAgICAxICAg
Z2xvYmFsIGNvZGUgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxNTc6MTQKKwogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbAkocmV2aXNpb24gMTUzNDI3KQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTE5OCw2ICsxOTgsMzUgQEAgdHJ5IHsKIH0KIDwvc2NyaXB0PgogCis8IS0tIENh
c2UgMjE6IFJlZ3Jlc3Npb24gdGVzdCBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTg2NjIgLS0+Cis8c2NyaXB0PnRlc3RJZCsrOzwvc2NyaXB0PgorPHNjcmlw
dD4KK3RyeSB7CisgICAgZnVuY3Rpb24gdG9GdXp6MjEoKSB7CisgICAgICAgIGlmIChQcmlvcml0
eVF1ZXVlLnByb3RvdHlwZS5kb1NvcnQoKSBpbnN0YW5jZW9mICh0aGlzIF49IGZ1bmN0aW9uKCkg
eworICAgICAgICB9KSkgcmV0dXJuIDI7IAorICAgIH0KKyAgICB0b0Z1enoyMSgpOworfSBjYXRj
aChlKSB7CisgICAgcHJpbnRTdGFjayhlLnN0YWNrKTsKK30KKzwvc2NyaXB0PgorCis8IS0tIENh
c2UgMjI6IFJlZ3Jlc3Npb24gdGVzdCBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTg2NjQgLS0+Cis8c2NyaXB0PnRlc3RJZCsrOzwvc2NyaXB0PgorPHNjcmlw
dD4KK3RyeSB7CisgICAgZnVuY3Rpb24gdG9GdXp6MjIoKSB7CisgICAgICAgIGZvciAodmFyIGNv
bmYgPSBuZXcgQ29uZmlnT2JqZWN0KHsKKyAgICAgICAgfSkgaW4gc3RyMS5sb2NhbGVDb21wYXJl
KSB7CisgICAgICAgIH0KKyAgICB9CisgICAgdG9GdXp6MjIoKTsKK30gY2F0Y2goZSkgeworICAg
IHByaW50U3RhY2soZS5zdGFjayk7Cit9Cis8L3NjcmlwdD4KKwogPCEtLSBOb3cgZG8gaXQgYWxs
IG92ZXIgd2l0aCBhIGxvYWRlZCBzY3JpcHQgZmlsZS4gLS0+CiA8c2NyaXB0PnRlc3RJZCA9IDA7
PC9zY3JpcHQ+CiAJPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJz
LmpzIj48L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2xp
bmUtY29sdW1uLW51bWJlcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9z
Y3JpcHQtdGVzdHMvbGluZS1jb2x1bW4tbnVtYmVycy5qcwkocmV2aXNpb24gMTUzNDI3KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvbGluZS1jb2x1bW4tbnVtYmVycy5qcwko
d29ya2luZyBjb3B5KQpAQCAtMTM0LDQgKzEzNCwyOSBAQCB0cnkgewogICAgIHByaW50U3RhY2so
ZS5zdGFjayk7CiB9CiAKKy8vIENhc2UgMjE6IFJlZ3Jlc3Npb24gdGVzdCBmcm9tIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2NjIKK3Rlc3RJZCsrOwordHJ5IHsK
KyAgICBmdW5jdGlvbiB0b0Z1enoyMWIoKSB7CisgICAgICAgIGlmIChQcmlvcml0eVF1ZXVlLnBy
b3RvdHlwZS5kb1NvcnQoKSBpbnN0YW5jZW9mICh0aGlzIF49IGZ1bmN0aW9uKCkgeworICAgICAg
ICB9KSkgcmV0dXJuIDI7IAorICAgIH0KKyAgICB0b0Z1enoyMWIoKTsKK30gY2F0Y2goZSkgewor
ICAgIHByaW50U3RhY2soZS5zdGFjayk7Cit9CisKKy8vIENhc2UgMjI6IFJlZ3Jlc3Npb24gdGVz
dCBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg2NjQKK3Rl
c3RJZCsrOwordHJ5IHsKKyAgICBmdW5jdGlvbiB0b0Z1enoyMmIoKSB7CisgICAgICAgIGZvciAo
dmFyIGNvbmYgPSBuZXcgQ29uZmlnT2JqZWN0KHsKKyAgICAgICAgfSkgaW4gc3RyMS5sb2NhbGVD
b21wYXJlKSB7CisgICAgICAgIH0KKyAgICB9CisgICAgdG9GdXp6MjJiKCk7Cit9IGNhdGNoKGUp
IHsKKyAgICBwcmludFN0YWNrKGUuc3RhY2spOworfQorCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOwo=
</data>
<flag name="review"
          id="229560"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>