<?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>188402</bug_id>
          
          <creation_ts>2018-08-07 20:03:55 -0700</creation_ts>
          <short_desc>[WHLSL] Local variables should be statically allocated</short_desc>
          <delta_ts>2018-10-13 15:40:01 -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>WebGPU</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>188641</dependson>
    
    <dependson>189326</dependson>
          <blocked>176199</blocked>
    
    <blocked>189202</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thomas Denney">tdenney</reporter>
          <assigned_to name="Thomas Denney">tdenney</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-feeder</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>tdenney</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1448670</commentid>
    <comment_count>0</comment_count>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-08-07 20:03:55 -0700</bug_when>
    <thetext>The interpreter conforms to the spec; the Metal compiler doesn&apos;t (necessarily). For example, a call to foo() should return 1:

    thread int* bar(bool flag)
    {
        int x = 0;
        if (flag)
            x = 1;
        return &amp;x;
    }

    int foo()
    {
        thread int* x = bar(false);
        thread int* y = bar(true);
        return (*x) * (*y);
    }

The interpreter gets this right; when a VariableDecl is visited in Evaluator.js it only allocates a buffer for that variable if there wasn&apos;t one already. The compiler doesn&apos;t get it right; local variables are emitted in local scope and therefore the Metal compiler *can* choose to store them however it likes. They could be independent, or another function bar2() could alias its local variables with bar() if bar and bar2 are never both called.

Metal Shading Language only permits constant variables to be static if they are declared in global scope. It doesn&apos;t permit statically declared variables in local scope.

When functions are inlined this isn&apos;t a problem; all variables can be &quot;statically&quot; allocated by having them as local variables declared at the top of a shader function. However, not all functions can be (efficiently) inlined in the MSL output if they don&apos;t have reducible control flow. An inefficient solution would &quot;statically&quot; allocate all variables in the main shading functions and pass references to them to non-inlined functions. This awful approach could be mitigated by conservatively finding local variables that references are never created for, but it is far from ideal.

It is worth noting that successive executions of the same function cannot rely on previous values stored at the same local variable because local variables are *always* zero-initialized when they are declared. The compiler and the interpreter behave correctly on the following program:

    thread int* bar(bool flag)
    {
        int x; // x is zero initialized twice
        if (flag)
            x = 1;
        return &amp;x;
    }

    int foo()
    {
        thread int* x = bar(true);
        thread int* y = bar(false);
        return (*x) * (*y);
    }

The result of foo() should be 0.

Given that local variable values do not persist between calls, the largest benefit of statically allocating local variables is that references to local variables can be returned from a function, or passed out via &quot;out&quot; parameters. Many programming languages do not permit this, so a possible mitigation would be to disallow it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456947</commentid>
    <comment_count>1</comment_count>
      <attachid>348987</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-05 17:49:45 -0700</bug_when>
    <thetext>Created attachment 348987
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456948</commentid>
    <comment_count>2</comment_count>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-05 17:50:56 -0700</bug_when>
    <thetext>(In reply to Thomas Denney from comment #1)
&gt; Created attachment 348987 [details]
&gt; WIP

This patch doesn’t yet support function arguments having their address taken, and I haven’t done any work on array references yet. It also contains my modified version of the standard library for faster parsing, so this is very much WIP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1458322</commentid>
    <comment_count>3</comment_count>
      <attachid>349358</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-10 17:10:03 -0700</bug_when>
    <thetext>Created attachment 349358
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1458323</commentid>
    <comment_count>4</comment_count>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-10 17:11:10 -0700</bug_when>
    <thetext>(In reply to Thomas Denney from comment #3)
&gt; Created attachment 349358 [details]
&gt; WIP

This most recent patch is basically complete, but I’m going to wait on the two dependencies of this bug to be resolved before I put this up for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1458372</commentid>
    <comment_count>5</comment_count>
      <attachid>349372</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-10 20:16:11 -0700</bug_when>
    <thetext>Created attachment 349372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459220</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-12 18:51:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/44403028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460863</commentid>
    <comment_count>7</comment_count>
      <attachid>350096</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-19 00:24:12 -0700</bug_when>
    <thetext>Created attachment 350096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461126</commentid>
    <comment_count>8</comment_count>
      <attachid>350096</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-19 14:25:39 -0700</bug_when>
    <thetext>Comment on attachment 350096
Patch

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

Cool patch.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:29
&gt; +    const entryPoints = [];

This is a fairly self-contained block of code. I&apos;d recommend moving it to its own function.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:30
&gt; +    class OnlyVisitFuncDefsThatAreEntryPoints extends Visitor {

How about &quot;gatherEntryPointDefs&quot; since visitors visit everything?

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:41
&gt; +    const allVariablesAndFunctionParameters = new Set();
&gt; +    const functionsThatAreCalledByEntryPoints = new Set();
&gt; +    class FindAllVariablesAndFunctionParameters extends Visitor {

This is a fairly self-contained block of code. I&apos;d recommend moving it to its own function.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:53
&gt; +                node.func.visit(new FindAllVariablesAndFunctionParameters(node.func));

Doesn&apos;t this have exponential runtime because it doesn&apos;t dedup functions?

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:59
&gt; +            node._func = this._currentFunc;

A more descriptive name, please

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:68
&gt; +            node._func = this._currentFunc;
&gt; +            if (!this._currentFunc.isEntryPoint)
&gt; +                allVariablesAndFunctionParameters.add(node);

Why does visitVariableDecl() have a super call but visitFuncParameter not?

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:83
&gt; +    program.add(ptrToGlobalStructType);

This doesn&apos;t seem right, because the parser will never put a PtrType at the global level, so we probably shouldn&apos;t do that either.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:100
&gt; +    let counter = 0;
&gt; +    const varToFieldMap = new Map();
&gt; +    for (let varOrParam of allVariablesAndFunctionParameters) {
&gt; +        const fieldName = `field${counter++}_${varOrParam._func.name}_${varOrParam.name}`;
&gt; +        globalStructType.add(new Field(varOrParam.origin, fieldName, varOrParam.type));
&gt; +        varToFieldMap.set(varOrParam, fieldName);
&gt; +    }
&gt; +
&gt; +    for (let func of functionsThatAreCalledByEntryPoints) {
&gt; +        if (func.returnType.name !== &quot;void&quot;) {
&gt; +            const fieldName = `field${counter++}_return_${func.name}`;
&gt; +            globalStructType.add(new Field(func.origin, fieldName, func.returnType));
&gt; +            func.returnFieldName = fieldName;
&gt; +        }
&gt; +    }

This is a fairly self-contained block of code. I&apos;d recommend moving it to its own function.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:139
&gt; +            get func()
&gt; +            {
&gt; +                return this._func;
&gt; +            }

Not sure if this is necessary if all callers are local to the class.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:157
&gt; +                const possibleAndOverloads = program.globalNameContext.get(Func, functionName);
&gt; +                const callExpressionResolution = CallExpression.resolve(node.origin, possibleAndOverloads, functionName, [ this.globalStructVariableRef ], [ ptrToGlobalStructTypeRef ]);

It&apos;s kind of unfortunate we have to reverse-engineer what would have happened earlier in the compiler. Can we run this stage earlier so we don&apos;t have to do this?

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:171
&gt; +                    return super.visitVariableRef(node);

Isn&apos;t this an error?

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:180
&gt; +                    return new Assignment(node.origin, this._dereferencedCallExpressionForFieldName(node, node.type, varToFieldMap.get(node)), node.initializer.visit(this), node.type);

Nodes need to get assigned (zero-filled) even if they don&apos;t have an initializer. We should add a test for this.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:183
&gt; +                else if (node == this.variableDecl)
&gt; +                    return node;

I&apos;d move this first

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:199
&gt; +                        const anonymousVariable = new AnonymousVariable(node.origin, type);

What is the purpose of the anonymous variables? Why not assign directly into the global struct?

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:208
&gt; +                        exprs.push(this._dereferencedCallExpressionForFieldName(node.func, node.func.returnType, node.func.returnFieldName));

Neat.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:210
&gt; +                    node.argumentList = [ this.globalStructVariableRef ];

Are you sure it&apos;s wise for them all to be using the exact same VariableRef? Seems like we should store a creation lambda instead of the raw variable itself.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:220
&gt; +                if (node.value &amp;&amp; this._func.returnFieldName)

If these don&apos;t match, seems like this should be an error.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:223
&gt; +                return new CommaExpression(node.origin, [
&gt; +                    new Assignment(node.origin, this._dereferencedCallExpressionForFieldName(this._func, this._func.returnType, this._func.returnFieldName), node.value, this._func.returnType),
&gt; +                    new Return(node.origin) ]);

Indentation

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:240
&gt; +            if (node._newParameters)

This pollutes the FuncDef nodes. I&apos;d prefer a side-table.

&gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:250
&gt; +            if (node.func.returnFieldName)
&gt; +                node._returnType = node.resultType = TypeRef.wrap(program.types.get(&quot;void&quot;));

Cool.

&gt; Tools/WebGPUShadingLanguageRI/EBufferBuilder.js:-33
&gt; -    constructor(program)
&gt; -    {
&gt; -        super();
&gt; -        this._program = program;
&gt; -    }
&gt; -    

What? What&apos;s the point of this class if you can never construct it? I don&apos;t see any other constructors or static functions.

&gt; Tools/WebGPUShadingLanguageRI/Func.js:57
&gt; +    set parameters(newValue)

Not a great variable name.

&gt; Tools/WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:51
&gt; +        function createFieldType()
&gt; +        {
&gt; +            return field.type.visit(new Rewriter());
&gt; +        }
&gt; +
&gt; +        function createTypeRef()
&gt; +        {
&gt; +            return TypeRef.wrap(type);
&gt; +        }

Do we need these?

&gt; Tools/WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:101
&gt;              nativeFunc = new NativeFunc(
&gt; -                field.origin, &quot;operator.&quot; + field.name + &quot;=&quot;, createTypeRef(),
&gt; +                field.origin, &quot;operator&amp;.&quot; + field.name, new PtrType(field.origin, addressSpace, createFieldType()),
&gt;                  [
&gt; -                    new FuncParameter(field.origin, null, createTypeRef()),
&gt; -                    new FuncParameter(field.origin, null, createFieldType())
&gt; +                    new FuncParameter(
&gt; +                        field.origin, null,
&gt; +                        new PtrType(field.origin, addressSpace, createTypeRef()))
&gt;                  ],
&gt;                  isCast, shaderType);
&gt; -            setupImplementationData(nativeFunc, ([base, value], offset, structSize, fieldSize) =&gt; {
&gt; -                let result = new EPtr(new EBuffer(structSize), 0);
&gt; -                result.copyFrom(base, structSize);
&gt; -                result.plus(offset).copyFrom(value, fieldSize);
&gt; -                return result;
&gt; +            setupImplementationData(nativeFunc, ([base], offset, structSize, fieldSize) =&gt; {
&gt; +                base = base.loadValue();
&gt; +                if (!base)
&gt; +                    throw new WTrapError(field.origin.originString, &quot;Null dereference&quot;);
&gt; +                return EPtr.box(base.plus(offset));
&gt;              });
&gt;              program.add(nativeFunc);

diff really made a mess of things, didn&apos;t it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461212</commentid>
    <comment_count>9</comment_count>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-19 19:49:41 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #8)
&gt; &gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:53
&gt; &gt; +                node.func.visit(new FindAllVariablesAndFunctionParameters(node.func));
&gt; 
&gt; Doesn&apos;t this have exponential runtime because it doesn&apos;t dedup functions?

Damn, good catch.

&gt; &gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:157
&gt; &gt; +                const possibleAndOverloads = program.globalNameContext.get(Func, functionName);
&gt; &gt; +                const callExpressionResolution = CallExpression.resolve(node.origin, possibleAndOverloads, functionName, [ this.globalStructVariableRef ], [ ptrToGlobalStructTypeRef ]);
&gt; 
&gt; It&apos;s kind of unfortunate we have to reverse-engineer what would have
&gt; happened earlier in the compiler. Can we run this stage earlier so we don&apos;t
&gt; have to do this?
&gt;

Annoyingly we need types for this stage, which are only fully annotated in the Checker stage. An earlier version of this patch tried doing this allocation but I couldn’t get it working reliably.
 
&gt; &gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:171
&gt; &gt; +                    return super.visitVariableRef(node);
&gt; 
&gt; Isn&apos;t this an error?

No, anonymous variables can be wrapped in VariableRefs.

&gt; &gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:199
&gt; &gt; +                        const anonymousVariable = new AnonymousVariable(node.origin, type);
&gt; 
&gt; What is the purpose of the anonymous variables? Why not assign directly into
&gt; the global struct?

I’m going to add a comment into the code explaining why not, because it has now caught me out several times. Consider the case foo(foo(a, b), c). We initially evaluate c, and then evaluate foo(a, b) per the RTL calling convention. To evaluate foo(a, b) we evaluate b, then a, and place them in the global struct for the call to foo. However, this would mean that if c had previously been placed in the global struct then the outer foo wouldn’t see the value of evaluating c, but the value of evaluating b. Therefore *all* the arguments have to be evaluated into anonymous variables, then copied into the global struct, and then the function has to be called. The existing Metal code generator (MSLStatementEmitter.visitCallExpression) and interpreter (Evaluator._evaluateArguments) both respect this behavior and there are tests that catch this.

&gt; &gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:210
&gt; &gt; +                    node.argumentList = [ this.globalStructVariableRef ];
&gt; 
&gt; Are you sure it&apos;s wise for them all to be using the exact same VariableRef?
&gt; Seems like we should store a creation lambda instead of the raw variable
&gt; itself.
&gt;

There’s nothing in the compiler/interpreter at the moment that memoizes the evaluation or compilation of a node, so it would always be re-evaluated/re-compiled wherever it occurs, but this change seems harmless.
 
&gt; &gt; Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:240
&gt; &gt; +            if (node._newParameters)
&gt; 
&gt; This pollutes the FuncDef nodes. I&apos;d prefer a side-table.

Cool, will do.

&gt; &gt; Tools/WebGPUShadingLanguageRI/EBufferBuilder.js:-33
&gt; &gt; -    constructor(program)
&gt; &gt; -    {
&gt; &gt; -        super();
&gt; &gt; -        this._program = program;
&gt; &gt; -    }
&gt; &gt; -    
&gt; 
&gt; What? What&apos;s the point of this class if you can never construct it? I don&apos;t
&gt; see any other constructors or static functions.
&gt; 

There is a default constructor (equivalent to constructor () { super(); }), and there are no construction sites that actually passed in the program object any more, nor is this._program used anywhere in the class.

&gt; &gt; Tools/WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:51
&gt; &gt; +        function createFieldType()
&gt; &gt; +        {
&gt; &gt; +            return field.type.visit(new Rewriter());
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        function createTypeRef()
&gt; &gt; +        {
&gt; &gt; +            return TypeRef.wrap(type);
&gt; &gt; +        }
&gt; 
&gt; Do we need these?

createFieldType() isn’t necessary (it works fine to continue using field.type) and createTypeRef is literally just used as a utility function 3 times (as you noticed, diff had a bad time with this file — I didn’t write these functions). I’ll get rid of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461249</commentid>
    <comment_count>10</comment_count>
      <attachid>350175</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-19 23:33:31 -0700</bug_when>
    <thetext>Created attachment 350175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461661</commentid>
    <comment_count>11</comment_count>
      <attachid>350175</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-20 19:10:04 -0700</bug_when>
    <thetext>Comment on attachment 350175
Patch

Rejecting attachment 350175 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 350175, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=350175&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=188402&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Updating working directory
Processing patch 350175 from bug 188402.
Fetching: https://bugs.webkit.org/attachment.cgi?id=350175
Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Myles C. Maxfield&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 14 diffs from patch file(s).
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/WebGPUShadingLanguageRI/All.js
patching file Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js
patching file Tools/WebGPUShadingLanguageRI/CallExpression.js
patching file Tools/WebGPUShadingLanguageRI/EBufferBuilder.js
patching file Tools/WebGPUShadingLanguageRI/Func.js
patching file Tools/WebGPUShadingLanguageRI/FuncDef.js
patching file Tools/WebGPUShadingLanguageRI/Prepare.js
patching file Tools/WebGPUShadingLanguageRI/Rewriter.js
patching file Tools/WebGPUShadingLanguageRI/SPIRV.html
patching file Tools/WebGPUShadingLanguageRI/SynthesizeStructAccessors.js
Hunk #1 FAILED at 20.
1 out of 1 hunk FAILED -- saving rejects to file Tools/WebGPUShadingLanguageRI/SynthesizeStructAccessors.js.rej
patching file Tools/WebGPUShadingLanguageRI/Test.html
patching file Tools/WebGPUShadingLanguageRI/Test.js
Hunk #1 succeeded at 8081 (offset 164 lines).
patching file Tools/WebGPUShadingLanguageRI/index.html

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Myles C. Maxfield&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 14 diffs from patch file(s).
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/WebGPUShadingLanguageRI/All.js
patching file Tools/WebGPUShadingLanguageRI/AllocateAtEntryPoints.js
patching file Tools/WebGPUShadingLanguageRI/CallExpression.js
patching file Tools/WebGPUShadingLanguageRI/EBufferBuilder.js
patching file Tools/WebGPUShadingLanguageRI/Func.js
patching file Tools/WebGPUShadingLanguageRI/FuncDef.js
patching file Tools/WebGPUShadingLanguageRI/Prepare.js
patching file Tools/WebGPUShadingLanguageRI/Rewriter.js
patching file Tools/WebGPUShadingLanguageRI/SPIRV.html
patching file Tools/WebGPUShadingLanguageRI/SynthesizeStructAccessors.js
Hunk #1 FAILED at 20.
1 out of 1 hunk FAILED -- saving rejects to file Tools/WebGPUShadingLanguageRI/SynthesizeStructAccessors.js.rej
patching file Tools/WebGPUShadingLanguageRI/Test.html
patching file Tools/WebGPUShadingLanguageRI/Test.js
Hunk #1 succeeded at 8081 (offset 164 lines).
patching file Tools/WebGPUShadingLanguageRI/index.html

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Myles C. Maxfield&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
From https://git.webkit.org/git/WebKit
   2a2836e6631..dee36913aef  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 236296 = 2a2836e6631fd50250fbec7774a49ee368daa97b
r236297 = 560dda40a46c0fea73db1cb6365debaee9273c3a
r236298 = 9ff9defcd0e9c7e3712bd2f28cc498e9e99f7902
r236299 = dee36913aefb932eb3d82e2b3510193dac0212ff
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: https://webkit-queues.webkit.org/results/9290392</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461751</commentid>
    <comment_count>12</comment_count>
      <attachid>350175</attachid>
    <who name="EWS">ews-feeder</who>
    <bug_when>2018-09-20 23:55:22 -0700</bug_when>
    <thetext>Comment on attachment 350175
Patch

Rejecting attachment 350175 from commit-queue.

tdenney@apple.com does not have committer permissions according to https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462066</commentid>
    <comment_count>13</comment_count>
      <attachid>350419</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-21 14:02:29 -0700</bug_when>
    <thetext>Created attachment 350419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462067</commentid>
    <comment_count>14</comment_count>
      <attachid>350419</attachid>
    <who name="EWS">ews-feeder</who>
    <bug_when>2018-09-21 14:03:16 -0700</bug_when>
    <thetext>Comment on attachment 350419
Patch

Rejecting attachment 350419 from commit-queue.

tdenney@apple.com does not have committer permissions according to https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462073</commentid>
    <comment_count>15</comment_count>
      <attachid>350421</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-09-21 14:07:04 -0700</bug_when>
    <thetext>Created attachment 350421
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462102</commentid>
    <comment_count>16</comment_count>
      <attachid>350421</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-21 14:46:10 -0700</bug_when>
    <thetext>Comment on attachment 350421
Patch

Clearing flags on attachment: 350421

Committed r236361: &lt;https://trac.webkit.org/changeset/236361&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462349</commentid>
    <comment_count>17</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-22 03:03:00 -0700</bug_when>
    <thetext>*** Bug 189107 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468904</commentid>
    <comment_count>18</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 15:40:01 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/105</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348987</attachid>
            <date>2018-09-05 17:49:45 -0700</date>
            <delta_ts>2018-09-10 17:09:59 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-188402-20180905174944.patch</filename>
            <type>text/plain</type>
            <size>141287</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NzE0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDYwN2JjYjg2YzQ3NGI1MDhjZTZjY2Q0M2YwMzUxMDBk
MTYyNDI3Yi4uN2M0MGM1NzUzNDNhOGNlNzExYjFhZTc2NjM1NmUwNzU2MDYwMzBjNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUy
IEBACisyMDE4LTA5LTA1ICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dITFNMXSBMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2Nh
dGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9BbGxvY2F0ZUF0RW50cnlQb2ludHMuanM6IEFkZGVkLgorICAgICAgICAoZmluZEVu
dHJ5UG9pbnRzLnByb3RvdHlwZS52aXNpdEZ1bmNEZWYpOgorICAgICAgICAoZmluZEVudHJ5UG9p
bnRzKToKKyAgICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5GaW5kVmFyaWFibGVzKToKKyAg
ICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5GaW5kVmFyaWFibGVzLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlRGVjbCk6CisgICAgICAgIChhbGxvY2F0ZUF0RW50cnlQb2ludHMuRmluZFZhcmlh
Ymxlcy5wcm90b3R5cGUudmlzaXRGdW5jUGFyYW1ldGVyKToKKyAgICAgICAgKGFsbG9jYXRlQXRF
bnRyeVBvaW50cy5GaW5kVmFyaWFibGVzLnByb3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToK
KyAgICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5GaW5kVmFyaWFibGVzV2hvc2VBZGRyZXNz
SXNUYWtlbi5wcm90b3R5cGUudmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAgICAgICAo
YWxsb2NhdGVBdEVudHJ5UG9pbnRzLkZpbmRWYXJpYWJsZXNXaG9zZUFkZHJlc3NJc1Rha2VuLnBy
b3RvdHlwZS52aXNpdE1ha2VQdHJFeHByZXNzaW9uKToKKyAgICAgICAgKGFsbG9jYXRlQXRFbnRy
eVBvaW50cy5GaW5kVmFyaWFibGVzV2hvc2VBZGRyZXNzSXNUYWtlbi5wcm90b3R5cGUudmlzaXRN
YWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5G
aW5kVmFyaWFibGVzV2hvc2VBZGRyZXNzSXNUYWtlbik6CisgICAgICAgIChhbGxvY2F0ZUF0RW50
cnlQb2ludHMuUmVwbGFjZVVzZXMucHJvdG90eXBlLnZpc2l0VmFyaWFibGVEZWNsKToKKyAgICAg
ICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5SZXBsYWNlVXNlcyk6CisgICAgICAgIChhbGxvY2F0
ZUF0RW50cnlQb2ludHMuKToKKyAgICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanM6CisgICAg
ICAgIChBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90
b3R5cGUuZ2V0IGlzQWRkcmVzc1Rha2VuKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnBy
b3RvdHlwZS5zZXQgaXNBZGRyZXNzVGFrZW4pOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxkZXIucHJvdG90
eXBlLl9jcmVhdGVFUHRyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFs
dWF0b3IuanM6CisgICAgICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtl
QmxvY2spOgorICAgICAgICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9u
KToKKyAgICAgICAgKEV2YWx1YXRvcik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRmFzdFN0YW5kYXJkTGlicmFyeS5qczogQWRkZWQuCisgICAgICAgIChwcmludCk6CisgICAg
ICAgIChsZXQuc3RhbmRhcmRMaWJyYXJ5KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9GdW5jRGVmLmpzOgorICAgICAgICAoRnVuY0RlZi5wcm90b3R5cGUuc2V0IGJvZHkpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanM6CisgICAgICAgIChs
ZXQucHJlcGFyZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6
ZURlZmF1bHRDb25zdHJ1Y3Rvck9wZXJhdG9yLmpzOgorICAgICAgICAoc3ludGhlc2l6ZURlZmF1
bHRDb25zdHJ1Y3Rvck9wZXJhdG9yKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9UZXN0Lmh0bWw6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qczoK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZURlY2wuanM6CisgICAg
ICAgIChWYXJpYWJsZURlY2wpOgorICAgICAgICAoVmFyaWFibGVEZWNsLnByb3RvdHlwZS5nZXQg
aXNBZGRyZXNzVGFrZW4pOgorICAgICAgICAoVmFyaWFibGVEZWNsLnByb3RvdHlwZS5zZXQgaXNB
ZGRyZXNzVGFrZW4pOgorCiAyMDE4LTA5LTA1ICBXb29kcm93IFdhbmcgIDx3b29kcm93X3dhbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBpbmZyYXN0cnVjdHVyZSB0byBkdW1wIHJlc291cmNl
IGxvYWQgc3RhdGlzdGljcwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQWxsLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCmluZGV4IDkw
ZmM4NDEzYTY1MTIyNDQ2YmYwMWZkOTY3ZGQ2NTEzOWEwZjg3ZTkuLjI1ZjEwYWQ0ZjA3ZDdiYjEz
MzU3MDdjMTVjZTM3ODBhMmNlNWU5YTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0FsbC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwu
anMKQEAgLTM3LDYgKzM3LDcgQEAgbG9hZCgiUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzIik7
CiBsb2FkKCJOYXRpdmVUeXBlLmpzIik7CiAKIGxvYWQoIkFkZHJlc3NTcGFjZS5qcyIpOworbG9h
ZCgiQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzIik7CiBsb2FkKCJBbm9ueW1vdXNWYXJpYWJsZS5q
cyIpOwogbG9hZCgiQXJyYXlSZWZUeXBlLmpzIik7CiBsb2FkKCJBcnJheVR5cGUuanMiKTsKQEAg
LTE0MCw3ICsxNDEsNyBAQCBsb2FkKCJSZXR1cm4uanMiKTsKIGxvYWQoIlJldHVybkNoZWNrZXIu
anMiKTsKIGxvYWQoIlJldHVybkV4Y2VwdGlvbi5qcyIpOwogbG9hZCgiU2FtcGxlci5qcyIpOwot
bG9hZCgiU3RhbmRhcmRMaWJyYXJ5LmpzIik7Citsb2FkKCJGYXN0U3RhbmRhcmRMaWJyYXJ5Lmpz
Iik7CiBsb2FkKCJTdGF0ZW1lbnRDbG9uZXIuanMiKTsKIGxvYWQoIlN0cnVjdExheW91dEJ1aWxk
ZXIuanMiKTsKIGxvYWQoIlN0cnVjdFR5cGUuanMiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
YTZmZmJjNzYyOThkYTI4MmVjZjM1ZTA5OTZhYjg3Njk1ZGIzNGQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpz
CkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGZpbmRFbnRyeVBvaW50cyhwcm9ncmFt
KQoreworICAgIGNvbnN0IGVudHJ5UG9pbnRMaXN0ID0gW107CisgICAgY2xhc3MgT25seVZpc2l0
RnVuY0RlZnNUaGF0QXJlRW50cnlQb2ludHMgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgdmlz
aXRGdW5jRGVmKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzRW50cnlQ
b2ludCkKKyAgICAgICAgICAgICAgICBlbnRyeVBvaW50TGlzdC5wdXNoKG5vZGUpOworICAgICAg
ICB9CisgICAgfQorICAgIHByb2dyYW0udmlzaXQobmV3IE9ubHlWaXNpdEZ1bmNEZWZzVGhhdEFy
ZUVudHJ5UG9pbnRzKCkpOworICAgIHJldHVybiBlbnRyeVBvaW50TGlzdDsKK30KKworZnVuY3Rp
b24gYWxsb2NhdGVBdEVudHJ5UG9pbnRzKHByb2dyYW0pCit7CisgICAgY29uc3QgbmFtZWRWYXJp
YWJsZXMgPSBuZXcgU2V0KCk7CisgICAgY29uc3QgZnVuY1BhcmFtZXRlcnMgPSBuZXcgU2V0KCk7
CisgICAgLy8gRklYTUU6IFZlcmlmeSB0aGF0IGl0IGlzIG5ldmVyIHBvc3NpYmxlIHRvIHRha2Ug
dGhlIGFkZHJlc3Mgb2YgYW4gYW5vbnltb3VzIHZhcmlhYmxlLgorICAgIC8vIFRoZSBwcmlvciBz
dGFnZXMgc2hvdWxkIGVuc3VyZSB0aGF0IG9ubHkgbC12YWx1ZXMgY2FuIGJlIHJlZmVyZW5jZWQs
IGJ1dCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMuCisgICAgLy8gY29uc3QgYW5vbnltb3VzVmFyaWFi
bGVzID0gbmV3IFNldCgpOworICAgIAorICAgIGNvbnN0IGVudHJ5UG9pbnRMaXN0ID0gZmluZEVu
dHJ5UG9pbnRzKHByb2dyYW0pOworICAgIAorICAgIGNsYXNzIEZpbmRWYXJpYWJsZXMgZXh0ZW5k
cyBWaXNpdG9yIHsKKyAgICAgICAgY29uc3RydWN0b3IoZnVuYykKKyAgICAgICAgeworICAgICAg
ICAgICAgc3VwZXIoKTsKKyAgICAgICAgICAgIHRoaXMuX2Z1bmMgPSBmdW5jOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBuYW1lZFZhcmlhYmxlcy5hZGQobm9kZSk7CisgICAgICAgICAgICBub2RlLl9v
cmlnaW5hbEZ1bmN0aW9uID0gdGhpcy5fZnVuYzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdmlzaXRGdW5jUGFyYW1ldGVyKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmNQ
YXJhbWV0ZXJzLmFkZChub2RlKTsKKyAgICAgICAgICAgIG5vZGUuX29yaWdpbmFsRnVuY3Rpb24g
PSB0aGlzLl9mdW5jOworICAgICAgICB9CisgICAgCisgICAgICAgIHZpc2l0Q2FsbEV4cHJlc3Np
b24obm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVmlzaXRvci52aXNpdENhbGxFeHBy
ZXNzaW9uIGRvZXNuJ3QgZG8gdGhpcyBkZXNjZW50LgorICAgICAgICAgICAgLy8gRklYTUU6IEhv
dyBpcyB0aGlzIGdvaW5nIHRvIHdvcmsgd2l0aCBzeW50aGVzaXplZCBmdW5jdGlvbnM/IERvZXMg
aXQgZXZlciBuZWVkIHRvPworICAgICAgICAgICAgc3VwZXIudmlzaXRDYWxsRXhwcmVzc2lvbihu
b2RlKTsKKyAgICAgICAgICAgIGlmIChub2RlLmZ1bmMgaW5zdGFuY2VvZiBGdW5jRGVmKSB7Cisg
ICAgICAgICAgICAgICAgbm9kZS5fY2FsbGVyID0gdGhpcy5fZnVuYzsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUuZnVuYy5fY2FsbGVyc0NhbGxFeHByZXNzaW9ucykKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS5mdW5jLl9jYWxsZXJzQ2FsbEV4cHJlc3Npb25zID0gW107CisgICAgICAgICAg
ICAgICAgbm9kZS5mdW5jLl9jYWxsZXJzQ2FsbEV4cHJlc3Npb25zLnB1c2gobm9kZSk7CisgICAg
ICAgICAgICAgICAgbm9kZS5mdW5jLnZpc2l0KG5ldyBGaW5kVmFyaWFibGVzKG5vZGUuZnVuYykp
OworICAgICAgICAgICAgfQorICAgICAgICB9IAorICAgIH0KKyAgICAKKyAgICBmb3IgKGxldCBl
bnRyeVBvaW50IG9mIGVudHJ5UG9pbnRMaXN0KQorICAgICAgICBlbnRyeVBvaW50LnZpc2l0KG5l
dyBGaW5kVmFyaWFibGVzKGVudHJ5UG9pbnQpKTsKKyAgICAKKyAgICBjbGFzcyBGaW5kVmFyaWFi
bGVzV2hvc2VBZGRyZXNzSXNUYWtlbiBleHRlbmRzIFZpc2l0b3IgeworICAgICAgICB2aXNpdERl
cmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTa2lw
IG92ZXIgdGhlIGNhc2Ugd2hlcmUgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGFuZCBpbW1lZGlh
dGVseSBkZXJlZmVyZW5jZWQuCisgICAgICAgICAgICBpZiAobm9kZS5wdHIgaW5zdGFuY2VvZiBN
YWtlUHRyRXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICBub2RlLnB0ci5sVmFsdWUudmlzaXQo
dGhpcyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3VwZXIudmlzaXREZXJl
ZmVyZW5jZUV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZp
c2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5v
ZGUubFZhbHVlIGluc3RhbmNlb2YgVmFyaWFibGVSZWYpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCB2YXJpYWJsZSA9IG5vZGUubFZhbHVlLnZhcmlhYmxlOworICAgICAgICAgICAgICAgIGlmICgh
KHZhcmlhYmxlIGluc3RhbmNlb2YgVmFyaWFibGVEZWNsIHx8IHZhcmlhYmxlIGluc3RhbmNlb2Yg
QW5vbnltb3VzVmFyaWFibGUgfHwgdmFyaWFibGUgaW5zdGFuY2VvZiBGdW5jUGFyYW1ldGVyKSkK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb24ndCBrbm93IGhvdyB0byBo
YW5kbGUgbWFrZSBwdHIgb2YgJHtub2RlLmxWYWx1ZX0nYCk7CisgICAgICAgICAgICAgICAgdmFy
aWFibGUuaXNBZGRyZXNzVGFrZW4gPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25vZGUubFZhbHVlfSBub3QgYSBzdXBwb3J0ZWQg
bC12YWx1ZWApOworICAgICAgICAgICAgc3VwZXIudmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2Rl
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNz
aW9uKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBHb2luZyB0byBoYXZl
IHRvIHdvcmsgb3V0IHNlbWFudGljcyBoZXJlLgorICAgICAgICAgICAgLy8gRklYTUU6IEFsc28g
bmVlZCB0byBmaWd1cmUgaXQgb3V0IGZvciBjb252ZXJ0IHB0ciB0byBhcnJheSByZWYgZXhwcmVz
c2lvbnMgKHRoZXNlIHNob3VsZCBiZSBzaW1wbGVyKQorICAgICAgICAgICAgc3VwZXIudmlzaXRN
YWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGNvbnN0IGZpbmRWYXJpYWJsZXNXaG9zZUFkZHJlc3NJc1Rha2VuVmlzaXRvciA9IG5ldyBGaW5k
VmFyaWFibGVzV2hvc2VBZGRyZXNzSXNUYWtlbigpOworICAgIHByb2dyYW0udmlzaXQoZmluZFZh
cmlhYmxlc1dob3NlQWRkcmVzc0lzVGFrZW5WaXNpdG9yKTsKKyAgICAKKyAgICAvLyBGSVhNRTog
U3VwcG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzCisgICAgCisgICAgZm9yIChsZXQgbmFtZWRWYXIg
b2YgbmFtZWRWYXJpYWJsZXMpIHsKKyAgICAgICAgaWYgKG5hbWVkVmFyLmlzQWRkcmVzc1Rha2Vu
ICYmICFuYW1lZFZhci5fb3JpZ2luYWxGdW5jdGlvbi5pc0VudHJ5UG9pbnQpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGZ1bmMgPSBuYW1lZFZhci5fb3JpZ2luYWxGdW5jdGlvbjsKKyAgICAgICAgICAg
IGNvbnN0IHB0clR5cGUgPSBuZXcgUHRyVHlwZShuYW1lZFZhci5vcmlnaW4sICJ0aHJlYWQiLCBu
YW1lZFZhci50eXBlKTsKKyAgICAgICAgICAgIGNvbnN0IG1ha2VGdW5jUGFyYW1ldGVyID0gKCkg
PT4geworICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNQYXJhbWV0ZXIgPSBuZXcgRnVuY1BhcmFt
ZXRlcihuYW1lZFZhci5vcmlnaW4sIG51bGwsIHB0clR5cGUpOworICAgICAgICAgICAgICAgIGZ1
bmNQYXJhbWV0ZXIuX29yaWdpbmFsVmFyaWFibGUgPSBuYW1lZFZhcjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZnVuY1BhcmFtZXRlcjsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb25z
dCBwYXJhbSA9IG1ha2VGdW5jUGFyYW1ldGVyKCk7CisgICAgICAgICAgICBmdW5jLnBhcmFtZXRl
cnMucHVzaChwYXJhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNsYXNzIFJlcGxhY2VV
c2VzIGV4dGVuZHMgUmV3cml0ZXIgeworICAgICAgICAgICAgICAgIHZpc2l0VmFyaWFibGVEZWNs
KG5vZGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9
PSBuYW1lZFZhcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFByb3BhZ2F0
ZSB0eXBlcyBjb3JyZWN0bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcmVmRXhw
cmVzc2lvbiA9IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIFZhcmlhYmxl
UmVmLndyYXAocGFyYW0pLCBub2RlLnR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IEFjdHVhbGx5IHVzZSB0aGUgY29ycmVjdCB0eXBlCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBmdW5jVG9DYWxsID0gcHJvZ3JhbS5nbG9iYWxOYW1lQ29udGV4dC5yZXNvbHZl
RnVuY092ZXJsb2FkKCJvcGVyYXRvciBjYXN0IiwgW10sIG5vZGUudHlwZSkuZnVuYzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghZnVuY1RvQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgaW5pdGlhbGl6YXRpb24gZnVu
Y3Rpb24gZm9yICR7bm9kZX1gKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJoczsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmluaXRpYWxpemVyKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJocyA9IG5vZGUuaW5pdGlhbGl6ZXI7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SSBzZWVtIHRvIGhhdmUgdG8gZmFrZSBxdWl0ZSBhIGxvdCBvZiBzdHJ1Y3R1cmUgaGVyZS4gSXMg
dGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXM/CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmhzID0gbmV3IENhbGxFeHByZXNzaW9uKG5vZGUub3JpZ2luLCAib3BlcmF0b3IgY2FzdCIs
IFtdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByaHMucmVzdWx0VHlwZSA9IHJocy5f
cmV0dXJuVHlwZSA9IG5vZGUudHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByaHMu
X2lzQ2FzdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmhzLmZ1bmMgPSBm
dW5jVG9DYWxsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSB2YXJpYWJsZSBhdCB0aGUgZW50cnkg
cG9pbnQgZG9lc24ndCBtYXR0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLl9pbml0
aWFsaXplciA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc3NpZ25tZW50
ID0gbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIGRlcmVmRXhwcmVzc2lvbiwgcmhzLCBub2Rl
LnR5cGUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGhhdmUgdG8gaW5jbHVkZSB0aGUgZGVyZWZlbmNlIGJlY2F1c2UgdGhlIHN1cnJvdW5kaW5n
IG5vZGUgY291bGQgdXNlIHRoZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBbIGFzc2lnbm1lbnQsIGRlcmVmRXhw
cmVzc2lvbiBdKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSXMgdGhlIHR5cGUgT0sgaGVyZT8KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGUgPT0gbmFtZWRWYXIpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9y
aWdpbiwgVmFyaWFibGVSZWYud3JhcChwYXJhbSksIG5vZGUudHlwZSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICB2aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5sVmFsdWUudmFyaWFibGUgPT0g
bmFtZWRWYXIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmFyaWFibGVSZWYud3Jh
cChwYXJhbSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuYy5ib2R5
ID0gZnVuYy5ib2R5LnZpc2l0KG5ldyBSZXBsYWNlVXNlcygpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZnVuY3Rpb24gdXBkYXRlQ2FsbGVycyhjYWxsZXJzQ2FsbEV4cHJlc3Npb25zKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGNhbGxlckNhbGxFeHByIG9m
IGNhbGxlcnNDYWxsRXhwcmVzc2lvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2Fs
bGluZ0Z1bmN0aW9uID0gY2FsbGVyQ2FsbEV4cHIuX2NhbGxlcjsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRW50cnkgcG9pbnRzIHNob3VsZCBoYXZlIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgbm90
IGV4dHJhIHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxpbmdGdW5jdGlv
bi5pc0VudHJ5UG9pbnQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIEEgZnVuY3Rpb24gbWF5IGdl
dCBjYWxsZWQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIG1heSBiZSBhYmxlIHRvIHNraXAgYWRkaW5n
IHRoZSBwYXJhbWV0ZXIuCisgICAgICAgICAgICAgICAgICAgIGxldCBoYXNGYWtlUGFyYW1ldGVy
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtIG9mIGNhbGxpbmdG
dW5jdGlvbi5wYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0u
X29yaWdpbmFsVmFyaWFibGUgJiYgcGFyYW0uX29yaWdpbmFsVmFyaWFibGUgPT0gbmFtZWRWYXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNGYWtlUGFyYW1ldGVyID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFoYXNGYWtlUGFyYW1ldGVyKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsaW5nRnVuY3Rpb24ucGFyYW1ldGVycy5wdXNoKG1ha2VGdW5jUGFyYW1ldGVy
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYWRkZWQgYSBmYWtlIHBhcmFt
ZXRlciB0aGVuIGFsbCB0aGUgY2FsbGVycyBtdXN0IGFsc28gZ2V0IGZha2UgcGFyYW1ldGVycwor
ICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ2FsbGVycyhjYWxsaW5nRnVuY3Rpb24uX2Nh
bGxlcnNDYWxsRXhwcmVzc2lvbnMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB1cGRhdGVD
YWxsZXJzKGZ1bmMuX2NhbGxlcnNDYWxsRXhwcmVzc2lvbnMpOworICAgICAgICB9ICAgCisgICAg
fQorICAgIAorICAgIGZvciAobGV0IGVudHJ5UG9pbnQgb2YgZW50cnlQb2ludExpc3QpIHsKKyAg
ICAgICAgY29uc3QgdmFyc1RvRGVjbGFyZUluVGhpc0VudHJ5UG9pbnQgPSBuZXcgU2V0KCk7Cisg
ICAgICAgIGNsYXNzIEZpbmRDYWxsRXhwcmVzc2lvbiBleHRlbmRzIFZpc2l0b3IgeworICAgICAg
ICAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAgICAgICAgICAgICAg
Zm9yIChsZXQgcGFyYW0gb2Ygbm9kZS5mdW5jLnBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhcmFtLl9vcmlnaW5hbFZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyc1RvRGVjbGFyZUluVGhpc0VudHJ5UG9pbnQuYWRkKHBhcmFtLl9vcmlnaW5hbFZhcmlh
YmxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZW50cnlQb2ludC52aXNpdChuZXcgRmluZENhbGxFeHByZXNzaW9uKCkpOworICAgICAgICAK
KyAgICAgICAgLy8gTW92ZSB0aGUgZGVjbGFyYXRpb25zIGludG8gdGhlIGVudHJ5IHBvaW50Cisg
ICAgICAgIGZvciAobGV0IHZhclRvRGVjbGFyZSBvZiB2YXJzVG9EZWNsYXJlSW5UaGlzRW50cnlQ
b2ludCkKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuYm9keS5zdGF0ZW1lbnRzLnVuc2hpZnQodmFy
VG9EZWNsYXJlKTsKKyAgICAgICAgCisgICAgICAgIC8vIENyZWF0ZSB0aGUgaW5pdGlhbCBtYXBw
aW5nIHdpdGhpbiB0aGUgZW50cnkgcG9pbnQKKyAgICAgICAgY29uc3QgdmFyaWFibGVUb1JlZmVy
ZW5jZU1hcHBpbmcgPSBuZXcgTWFwKCk7CisgICAgICAgIGZvciAobGV0IHZhclRvRGVjbGFyZSBv
ZiB2YXJzVG9EZWNsYXJlSW5UaGlzRW50cnlQb2ludCkKKyAgICAgICAgICAgIHZhcmlhYmxlVG9S
ZWZlcmVuY2VNYXBwaW5nLnNldCh2YXJUb0RlY2xhcmUsIG5ldyBNYWtlUHRyRXhwcmVzc2lvbih2
YXJUb0RlY2xhcmUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHZhclRvRGVjbGFyZSkpKTsKKyAg
ICAgICAgCisgICAgICAgIGNsYXNzIEFkZEFyZ3NUb0FsbENhbGxFeHByZXNzaW9ucyBleHRlbmRz
IFZpc2l0b3IgeworICAgICAgICAgICAgY29uc3RydWN0b3IodmFyaWFibGVNYXBwaW5nKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAgICAgICAgICAgdGhp
cy5fdmFyaWFibGVNYXBwaW5nID0gdmFyaWFibGVNYXBwaW5nOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBfY29uc3RydWN0TWFwcGluZ0ZvckZ1bmNEZWYobm9kZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gbmV3IE1hcCgp
OworICAgICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtIG9mIG5vZGUucGFyYW1ldGVycykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0uX29yaWdpbmFsVmFyaWFibGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0KHBhcmFtLl9vcmlnaW5hbFZhcmlhYmxlLCBW
YXJpYWJsZVJlZi53cmFwKHBhcmFtKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmc7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5v
ZGUpOworICAgICAgICAgICAgICAgIGlmIChub2RlLmZ1bmMgaW5zdGFuY2VvZiBGdW5jRGVmKSB7
CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGggPCBu
b2RlLmZ1bmMucGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBhcmFtID0gbm9kZS5mdW5jLnBhcmFtZXRlcnNbbm9kZS5hcmd1bWVudExpc3QubGVuZ3Ro
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW0uX29yaWdpbmFsVmFyaWFibGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BhcmFtfSBz
aG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbmFsIHZhcmlhYmxlIGRlbGNhcmF0aW9u
YCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmdWYWx1ZSA9IHRoaXMuX3Zhcmlh
YmxlTWFwcGluZy5nZXQocGFyYW0uX29yaWdpbmFsVmFyaWFibGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QucHVzaChhcmdWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5mdW5j
LnZpc2l0KG5ldyBBZGRBcmdzVG9BbGxDYWxsRXhwcmVzc2lvbnModGhpcy5fY29uc3RydWN0TWFw
cGluZ0ZvckZ1bmNEZWYobm9kZS5mdW5jKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZW50cnlQb2ludC52aXNpdChuZXcg
QWRkQXJnc1RvQWxsQ2FsbEV4cHJlc3Npb25zKHZhcmlhYmxlVG9SZWZlcmVuY2VNYXBwaW5nKSk7
CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzIGIvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMKaW5kZXggNDBmNWJkMzFj
YzNmN2Q0OWZkMWFiZGZkM2IzZjg0MjU3MGIzM2MwMi4uZDllODRjYzkxMDljMTIxZWU4Njc4MjQ4
Y2RhY2U5NmZkMzM3NGI5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQW5vbnltb3VzVmFyaWFibGUuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQW5vbnltb3VzVmFyaWFibGUuanMKQEAgLTM0LDExICszNCwyMiBAQCBjbGFzcyBBbm9ueW1v
dXNWYXJpYWJsZSBleHRlbmRzIFZhbHVlIHsKICAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2lu
OwogICAgICAgICB0aGlzLmluZGV4ID0gYW5vbnltb3VzVmFyaWFibGVDb3VudCsrOwogICAgICAg
ICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICB0aGlzLl9pc0FkZHJlc3NUYWtlbiA9IGZhbHNl
OwogICAgIH0KICAgICAKICAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9
CiAgICAgZ2V0IG5hbWUoKSB7IHJldHVybiAiYW5vblZhcjwiICsgdGhpcy5pbmRleCArICI+Ijsg
fQogICAgIAorICAgIGdldCBpc0FkZHJlc3NUYWtlbigpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5faXNBZGRyZXNzVGFrZW47CisgICAgfQorICAgIAorICAgIHNldCBpc0FkZHJlc3NUYWtl
bihuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2lzQWRkcmVzc1Rha2VuID0gbmV3VmFs
dWU7CisgICAgfQorICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0
aGlzLm5hbWU7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVm
ZmVyQnVpbGRlci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWls
ZGVyLmpzCmluZGV4IGEzYmVlMWZhMjQ3NWQxZjU2YjMwNWY1NmQ4ZGIzMzZlYThhNGE3MTcuLmQy
YTM0OWQ5NTI5ZmNlNmY4YTJjNmM2YzFhZmMwMGNkZTA1MGUzOTggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCisrKyBiL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCkBAIC0zMyw3ICszMyw5IEBA
IGNsYXNzIEVCdWZmZXJCdWlsZGVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgCiAgICAgX2NyZWF0
ZUVQdHIodHlwZSkKICAgICB7Ci0gICAgICAgIGlmICh0eXBlLnNpemUgPT0gbnVsbCkKKyAgICAg
ICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgY29uc29sZS5sb2coIndhdCIpOworICAgICAgICBp
ZiAoIXR5cGUuc2l6ZSkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVHlwZSBkb2VzIG5v
dCBoYXZlIHNpemU6ICIgKyB0eXBlKTsKICAgICAgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVy
KHR5cGUuc2l6ZSk7CiAgICAgICAgIGlmICghdHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZSkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcyBiL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwppbmRleCBhZWUwYTIzMTJm
ZWQ3MmMwYzg3ZTczZjE4YWMzNDhlYTFhYzNjN2JhLi5kODE4MmZjMWJkMjEzNDAxYmNmMWUzMWUx
ODc2NjMzNWJhZmQ0OTUwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9FdmFsdWF0b3IuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVh
dG9yLmpzCkBAIC03NCw5ICs3NCwxMyBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9y
IHsKICAgICAKICAgICB2aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCiAgICAgewotICAgICAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IGFyZ1ZhbHVlcyA9IFtdOworICAgICAgICBmb3IgKGxldCBpID0gbm9kZS5h
cmd1bWVudExpc3QubGVuZ3RoOyBpLS07KQorICAgICAgICAgICAgYXJnVmFsdWVzLnVuc2hpZnQo
bm9kZS5hcmd1bWVudExpc3RbaV0udmlzaXQodGhpcykpOworCisgICAgICAgIGZvciAobGV0IGkg
PSBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGg7IGktLTspIHsKICAgICAgICAgICAgIG5vZGUucGFy
YW1ldGVyc1tpXS5lUHRyLmNvcHlGcm9tKAotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRM
aXN0W2ldLnZpc2l0KHRoaXMpLAorICAgICAgICAgICAgICAgIGFyZ1ZhbHVlc1tpXSwKICAgICAg
ICAgICAgICAgICBub2RlLnBhcmFtZXRlcnNbaV0udHlwZS5zaXplKTsKICAgICAgICAgfQogICAg
ICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fcnVuQm9keShub2RlLnJldHVyblR5cGUsIG5vZGUucmV0
dXJuRVB0ciwgbm9kZS5ib2R5KTsKQEAgLTMxMiw3ICszMTYsNyBAQCBjbGFzcyBFdmFsdWF0b3Ig
ZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB7CiAgICAgICAgIC8vIFdlIGV2YWx1YXRlIGlubGluZWQg
QVNUcywgc28gdGhpcyBjYW4gb25seSBiZSBhIG5hdGl2ZSBjYWxsLgogICAgICAgICBsZXQgY2Fs
bEFyZ3VtZW50cyA9IFtdOwotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuYXJndW1l
bnRMaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGZvciAobGV0IGkgPSBub2RlLmFyZ3VtZW50
TGlzdC5sZW5ndGg7IGktLTspIHsKICAgICAgICAgICAgIGxldCBhcmd1bWVudCA9IG5vZGUuYXJn
dW1lbnRMaXN0W2ldOwogICAgICAgICAgICAgbGV0IHR5cGUgPSBub2RlLmZ1bmMucGFyYW1ldGVy
VHlwZXNbaV07CiAgICAgICAgICAgICBpZiAoIXR5cGUgfHwgIWFyZ3VtZW50KQpAQCAtMzIwLDcg
KzMyNCw3IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAg
bGV0IGFyZ3VtZW50VmFsdWUgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlm
ICghYXJndW1lbnRWYWx1ZSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwg
YXJndW1lbnQgdmFsdWUsIGkgPSAiICsgaSArICIsIG5vZGUgPSAiICsgbm9kZSk7Ci0gICAgICAg
ICAgICBjYWxsQXJndW1lbnRzLnB1c2goKCkgPT4geworICAgICAgICAgICAgY2FsbEFyZ3VtZW50
cy51bnNoaWZ0KCgpID0+IHsKICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fc25h
cHNob3QodHlwZSwgbnVsbCwgYXJndW1lbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvRmFzdFN0YW5kYXJkTGlicmFyeS5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0Zhc3RTdGFuZGFyZExpYnJhcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODk3ZTFmNjg3Mzdm
YzE4ZTIxMWVhOTNhNjJmMTQ0Y2QyNzIxZThjMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zhc3RTdGFuZGFyZExpYnJhcnkuanMKQEAgLTAsMCArMSwy
MTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNl
IHN0cmljdCI7CisKK2xldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CisgICAgbGV0
IHJlc3VsdCA9ICIiOworICAgIGZ1bmN0aW9uIHByaW50KHMpCisgICAgeworICAgICAgICBpZiAo
cykKKyAgICAgICAgICAgIHJlc3VsdCArPSBzOworICAgICAgICByZXN1bHQgKz0gIlxuIjsKKyAg
ICB9CisgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICBwcmludChgLy8gVGhpcyB3YXMgYXV0b2dl
bmVyYXRlZCBmcm9tIEdlbmVyYXRlX1N0YW5kYXJkX0xpYnJhcnkuc3dpZnQhIERvIG5vdCBlZGl0
ISFgKTsKKyAgICAgICAgcHJpbnQoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIHR5cGUg
b2YgW2B2b2lkYCwgYGJvb2xgLCBgdWNoYXJgLCBgdXNob3J0YCwgYHVpbnRgLCBgY2hhcmAsIGBz
aG9ydGAsIGBpbnRgLCBgaGFsZmAsIGBmbG9hdGAsIGBhdG9taWNfaW50YCwgYGF0b21pY191aW50
YF0pIHsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdHlwZWRlZiAke3R5cGV9O2ApOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgYm9vbGAsIGB1Y2hh
cmAsIGB1c2hvcnRgLCBgdWludGAsIGBjaGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZs
b2F0YF0pIHsKKyAgICAgICAgICAgIGZvciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAg
ICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB0eXBlZGVmIHZlY3Rvcjwke3R5cGV9LCAke3NpemV9
PjtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgdHlwZWRlZiAke3R5cGV9JHtzaXplfSA9IHZl
Y3Rvcjwke3R5cGV9LCAke3NpemV9PjtgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBwcmludCgpOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYGhhbGZg
LCBgZmxvYXRgXSkgeworICAgICAgICAgICAgZm9yICh2YXIgaSBvZiBbMiwgMywgNF0pIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBqIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAgICAgICAg
ICAgICBwcmludChgbmF0aXZlIHR5cGVkZWYgbWF0cml4PCR7dHlwZX0sICR7aX0sICR7an0+O2Ap
OworICAgICAgICAgICAgICAgICAgICBwcmludChgdHlwZWRlZiAke3R5cGV9JHtpfXgke2p9ID0g
bWF0cml4PCR7dHlwZX0sICR7aX0sICR7an0+O2ApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKnByaW50KGBuYXRpdmUgdHlwZWRlZiBzYW1w
bGVyO2ApOworICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgVGV4dHVyZTFEYCwgYFJXVGV4dHVy
ZTFEYCwgYFRleHR1cmUxREFycmF5YCwgYFJXVGV4dHVyZTFEQXJyYXlgLCBgVGV4dHVyZTJEYCwg
YFJXVGV4dHVyZTJEYCwgYFRleHR1cmUyREFycmF5YCwgYFJXVGV4dHVyZTJEQXJyYXlgLCBgVGV4
dHVyZTNEYCwgYFJXVGV4dHVyZTNEYCwgYFRleHR1cmVDdWJlYF0pIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIHR5cGVBcmd1bWVudEJhc2Ugb2YgW2Bib29sYCwgYHVjaGFyYCwgYHVzaG9ydGAsIGB1
aW50YCwgYGNoYXJgLCBgc2hvcnRgLCBgaW50YCwgYGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAg
ICAgICAgICAgIGZvciAodmFyIHNpemUgb2YgW2BgLCBgMmAsIGAzYCwgYDRgXSkgeworICAgICAg
ICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHR5cGVkZWYgJHt0eXBlfTwke3R5cGVBcmd1bWVu
dEJhc2V9JHtzaXplfT47YCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2BUZXh0dXJlRGVwdGgyRGAsIGBSV1Rl
eHR1cmVEZXB0aDJEYCwgYFRleHR1cmVEZXB0aDJEQXJyYXlgLCBgUldUZXh0dXJlRGVwdGgyREFy
cmF5YCwgYFRleHR1cmVEZXB0aEN1YmVgXSkgeworICAgICAgICAgICAgZm9yICh2YXIgdHlwZUFy
Z3VtZW50IG9mIFtgZmxvYXRgLCBgaGFsZmBdKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSB0eXBlZGVmICR7dHlwZX08JHt0eXBlQXJndW1lbnR9PjtgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBwcmludCgpOyovCisgICAgICAgIAorICAgICAgICBmb3IgKHZh
ciB0eXBlMSBvZiBbYHVjaGFyYCwgYHVzaG9ydGAsIGB1aW50YCwgYGNoYXJgLCBgc2hvcnRgLCBg
aW50YCwgYGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAgZm9yICh2YXIgdHlwZTIgb2Yg
W2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGAsIGBjaGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxm
YCwgYGZsb2F0YF0pIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZTEgIT0gdHlwZTIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSBvcGVyYXRvciAke3R5cGUxfSgke3R5cGUy
fSk7YCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHByaW50KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgdWNoYXJg
LCBgdXNob3J0YCwgYHVpbnRgLCBgY2hhcmAsIGBzaG9ydGAsIGBpbnRgLCBgaGFsZmAsIGBmbG9h
dGBdKSB7CisgICAgICAgICAgICBwcmludChgb3BlcmF0b3IgYm9vbCgke3R5cGV9IHgpIHtgKTsK
KyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHggIT0gMDtgKTsKKyAgICAgICAgICAgIHBy
aW50KGB9YCk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQoKTsKKyAgICAgICAgCisgICAgICAg
IHByaW50KGBuYXRpdmUgb3BlcmF0b3IgaW50KGF0b21pY19pbnQpO2ApOworICAgICAgICBwcmlu
dChgbmF0aXZlIG9wZXJhdG9yIHVpbnQoYXRvbWljX3VpbnQpO2ApOworICAgICAgICBwcmludCgp
OworICAgICAgICAKKyAgICAgICAgcHJpbnQoYG5hdGl2ZSBib29sIG9wZXJhdG9yPT0oYm9vbCwg
Ym9vbCk7YCk7CisgICAgICAgIAorICAgICAgICAvKnByaW50KGBib29sIG9wZXJhdG9yJihib29s
IGEsIGJvb2wgYikge2ApOworICAgICAgICBwcmludChgICAgIHJldHVybiBhICYmIGI7YCk7Cisg
ICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIAorICAgICAgICBwcmludChgYm9vbCBvcGVyYXRv
cnwoYm9vbCBhLCBib29sIGIpIHtgKTsKKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gYSB8fCBi
O2ApOworICAgICAgICBwcmludChgfWApOworICAgICAgICAKKyAgICAgICAgcHJpbnQoYGJvb2wg
b3BlcmF0b3JeKGJvb2wgYSwgYm9vbCBiKSB7YCk7CisgICAgICAgIHByaW50KGAgICAgaWYgKGEp
YCk7CisgICAgICAgIHByaW50KGAgICAgICAgIHJldHVybiAhYjtgKTsKKyAgICAgICAgcHJpbnQo
YCAgICByZXR1cm4gYjtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgCisgICAgICAg
IHByaW50KGBib29sIG9wZXJhdG9yfihib29sIHZhbHVlKSB7YCk7CisgICAgICAgIHByaW50KGAg
ICAgcmV0dXJuICF2YWx1ZTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsqLworICAgICAgICAKKyAg
ICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYGludGAsIGB1aW50YCwgYGZsb2F0YF0pIHsKKyAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvcisoJHt0eXBlfSwgJHt0eXBlfSk7
YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gb3BlcmF0b3ItKCR7dHlwZX0s
ICR7dHlwZX0pO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IG9wZXJhdG9y
Kigke3R5cGV9LCAke3R5cGV9KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBl
fSBvcGVyYXRvci8oJHt0eXBlfSwgJHt0eXBlfSk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0
aXZlIGJvb2wgb3BlcmF0b3I9PSgke3R5cGV9LCAke3R5cGV9KTtgKTsKKyAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgYm9vbCBvcGVyYXRvcjwoJHt0eXBlfSwgJHt0eXBlfSk7YCk7CisgICAgICAg
ICAgICBwcmludChgbmF0aXZlIGJvb2wgb3BlcmF0b3I8PSgke3R5cGV9LCAke3R5cGV9KTtgKTsK
KyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgYm9vbCBvcGVyYXRvcj4oJHt0eXBlfSwgJHt0eXBl
fSk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlIGJvb2wgb3BlcmF0b3I+PSgke3R5cGV9
LCAke3R5cGV9KTtgKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlw
ZSBvZiBbYGludGAsIGB1aW50YF0pIHsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBl
fSBvcGVyYXRvciYoJHt0eXBlfSwgJHt0eXBlfSk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0
aXZlICR7dHlwZX0gb3BlcmF0b3J8KCR7dHlwZX0sICR7dHlwZX0pO2ApOworICAgICAgICAgICAg
cHJpbnQoYG5hdGl2ZSAke3R5cGV9IG9wZXJhdG9yXigke3R5cGV9LCAke3R5cGV9KTtgKTsKKyAg
ICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvcn4oJHt0eXBlfSk7YCk7Cisg
ICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gb3BlcmF0b3I8PCgke3R5cGV9LCB1aW50
KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvcj4+KCR7dHlw
ZX0sIHVpbnQpO2ApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBl
IG9mIFtgdWNoYXJgLCBgdXNob3J0YF0pIHsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG9w
ZXJhdG9yKygke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXR1cm4gJHt0eXBlfSh1aW50KGEpICsgdWludChiKSk7YCk7CisgICAgICAgICAgICBwcmlu
dChgfWApOworICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gb3BlcmF0b3ItKCR7dHlwZX0gYSwg
JHt0eXBlfSBiKSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiAke3R5cGV9KHVp
bnQoYSkgLSB1aW50KGIpKTtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAg
ICBwcmludChgJHt0eXBlfSBvcGVyYXRvciooJHt0eXBlfSBhLCAke3R5cGV9IGIpIHtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuICR7dHlwZX0odWludChhKSAqIHVpbnQoYikpO2Ap
OworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG9w
ZXJhdG9yLygke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXR1cm4gJHt0eXBlfSh1aW50KGEpIC8gdWludChiKSk7YCk7CisgICAgICAgICAgICBwcmlu
dChgfWApOworICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gb3BlcmF0b3ImKCR7dHlwZX0gYSwg
JHt0eXBlfSBiKSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiAke3R5cGV9KHVp
bnQoYSkgJiB1aW50KGIpKTtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAg
ICBwcmludChgJHt0eXBlfSBvcGVyYXRvcnwoJHt0eXBlfSBhLCAke3R5cGV9IGIpIHtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuICR7dHlwZX0odWludChhKSB8IHVpbnQoYikpO2Ap
OworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG9w
ZXJhdG9yXigke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXR1cm4gJHt0eXBlfSh1aW50KGEpIF4gdWludChiKSk7YCk7CisgICAgICAgICAgICBwcmlu
dChgfWApOworICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gb3BlcmF0b3J+KCR7dHlwZX0gYSkg
e2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gJHt0eXBlfSh+dWludChhKSk7YCk7
CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQoYGJvb2wgb3BlcmF0
b3I9PSgke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICBy
ZXR1cm4gdWludChhKSA9PSB1aW50KGIpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAg
ICAgICAgICAgIHByaW50KGBib29sIG9wZXJhdG9yPCgke3R5cGV9IGEsICR7dHlwZX0gYikge2Ap
OworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gdWludChhKSA8IHVpbnQoYik7YCk7Cisg
ICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQoYGJvb2wgb3BlcmF0b3I8
PSgke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1
cm4gdWludChhKSA8PSB1aW50KGIpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAg
ICAgICAgIHByaW50KGBib29sIG9wZXJhdG9yPigke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOwor
ICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gdWludChhKSA+IHVpbnQoYik7YCk7CisgICAg
ICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQoYGJvb2wgb3BlcmF0b3I+PSgk
e3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4g
dWludChhKSA+PSB1aW50KGIpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAg
fQorICAgICAgICBwcmludChgdWNoYXIgb3BlcmF0b3I8PCh1Y2hhciBhLCB1aW50IGIpIHtgKTsK
KyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gdWNoYXIodWludChhKSA8PCAoYiAmIDI1NSkpO2Ap
OworICAgICAgICBwcmludChgfWApOworICAgICAgICBwcmludChgdXNob3J0IG9wZXJhdG9yPDwo
dXNob3J0IGEsIHVpbnQgYikge2ApOworICAgICAgICBwcmludChgICAgIHJldHVybiB1c2hvcnQo
dWludChhKSA8PCAoYiAmIDY1NTM1KSk7YCk7CisgICAgICAgIHByaW50KGB9YCk7CisgICAgICAg
IHByaW50KGB1Y2hhciBvcGVyYXRvcj4+KHVjaGFyIGEsIHVpbnQgYikge2ApOworICAgICAgICBw
cmludChgICAgIHJldHVybiB1Y2hhcih1aW50KGEpID4+IChiICYgMjU1KSk7YCk7CisgICAgICAg
IHByaW50KGB9YCk7CisgICAgICAgIHByaW50KGB1c2hvcnQgb3BlcmF0b3I+Pih1c2hvcnQgYSwg
dWludCBiKSB7YCk7CisgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHVzaG9ydCh1aW50KGEpID4+
IChiICYgNjU1MzUpKTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAodmFyIHR5cGUgb2YgW2BjaGFyYCwgYHNob3J0YF0pIHsKKyAgICAgICAgICAgIHByaW50
KGAke3R5cGV9IG9wZXJhdG9yKygke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXR1cm4gJHt0eXBlfShpbnQoYSkgKyBpbnQoYikpO2ApOworICAgICAg
ICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG9wZXJhdG9yLSgk
e3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4g
JHt0eXBlfShpbnQoYSkgLSBpbnQoYikpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAg
ICAgICAgICAgIHByaW50KGAke3R5cGV9IG9wZXJhdG9yKigke3R5cGV9IGEsICR7dHlwZX0gYikg
e2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gJHt0eXBlfShpbnQoYSkgKiBpbnQo
YikpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5
cGV9IG9wZXJhdG9yLygke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJp
bnQoYCAgICByZXR1cm4gJHt0eXBlfShpbnQoYSkgLyBpbnQoYikpO2ApOworICAgICAgICAgICAg
cHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG9wZXJhdG9yJigke3R5cGV9
IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gJHt0eXBl
fShpbnQoYSkgJiBpbnQoYikpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAg
ICAgIHByaW50KGAke3R5cGV9IG9wZXJhdG9yfCgke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOwor
ICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gJHt0eXBlfShpbnQoYSkgfCBpbnQoYikpO2Ap
OworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG9w
ZXJhdG9yXigke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXR1cm4gJHt0eXBlfShpbnQoYSkgXiBpbnQoYikpO2ApOworICAgICAgICAgICAgcHJpbnQo
YH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG9wZXJhdG9yfigke3R5cGV9IGEpIHtg
KTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuICR7dHlwZX0ofmludChhKSk7YCk7Cisg
ICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQoYGJvb2wgb3BlcmF0b3I9
PSgke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1
cm4gaW50KGEpID09IGludChiKTtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAg
ICAgICBwcmludChgYm9vbCBvcGVyYXRvcj4oJHt0eXBlfSBhLCAke3R5cGV9IGIpIHtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIGludChhKSA+IGludChiKTtgKTsKKyAgICAgICAg
ICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICBwcmludChgYm9vbCBvcGVyYXRvcj49KCR7dHlw
ZX0gYSwgJHt0eXBlfSBiKSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiBpbnQo
YSkgPj0gaW50KGIpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHBy
aW50KGBib29sIG9wZXJhdG9yPCgke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXR1cm4gaW50KGEpIDwgaW50KGIpO2ApOworICAgICAgICAgICAgcHJp
bnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGBib29sIG9wZXJhdG9yPD0oJHt0eXBlfSBhLCAk
e3R5cGV9IGIpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIGludChhKSA8PSBp
bnQoYik7YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICB9CisgICAgICAgIHBy
aW50KGBjaGFyIG9wZXJhdG9yPDwoY2hhciBhLCB1aW50IGIpIHtgKTsKKyAgICAgICAgcHJpbnQo
YCAgICByZXR1cm4gY2hhcihpbnQoYSkgPDwgKGIgJiAyNTUpKTtgKTsKKyAgICAgICAgcHJpbnQo
YH1gKTsKKyAgICAgICAgcHJpbnQoYHNob3J0IG9wZXJhdG9yPDwoc2hvcnQgYSwgdWludCBiKSB7
YCk7CisgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHNob3J0KGludChhKSA8PCAoYiAmIDY1NTM1
KSk7YCk7CisgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIHByaW50KGBjaGFyIG9wZXJhdG9y
Pj4oY2hhciBhLCB1aW50IGIpIHtgKTsKKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gY2hhcihp
bnQoYSkgPj4gKGIgJiAyNTUpKTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgcHJp
bnQoYHNob3J0IG9wZXJhdG9yPj4oc2hvcnQgYSwgdWludCBiKSB7YCk7CisgICAgICAgIHByaW50
KGAgICAgcmV0dXJuIHNob3J0KGludChhKSA+PiAoYiAmIDY1NTM1KSk7YCk7CisgICAgICAgIHBy
aW50KGB9YCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgdWNoYXJgLCBg
dXNob3J0YCwgYHVpbnRgLCBgY2hhcmAsIGBzaG9ydGAsIGBpbnRgLCBgaGFsZmAsIGBmbG9hdGBd
KSB7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBvcGVyYXRvcisrKCR7dHlwZX0gdmFsdWUp
IHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHZhbHVlICsgMTtgKTsKKyAgICAg
ICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBvcGVyYXRvci0t
KCR7dHlwZX0gdmFsdWUpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHZhbHVl
IC0gMTtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHByaW50KGBoYWxmIG9wZXJhdG9yKyhoYWxmIGEsIGhhbGYgYikge2ApOworICAgICAg
ICBwcmludChgICAgIHJldHVybiBoYWxmKGZsb2F0KGEpICsgZmxvYXQoYikpO2ApOworICAgICAg
ICBwcmludChgfWApOworICAgICAgICBwcmludChgaGFsZiBvcGVyYXRvci0oaGFsZiBhLCBoYWxm
IGIpIHtgKTsKKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gaGFsZihmbG9hdChhKSAtIGZsb2F0
KGIpKTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgcHJpbnQoYGhhbGYgb3BlcmF0
b3IqKGhhbGYgYSwgaGFsZiBiKSB7YCk7CisgICAgICAgIHByaW50KGAgICAgcmV0dXJuIGhhbGYo
ZmxvYXQoYSkgKiBmbG9hdChiKSk7YCk7CisgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIHBy
aW50KGBoYWxmIG9wZXJhdG9yLyhoYWxmIGEsIGhhbGYgYikge2ApOworICAgICAgICBwcmludChg
ICAgIHJldHVybiBoYWxmKGZsb2F0KGEpIC8gZmxvYXQoYikpO2ApOworICAgICAgICBwcmludChg
fWApOworICAgICAgICBwcmludChgYm9vbCBvcGVyYXRvcj09KGhhbGYgYSwgaGFsZiBiKSB7YCk7
CisgICAgICAgIHByaW50KGAgICAgcmV0dXJuIGZsb2F0KGEpID09IGZsb2F0KGIpO2ApOworICAg
ICAgICBwcmludChgfWApOworICAgICAgICBwcmludChgYm9vbCBvcGVyYXRvcjwoaGFsZiBhLCBo
YWxmIGIpIHtgKTsKKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gZmxvYXQoYSkgPCBmbG9hdChi
KTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgcHJpbnQoYGJvb2wgb3BlcmF0b3I8
PShoYWxmIGEsIGhhbGYgYikge2ApOworICAgICAgICBwcmludChgICAgIHJldHVybiBmbG9hdChh
KSA8PSBmbG9hdChiKTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgcHJpbnQoYGJv
b2wgb3BlcmF0b3I+KGhhbGYgYSwgaGFsZiBiKSB7YCk7CisgICAgICAgIHByaW50KGAgICAgcmV0
dXJuIGZsb2F0KGEpIDwgZmxvYXQoYik7YCk7CisgICAgICAgIHByaW50KGB9YCk7CisgICAgICAg
IHByaW50KGBib29sIG9wZXJhdG9yPj0oaGFsZiBhLCBoYWxmIGIpIHtgKTsKKyAgICAgICAgcHJp
bnQoYCAgICByZXR1cm4gZmxvYXQoYSkgPD0gZmxvYXQoYik7YCk7CisgICAgICAgIHByaW50KGB9
YCk7CisgICAgICAgIHByaW50KGBjaGFyIG9wZXJhdG9yLShjaGFyIHgpIHtgKTsKKyAgICAgICAg
cHJpbnQoYCAgICByZXR1cm4gY2hhcigtaW50KHgpKTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsK
KyAgICAgICAgcHJpbnQoYHNob3J0IG9wZXJhdG9yLShzaG9ydCB4KSB7YCk7CisgICAgICAgIHBy
aW50KGAgICAgcmV0dXJuIHNob3J0KC1pbnQoeCkpO2ApOworICAgICAgICBwcmludChgfWApOwor
ICAgICAgICBwcmludChgaGFsZiBvcGVyYXRvci0oaGFsZiB4KSB7YCk7CisgICAgICAgIHByaW50
KGAgICAgcmV0dXJuIGhhbGYoLWZsb2F0KHgpKTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAg
ICAgICAgcHJpbnQoYG5hdGl2ZSBpbnQgb3BlcmF0b3ItKGludCk7YCk7CisgICAgICAgIHByaW50
KGBuYXRpdmUgZmxvYXQgb3BlcmF0b3ItKGZsb2F0KTtgKTsKKyAgICAgICAgcHJpbnQoKTsKKyAg
ICAgICAgCisgICAgICAgIC8qZm9yICh2YXIgdHlwZSBvZiBbYHVjaGFyYCwgYHVzaG9ydGAsIGB1
aW50YCwgYGNoYXJgLCBgc2hvcnRgLCBgaW50YCwgYGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAg
ICAgICAgZm9yICh2YXIgc2l6ZSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICBwcmlu
dChgJHt0eXBlfSR7c2l6ZX0gb3BlcmF0b3IrKCR7dHlwZX0ke3NpemV9IGEsICR7dHlwZX0ke3Np
emV9IGIpIHtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke3NpemV9IHJl
c3VsdDtgKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IHNpemU7ICsrbSkg
eworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XSA9IGFbJHttfV0g
KyBiWyR7bX1dO2ApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmludChg
ICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAg
ICAgICAgICAgICBwcmludChgJHt0eXBlfSR7c2l6ZX0gb3BlcmF0b3ItKCR7dHlwZX0ke3NpemV9
IGEsICR7dHlwZX0ke3NpemV9IGIpIHtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgICR7
dHlwZX0ke3NpemV9IHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsg
bSA8IHNpemU7ICsrbSkgeworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFsk
e219XSA9IGFbJHttfV0gLSBiWyR7bX1dO2ApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgcHJp
bnQoYH1gKTsKKyAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7c2l6ZX0gb3BlcmF0b3Iq
KCR7dHlwZX0ke3NpemV9IGEsICR7dHlwZX0ke3NpemV9IGIpIHtgKTsKKyAgICAgICAgICAgICAg
ICBwcmludChgICAgICR7dHlwZX0ke3NpemV9IHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBtID0gMDsgbSA8IHNpemU7ICsrbSkgeworICAgICAgICAgICAgICAgICAgICBwcmlu
dChgICAgIHJlc3VsdFske219XSA9IGFbJHttfV0gKiBiWyR7bX1dO2ApOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAg
ICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7
c2l6ZX0gb3BlcmF0b3IqKCR7dHlwZX0ke3NpemV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAg
ICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7c2l6ZX0gcmVzdWx0O2ApOworICAgICAgICAg
ICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgc2l6ZTsgKyttKSB7CisgICAgICAgICAgICAgICAg
ICAgIHByaW50KGAgICAgcmVzdWx0WyR7bX1dID0gYVske219XSAqIGI7YCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAg
ICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9
JHtzaXplfSBvcGVyYXRvciooJHt0eXBlfSBhLCAke3R5cGV9JHtzaXplfSBiKSB7YCk7CisgICAg
ICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9JHtzaXplfSByZXN1bHQ7YCk7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBzaXplOyArK20pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnQoYCAgICByZXN1bHRbJHttfV0gPSBhICogYlske219XTtgKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOwor
ICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlw
ZX0ke3NpemV9IG9wZXJhdG9yLygke3R5cGV9JHtzaXplfSBhLCAke3R5cGV9JHtzaXplfSBiKSB7
YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9JHtzaXplfSByZXN1bHQ7YCk7
CisgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBzaXplOyArK20pIHsKKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHRbJHttfV0gPSBhWyR7bX1dIC8gYlske219
XTtgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1
cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAg
ICAgcHJpbnQoYCR7dHlwZX0ke3NpemV9IG9wZXJhdG9yLygke3R5cGV9JHtzaXplfSBhLCAke3R5
cGV9IGIpIHtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke3NpemV9IHJl
c3VsdDtgKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IHNpemU7ICsrbSkg
eworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XSA9IGFbJHttfV0g
LyBiO2ApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmludChgICAgIHJl
dHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAg
ICAgICBwcmludChgJHt0eXBlfSR7c2l6ZX0gb3BlcmF0b3IvKCR7dHlwZX0gYSwgJHt0eXBlfSR7
c2l6ZX0gYikge2ApOworICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7c2l6ZX0g
cmVzdWx0O2ApOworICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgc2l6ZTsgKytt
KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7bX1dID0gYSAvIGJb
JHttfV07YCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50KGAgICAg
cmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2BjaGFyYCwgYHNob3J0
YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKKyAgICAgICAgICAgIGZvciAodmFyIHNpemUg
b2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0ke3NpemV9IG9w
ZXJhdG9yLSgke3R5cGV9JHtzaXplfSBhKSB7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAg
ICAke3R5cGV9JHtzaXplfSByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9
IDA7IG0gPCBzaXplOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1
bHRbJHttfV0gPSAtYVske219XTtgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgIHByaW50KGB9
YCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBb
YGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAgZm9yICh2YXIgaSBvZiBbMiwgMywgNF0p
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAg
ICAgICAgICAgICBwcmludChgJHt0eXBlfSR7aX14JHtqfSBvcGVyYXRvcisoJHt0eXBlfSR7aX14
JHtqfSBhLCAke3R5cGV9JHtpfXgke2p9IGIpIHtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJp
bnQoYCAgICAke3R5cGV9JHtpfXgke2p9IHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgbSA9IDA7IG0gPCBpOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIG4gPSAwOyBuIDwgajsgKytuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbnQoYCAgICByZXN1bHRbJHttfV1bJHtufV0gPSBhWyR7bX1dWyR7bn1dICsgYlske219XVsk
e259XTtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAg
ICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAk
e3R5cGV9JHtpfXgke2p9IG9wZXJhdG9yLSgke3R5cGV9JHtpfXgke2p9IGEsICR7dHlwZX0ke2l9
eCR7an0gYikge2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke2l9
eCR7an0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8
IGk7ICsrbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBq
OyArK24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFsk
e219XVske259XSA9IGFbJHttfV1bJHtufV0gLSBiWyR7bX1dWyR7bn1dO2ApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJp
bnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0ke2l9eCR7an0gb3Bl
cmF0b3ItKCR7dHlwZX0ke2l9eCR7an0gYSkge2ApOworICAgICAgICAgICAgICAgICAgICBwcmlu
dChgICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBtID0gMDsgbSA8IGk7ICsrbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgbiA9IDA7IG4gPCBqOyArK24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmludChgICAgIHJlc3VsdFske219XVske259XSA9IC1hWyR7bX1dWyR7bn1dO2ApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAg
cHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0ke2l9eCR7an0g
b3BlcmF0b3IqKCR7dHlwZX0ke2l9eCR7an0gYSwgJHt0eXBlfSR7aX14JHtqfSBiKSB7YCk7Cisg
ICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7aX14JHtqfSByZXN1bHQ7YCk7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgaTsgKyttKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGo7ICsrbikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7bX1dWyR7bn1dID0gYVsk
e219XVske259XSAqIGJbJHttfV1bJHtufV07YCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICBy
ZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAg
ICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7aX14JHtqfSBvcGVyYXRvciooJHt0eXBlfSR7
aX14JHtqfSBhLCAke3R5cGV9IGIpIHtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAg
ICAke3R5cGV9JHtpfXgke2p9IHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgbSA9IDA7IG0gPCBpOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IG4gPSAwOyBuIDwgajsgKytuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQo
YCAgICByZXN1bHRbJHttfV1bJHtufV0gPSBhWyR7bX1dWyR7bn1dICogYjtgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIHBy
aW50KGB9YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtpfXgke2p9IG9w
ZXJhdG9yKigke3R5cGV9IGEsICR7dHlwZX0ke2l9eCR7an0gYikge2ApOworICAgICAgICAgICAg
ICAgICAgICBwcmludChgICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2ApOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IGk7ICsrbSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBqOyArK24pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XVske259XSA9IGEgKiBiWyR7bX1dWyR7
bn1dO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7
dHlwZX0ke2l9eCR7an0gb3BlcmF0b3IvKCR7dHlwZX0ke2l9eCR7an0gYSwgJHt0eXBlfSR7aX14
JHtqfSBiKSB7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7aX14
JHtqfSByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwg
aTsgKyttKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGo7
ICsrbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7
bX1dWyR7bn1dID0gYVske219XVske259XSAvIGJbJHttfV1bJHtufV07YCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBwcmlu
dChgfWApOworICAgICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7aX14JHtqfSBvcGVy
YXRvci8oJHt0eXBlfSR7aX14JHtqfSBhLCAke3R5cGV9IGIpIHtgKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnQoYCAgICAke3R5cGV9JHtpfXgke2p9IHJlc3VsdDtgKTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBpOyArK20pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgajsgKytuKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnQoYCAgICByZXN1bHRbJHttfV1bJHtufV0gPSBhWyR7bX1dWyR7bn1dIC8g
YjtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAg
ICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5
cGV9JHtpfXgke2p9IG9wZXJhdG9yLygke3R5cGV9IGEsICR7dHlwZX0ke2l9eCR7an0gYikge2Ap
OworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0
O2ApOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IGk7ICsrbSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBqOyArK24pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XVske259XSA9
IGEgLyBiWyR7bX1dWyR7bn1dO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJl
c3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0qLworICAgICAgICAKKyAgICAgICAgZm9yICh2
YXIgdHlwZSBvZiBbYGJvb2xgLCBgdWNoYXJgLCBgdXNob3J0YCwgYHVpbnRgLCBgY2hhcmAsIGBz
aG9ydGAsIGBpbnRgLCBgaGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICBwcmludChgb3Bl
cmF0b3IgJHt0eXBlfTIoJHt0eXBlfSB4LCAke3R5cGV9IHkpIHtgKTsKKyAgICAgICAgICAgIHBy
aW50KGAgICAgJHt0eXBlfTIgcmVzdWx0O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1
bHQueCA9IHg7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC55ID0geTtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgIHByaW50
KGB9YCk7CisgICAgICAgICAgICBwcmludChgb3BlcmF0b3IgJHt0eXBlfTMoJHt0eXBlfSB4LCAk
e3R5cGV9IHksICR7dHlwZX0geikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9
MyByZXN1bHQ7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC54ID0geDtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0LnkgPSB5O2ApOworICAgICAgICAgICAgcHJpbnQo
YCAgICByZXN1bHQueiA9IHo7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1
bHQ7YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQoYG9wZXJh
dG9yICR7dHlwZX0zKCR7dHlwZX0yIHgsICR7dHlwZX0geSkge2ApOworICAgICAgICAgICAgcHJp
bnQoYCAgICAke3R5cGV9MyByZXN1bHQ7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJlc3Vs
dC54ID0geC54O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQueSA9IHgueTtgKTsK
KyAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0LnogPSB5O2ApOworICAgICAgICAgICAgcHJp
bnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAg
ICAgICAgIHByaW50KGBvcGVyYXRvciAke3R5cGV9Mygke3R5cGV9IHgsICR7dHlwZX0yIHkpIHtg
KTsKKyAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfTMgcmVzdWx0O2ApOworICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXN1bHQueCA9IHg7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJl
c3VsdC55ID0geS54O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQueiA9IHkueTtg
KTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAg
IHByaW50KGB9YCk7CisgICAgICAgICAgICBwcmludChgb3BlcmF0b3IgJHt0eXBlfTQoJHt0eXBl
fSB4LCAke3R5cGV9IHksICR7dHlwZX0geiwgJHt0eXBlfSB3KSB7YCk7CisgICAgICAgICAgICBw
cmludChgICAgICR7dHlwZX00IHJlc3VsdDtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmVz
dWx0LnggPSB4O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQueSA9IHk7YCk7Cisg
ICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC56ID0gejtgKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgcmVzdWx0LncgPSB3O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVz
dWx0O2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGBvcGVy
YXRvciAke3R5cGV9NCgke3R5cGV9MiB4LCAke3R5cGV9IHksICR7dHlwZX0geikge2ApOworICAg
ICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9NCByZXN1bHQ7YCk7CisgICAgICAgICAgICBwcmlu
dChgICAgIHJlc3VsdC54ID0geC54O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQu
eSA9IHgueTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0LnogPSB5O2ApOworICAg
ICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQudyA9IHo7YCk7CisgICAgICAgICAgICBwcmludChg
ICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAg
ICAgcHJpbnQoYG9wZXJhdG9yICR7dHlwZX00KCR7dHlwZX0geCwgJHt0eXBlfTIgeSwgJHt0eXBl
fSB6KSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX00IHJlc3VsdDtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0LnggPSB4O2ApOworICAgICAgICAgICAgcHJpbnQo
YCAgICByZXN1bHQueSA9IHkueDtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0Lnog
PSB5Lnk7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC53ID0gejtgKTsKKyAgICAg
ICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgIHByaW50KGB9
YCk7CisgICAgICAgICAgICBwcmludChgb3BlcmF0b3IgJHt0eXBlfTQoJHt0eXBlfSB4LCAke3R5
cGV9IHksICR7dHlwZX0yIHopIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfTQg
cmVzdWx0O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQueCA9IHg7YCk7CisgICAg
ICAgICAgICBwcmludChgICAgIHJlc3VsdC55ID0geTtgKTsKKyAgICAgICAgICAgIHByaW50KGAg
ICAgcmVzdWx0LnogPSB6Lng7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC53ID0g
ei55O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAg
ICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGBvcGVyYXRvciAke3R5cGV9NCgk
e3R5cGV9MiB4LCAke3R5cGV9MiB5KSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgICR7dHlw
ZX00IHJlc3VsdDtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0LnggPSB4Lng7YCk7
CisgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC55ID0geC55O2ApOworICAgICAgICAgICAg
cHJpbnQoYCAgICByZXN1bHQueiA9IHkueDtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmVz
dWx0LncgPSB5Lnk7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7
CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQoYG9wZXJhdG9yICR7
dHlwZX00KCR7dHlwZX0zIHgsICR7dHlwZX0geSkge2ApOworICAgICAgICAgICAgcHJpbnQoYCAg
ICAke3R5cGV9NCByZXN1bHQ7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC54ID0g
eC54O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQueSA9IHgueTtgKTsKKyAgICAg
ICAgICAgIHByaW50KGAgICAgcmVzdWx0LnogPSB4Lno7YCk7CisgICAgICAgICAgICBwcmludChg
ICAgIHJlc3VsdC53ID0geTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3Vs
dDtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICBwcmludChgb3BlcmF0
b3IgJHt0eXBlfTQoJHt0eXBlfSB4LCAke3R5cGV9MyB5KSB7YCk7CisgICAgICAgICAgICBwcmlu
dChgICAgICR7dHlwZX00IHJlc3VsdDtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0
LnggPSB4O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQueSA9IHkueDtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0LnogPSB5Lnk7YCk7CisgICAgICAgICAgICBwcmlu
dChgICAgIHJlc3VsdC53ID0geS56O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4g
cmVzdWx0O2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGB1
aW50IG9wZXJhdG9yLmxlbmd0aCgke3R5cGV9Mikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXR1cm4gMjtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICBwcmlu
dChgdWludCBvcGVyYXRvci5sZW5ndGgoJHt0eXBlfTMpIHtgKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgcmV0dXJuIDM7YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAg
cHJpbnQoYHVpbnQgb3BlcmF0b3IubGVuZ3RoKCR7dHlwZX00KSB7YCk7CisgICAgICAgICAgICBw
cmludChgICAgIHJldHVybiA0O2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAg
fQorICAgICAgICBwcmludCgpOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBb
YGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAgbGV0IHZhcmlhYmxlcyA9IFtgYWAsIGBi
YCwgYGNgLCBgZGBdOworICAgICAgICAgICAgZm9yICh2YXIgbSBvZiBbMiwgMywgNF0pIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBuIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAgICAgICAg
ICAgICBsZXQgc2lnbmF0dXJlID0gYG9wZXJhdG9yICR7dHlwZX0ke219eCR7bn0oYDsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aWduYXR1cmUgKz0gYCwgYDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNpZ25hdHVyZSArPSBgJHt0eXBlfSR7bn0gJHt2YXJpYWJsZXNbaV19YDsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgKz0g
YCkge2A7CisgICAgICAgICAgICAgICAgICAgIHByaW50KHNpZ25hdHVyZSk7CisgICAgICAgICAg
ICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7bX14JHtufSByZXN1bHQ7YCk7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske2l9XSA9ICR7dmFyaWFibGVzW2ldfTtgKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJl
dHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByaW50KCk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgYm9vbGAsIGB1Y2hhcmAsIGB1c2hv
cnRgLCBgdWludGAsIGBjaGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsK
KyAgICAgICAgICAgIHByaW50KGBib29sIG9wZXJhdG9yPT0oJHt0eXBlfTIgYSwgJHt0eXBlfTIg
Yikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkg
PT0gYi55O2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGBi
b29sIG9wZXJhdG9yPT0oJHt0eXBlfTMgYSwgJHt0eXBlfTMgYikge2ApOworICAgICAgICAgICAg
cHJpbnQoYCAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55ICYmIGEueiA9PSBiLno7
YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQoYGJvb2wgb3Bl
cmF0b3I9PSgke3R5cGV9NCBhLCAke3R5cGV9NCBiKSB7YCk7CisgICAgICAgICAgICBwcmludChg
ICAgIHJldHVybiBhLnggPT0gYi54ICYmIGEueSA9PSBiLnkgJiYgYS56ID09IGIueiAmJiBhLncg
PT0gYi53O2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgJHt0eXBlfSBvcGVyYXRvci54KCR7dHlwZX0yKTtgKTsKKyAgICAgICAgICAgIHByaW50
KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvci55KCR7dHlwZX0yKTtgKTsKKyAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvci54KCR7dHlwZX0zKTtgKTsKKyAgICAgICAgICAg
IHByaW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvci55KCR7dHlwZX0zKTtgKTsKKyAgICAgICAg
ICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvci56KCR7dHlwZX0zKTtgKTsKKyAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvci54KCR7dHlwZX00KTtgKTsKKyAg
ICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvci55KCR7dHlwZX00KTtgKTsK
KyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvci56KCR7dHlwZX00KTtg
KTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvci53KCR7dHlwZX00
KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTIgb3BlcmF0b3IueD0oJHt0
eXBlfTIsICR7dHlwZX0pO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9MiBv
cGVyYXRvci55PSgke3R5cGV9MiwgJHt0eXBlfSk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0
aXZlICR7dHlwZX0zIG9wZXJhdG9yLng9KCR7dHlwZX0zLCAke3R5cGV9KTtgKTsKKyAgICAgICAg
ICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTMgb3BlcmF0b3IueT0oJHt0eXBlfTMsICR7dHlwZX0p
O2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9MyBvcGVyYXRvci56PSgke3R5
cGV9MywgJHt0eXBlfSk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX00IG9w
ZXJhdG9yLng9KCR7dHlwZX00LCAke3R5cGV9KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRp
dmUgJHt0eXBlfTQgb3BlcmF0b3IueT0oJHt0eXBlfTQsICR7dHlwZX0pO2ApOworICAgICAgICAg
ICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9NCBvcGVyYXRvci56PSgke3R5cGV9NCwgJHt0eXBlfSk7
YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX00IG9wZXJhdG9yLnc9KCR7dHlw
ZX00LCAke3R5cGV9KTtgKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG9wZXJhdG9yW10o
JHt0eXBlfTIgdiwgdWludCBpbmRleCkge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICBzd2l0
Y2ggKGluZGV4KSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICBjYXNlIDA6YCk7Cisg
ICAgICAgICAgICBwcmludChgICAgICAgICAgICAgcmV0dXJuIHYueDtgKTsKKyAgICAgICAgICAg
IHByaW50KGAgICAgICAgIGNhc2UgMTpgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgICAg
ICByZXR1cm4gdi55O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgZGVmYXVsdDpgKTsK
KyAgICAgICAgICAgIHByaW50KGAgICAgICAgICAgICB0cmFwO2ApOworICAgICAgICAgICAgcHJp
bnQoYCAgICB9YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQo
YCR7dHlwZX0gb3BlcmF0b3JbXSgke3R5cGV9MyB2LCB1aW50IGluZGV4KSB7YCk7CisgICAgICAg
ICAgICBwcmludChgICAgIHN3aXRjaCAoaW5kZXgpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAg
ICAgICAgIGNhc2UgMDpgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgICAgICByZXR1cm4g
di54O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgY2FzZSAxOmApOworICAgICAgICAg
ICAgcHJpbnQoYCAgICAgICAgICAgIHJldHVybiB2Lnk7YCk7CisgICAgICAgICAgICBwcmludChg
ICAgICAgICBjYXNlIDI6YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICAgICAgcmV0dXJu
IHYuejtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgIGRlZmF1bHQ6YCk7CisgICAgICAg
ICAgICBwcmludChgICAgICAgICAgICAgdHJhcDtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAg
fWApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9
IG9wZXJhdG9yW10oJHt0eXBlfTQgdiwgdWludCBpbmRleCkge2ApOworICAgICAgICAgICAgcHJp
bnQoYCAgICBzd2l0Y2ggKGluZGV4KSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICBj
YXNlIDA6YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICAgICAgcmV0dXJuIHYueDtgKTsK
KyAgICAgICAgICAgIHByaW50KGAgICAgICAgIGNhc2UgMTpgKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgICAgICAgICByZXR1cm4gdi55O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAg
Y2FzZSAyOmApOworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgICAgIHJldHVybiB2Lno7YCk7
CisgICAgICAgICAgICBwcmludChgICAgICAgICBjYXNlIDM6YCk7CisgICAgICAgICAgICBwcmlu
dChgICAgICAgICAgICAgcmV0dXJuIHYudztgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAg
IGRlZmF1bHQ6YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICAgICAgdHJhcDtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgfWApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAg
ICAgICAgIHByaW50KGAke3R5cGV9MiBvcGVyYXRvcltdPSgke3R5cGV9MiB2LCB1aW50IGluZGV4
LCAke3R5cGV9IGEpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgc3dpdGNoIChpbmRleCkg
e2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgY2FzZSAwOmApOworICAgICAgICAgICAg
cHJpbnQoYCAgICAgICAgICAgIHYueCA9IGE7YCk7CisgICAgICAgICAgICBwcmludChgICAgICAg
ICAgICAgYnJlYWs7YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICBjYXNlIDE6YCk7Cisg
ICAgICAgICAgICBwcmludChgICAgICAgICAgICAgdi55ID0gYTtgKTsKKyAgICAgICAgICAgIHBy
aW50KGAgICAgICAgICAgICBicmVhaztgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgIGRl
ZmF1bHQ6YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICAgICAgdHJhcDtgKTsKKyAgICAg
ICAgICAgIHByaW50KGAgICAgfWApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gdjtg
KTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfTMg
b3BlcmF0b3JbXT0oJHt0eXBlfTMgdiwgdWludCBpbmRleCwgJHt0eXBlfSBhKSB7YCk7CisgICAg
ICAgICAgICBwcmludChgICAgIHN3aXRjaCAoaW5kZXgpIHtgKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgICAgIGNhc2UgMDpgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgICAgICB2Lngg
PSBhO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgICAgIGJyZWFrO2ApOworICAgICAg
ICAgICAgcHJpbnQoYCAgICAgICAgY2FzZSAxOmApOworICAgICAgICAgICAgcHJpbnQoYCAgICAg
ICAgICAgIHYueSA9IGE7YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICAgICAgYnJlYWs7
YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICBjYXNlIDI6YCk7CisgICAgICAgICAgICBw
cmludChgICAgICAgICAgICAgdi56ID0gYTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAg
ICAgICBicmVhaztgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgIGRlZmF1bHQ6YCk7Cisg
ICAgICAgICAgICBwcmludChgICAgICAgICAgICAgdHJhcDtgKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgfWApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gdjtgKTsKKyAgICAgICAg
ICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfTQgb3BlcmF0b3JbXT0o
JHt0eXBlfTQgdiwgdWludCBpbmRleCwgJHt0eXBlfSBhKSB7YCk7CisgICAgICAgICAgICBwcmlu
dChgICAgIHN3aXRjaCAoaW5kZXgpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgIGNh
c2UgMDpgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgICAgICB2LnggPSBhO2ApOworICAg
ICAgICAgICAgcHJpbnQoYCAgICAgICAgICAgIGJyZWFrO2ApOworICAgICAgICAgICAgcHJpbnQo
YCAgICAgICAgY2FzZSAxOmApOworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgICAgIHYueSA9
IGE7YCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICAgICAgYnJlYWs7YCk7CisgICAgICAg
ICAgICBwcmludChgICAgICAgICBjYXNlIDI6YCk7CisgICAgICAgICAgICBwcmludChgICAgICAg
ICAgICAgdi56ID0gYTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgICAgICBicmVhaztg
KTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgIGNhc2UgMzpgKTsKKyAgICAgICAgICAgIHBy
aW50KGAgICAgICAgICAgICB2LncgPSBhO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAg
ICAgIGJyZWFrO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgZGVmYXVsdDpgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgICAgICAgICB0cmFwO2ApOworICAgICAgICAgICAgcHJpbnQo
YCAgICB9YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiB2O2ApOworICAgICAgICAg
ICAgcHJpbnQoYH1gKTsKKyAgICAgICAgfQorICAgICAgICBwcmludCgpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAg
Zm9yICh2YXIgbSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBuIG9m
IFsyLCAzLCA0XSkgeworICAgICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0k
e259IG9wZXJhdG9yW10oJHt0eXBlfSR7bX14JHtufSwgdWludCk7YCk7CisgICAgICAgICAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bX14JHtufSBvcGVyYXRvcltdPSgke3R5cGV9
JHttfXgke259LCB1aW50LCAke3R5cGV9JHtufSk7YCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByaW50KCk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHZhciB0eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICBmb3Ig
KHZhciBpIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGogb2YgWzIs
IDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGBib29sIG9wZXJhdG9yPT0oJHt0
eXBlfSR7aX14JHtqfSBhLCAke3R5cGV9JHtpfXgke2p9IGIpIHtgKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnQoYCAgICByZXR1cm5gKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
bSA9IDA7IG0gPCBpOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4g
PSAwOyBuIDwgajsgKytuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAg
ICAgICAgYVske219XVske259XSA9PSBiWyR7bX1dWyR7bn1dICYmYCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cHJpbnQoYCAgICB0cnVlO2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgfWApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLypmdW5jdGlvbiBjb21wdXRlU3dpenpsZShjb21wb25lbnRzLCBtYXhWYWx1ZSwgbWF4TGVu
Z3RoKSB7CisgICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT0gbWF4TGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIFtjb21wb25lbnRzXTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdOworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbWF4VmFsdWU7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSByZXN1bHQuY29uY2F0KGNvbXB1dGVTd2l6emxlKGNvbXBvbmVudHMuY29uY2F0KFtp
XSksIG1heFZhbHVlLCBtYXhMZW5ndGgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZnVuY3Rpb24gY29tcG9uZW50KHZhbHVlKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KHZhbHVlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYHhgOworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGB5YDsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBgemA7CisgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYHdgOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGZhdGFsRXJyb3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZnVuY3Rpb24gdW5pcXVlTGVuZ3RoKFtJbnRdKSB7CisgICAgICAgICAgICBsZXQgaGFz
MCA9IGZhbHNlOworICAgICAgICAgICAgbGV0IGhhczEgPSBmYWxzZTsKKyAgICAgICAgICAgIGxl
dCBoYXMyID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgaGFzMyA9IGZhbHNlOworICAgICAgICAg
ICAgZm9yICh2YXIgdiBvZiBzd2l6emxlKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoICh2KSB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
czAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhczEgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGhhczIgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhhczMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBmYXRh
bEVycm9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
bGV0IHJlc3VsdCA9IDA7CisgICAgICAgICAgICBpZiAoaGFzMCkgeworICAgICAgICAgICAgICAg
IHJlc3VsdCArPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhhczEpIHsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChoYXMyKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDE7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoaGFzMykgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSAxOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAg
ICAKKworICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgYm9vbGAsIGB1Y2hhcmAsIGB1c2hvcnRg
LCBgdWludGAsIGBjaGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKKyAg
ICAgICAgICAgIGZvciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgbWF4VmFsdWUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIHN3aXp6bGUgb2YgY29tcHV0ZVN3aXp6bGUoW10sIG1heFZhbHVlLCBzaXplKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN3aXp6bGVOYW1lID0gc3dpenpsZS5tYXAoY29t
cG9uZW50KS5qb2luKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9
JHtzaXplfSBvcGVyYXRvci4ke3N3aXp6bGVOYW1lfSgke3R5cGV9JHttYXhWYWx1ZX0gdikge2Ap
OworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9JHtzaXplfSByZXN1
bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0LiR7
Y29tcG9uZW50KGkpfSA9IHYuJHtjb21wb25lbnQoc3dpenpsZVtpXSl9O2ApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1
cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh1bmlxdWVMZW5ndGgoc3dpenpsZSkgPT0gc2l6ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHttYXhWYWx1ZX0gb3Bl
cmF0b3IuJHtzd2l6emxlTmFtZX09KCR7dHlwZX0ke21heFZhbHVlfSB2LCAke3R5cGV9JHtzaXpl
fSBjKSB7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9
JHttYXhWYWx1ZX0gcmVzdWx0ID0gdjtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmludChgICAgIHJlc3VsdC4ke2NvbXBvbmVudChzd2l6emxlW2ldKX0gPSBjLiR7
Y29tcG9uZW50KGkpfTtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUg
dW5hcnkgZmxvYXRpbmctcG9pbnQgc2NhbGFyIGZ1bmN0aW9ucywKKyAgICAgICAgLy8gd2hpY2gg
Y2FuIGFsc28gYmUgYXBwbGllZCB0byB2ZWN0b3JzIGFuZCBtYXRyaWNlcyBjb21wb25lbnQtd2lz
ZS4KKyAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbGV0IG5hdGl2ZUZ1bmN0aW9u
cyA9IFtgY29zYCwgYHNpbmAsIGB0YW5gLCBgYWNvc2AsIGBhc2luYCwgYGF0YW5gLCBgY29zaGAs
IGBzaW5oYCwgYHRhbmhgLCBgY2VpbGAsIGBleHBgLCBgZmxvb3JgLCBgbG9nYCwgYHJvdW5kYCwg
YHRydW5jYCwgYGRkeGAsIGBkZHlgXTsKKyAgICAgICAgICAgIGxldCBub25OYXRpdmVGdW5jdGlv
bnMgPSBbYHNxcnRgLCBgbG9nMmAsIGBsb2cxMGAsIGBmcmFjYCwgYGV4cDJgLCBgZGVncmVlc2As
IGByYWRpYW5zYCwgYHJjcGAsIGByc3FydGAsIGBzYXR1cmF0ZWAsIGBkZHhfY29hcnNlYCwgYGRk
eF9maW5lYCwgYGRkeV9jb2Fyc2VgLCBgZGR5X2ZpbmVgLCBgZndpZHRoYF07CisgICAgICAgIAor
ICAgICAgICAgICAgZm9yICh2YXIgbmF0aXZlRnVuY3Rpb24gb2YgbmF0aXZlRnVuY3Rpb25zKSB7
CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSBmbG9hdCAke25hdGl2ZUZ1bmN0aW9ufShm
bG9hdCk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYGhhbGYgJHtuYXRpdmVGdW5jdGlvbn0o
aGFsZiB4KSB7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gaGFsZigke25h
dGl2ZUZ1bmN0aW9ufShmbG9hdCh4KSkpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGB9YCk7
CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBb
YGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IHNxcnQo
JHt0eXBlfSB4KSB7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcG93KHgs
IDAuNSk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICBw
cmludChgJHt0eXBlfSBsb2cyKCR7dHlwZX0geCkge2ApOworICAgICAgICAgICAgICAgIHByaW50
KGAgICAgcmV0dXJuIGxvZyh4KSAvIGxvZygke3R5cGV9KDIpKTtgKTsKKyAgICAgICAgICAgICAg
ICBwcmludChgfWApOworICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IGxvZzEwKCR7dHlw
ZX0geCkge2ApOworICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIGxvZyh4KSAvIGxv
Zygke3R5cGV9KDEwKSk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAg
ICAgICAgICBwcmludChgJHt0eXBlfSBmcmFjKCR7dHlwZX0geCkge2ApOworICAgICAgICAgICAg
ICAgIHByaW50KGAgICAgcmV0dXJuIHggLSBmbG9vcih4KTtgKTsKKyAgICAgICAgICAgICAgICBw
cmludChgfWApOworICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IGV4cDIoJHt0eXBlfSB4
KSB7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gZXhwKHggKiBsb2coJHt0
eXBlfSgyKSkpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAg
ICAgcHJpbnQoYCR7dHlwZX0gZGVncmVlcygke3R5cGV9IHgpIHtgKTsKKyAgICAgICAgICAgICAg
ICBwcmludChgICAgIHJldHVybiB4ICogMTgwIC8gMy4xNDE1OTtgKTsKKyAgICAgICAgICAgICAg
ICBwcmludChgfWApOworICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IHJhZGlhbnMoJHt0
eXBlfSB4KSB7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4geCAqIDMuMTQx
NTkgLyAxODA7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAg
ICBwcmludChgJHt0eXBlfSByY3AoJHt0eXBlfSB4KSB7YCk7CisgICAgICAgICAgICAgICAgcHJp
bnQoYCAgICByZXR1cm4gMSAvIHg7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAg
ICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSByc3FydCgke3R5cGV9IHgpIHtgKTsKKyAgICAg
ICAgICAgICAgICBwcmludChgICAgIHJldHVybiAxIC8gc3FydCh4KTtgKTsKKyAgICAgICAgICAg
ICAgICBwcmludChgfWApOworICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IHNhdHVyYXRl
KCR7dHlwZX0geCkge2ApOworICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIGNsYW1w
KHgsIDAsIDEpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAg
ICAgcHJpbnQoYCR7dHlwZX0gZGR4X2NvYXJzZSgke3R5cGV9IHgpIHtgKTsKKyAgICAgICAgICAg
ICAgICBwcmludChgICAgIHJldHVybiBkZHgoeCk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQo
YH1gKTsKKyAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBkZHhfZmluZSgke3R5cGV9IHgp
IHtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiBkZHgoeCk7YCk7CisgICAg
ICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBk
ZHlfY29hcnNlKCR7dHlwZX0geCkge2ApOworICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0
dXJuIGRkeSh4KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAg
ICAgIHByaW50KGAke3R5cGV9IGRkeV9maW5lKCR7dHlwZX0geCkge2ApOworICAgICAgICAgICAg
ICAgIHByaW50KGAgICAgcmV0dXJuIGRkeSh4KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChg
fWApOworICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IGZ3aWR0aCgke3R5cGV9IHgpIHtg
KTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiBhYnMoZGR4KHgpKSArIGFicyhk
ZHkoeCkpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIAorICAgICAg
ICAgICAgICAgIGZvciAodmFyIG91dHB1dEZ1bmN0aW9uIG9mIG5hdGl2ZUZ1bmN0aW9ucy5jb25j
YXQobm9uTmF0aXZlRnVuY3Rpb25zKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBz
aXplIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlw
ZX0ke3NpemV9ICR7b3V0cHV0RnVuY3Rpb259KCR7dHlwZX0ke3NpemV9IHgpIHtgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7c2l6ZX0gcmVzdWx0O2ApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske2l9XSA9ICR7
b3V0cHV0RnVuY3Rpb259KHhbJHtpfV0pO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAg
ICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaiBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7aX14JHtqfSAke291dHB1dEZ1bmN0aW9ufSgk
e3R5cGV9JHtpfXgke2p9IHgpIHtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu
dChgICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgaTsgKyttKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgajsgKytuKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XVske259XSA9ICR7
b3V0cHV0RnVuY3Rpb259KHhbJHttfV1bJHtufV0pO2ApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHByaW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGJpbmFyeSBmbG9hdGluZy1wb2ludCBzY2FsYXIgZnVu
Y3Rpb25zLAorICAgICAgICAvLyB3aGljaCBjYW4gYWxzbyBiZSBhcHBsaWVkIHRvIHZlY3RvcnMg
YW5kIG1hdHJpY2VzIGNvbXBvbmVudC13aXNlLgorICAgICAgICAoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBsZXQgbmF0aXZlRnVuY3Rpb25zID0gW2Bwb3dgXTsKKyAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHZhciBuYXRpdmVGdW5jdGlvbiBvZiBuYXRpdmVGdW5jdGlvbnMpIHsKKyAgICAg
ICAgICAgICAgICBwcmludChgbmF0aXZlIGZsb2F0ICR7bmF0aXZlRnVuY3Rpb259KGZsb2F0LCBm
bG9hdCk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYGhhbGYgJHtuYXRpdmVGdW5jdGlvbn0o
aGFsZiB4LCBoYWxmIHkpIHtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiBo
YWxmKCR7bmF0aXZlRnVuY3Rpb259KGZsb2F0KHgpLCBmbG9hdCh5KSkpO2ApOworICAgICAgICAg
ICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAg
Zm9yICh2YXIgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAgICAgIGxl
dCBub25OYXRpdmVGdW5jdGlvbnMgPSBbYHN0ZXBgLCBgbGRleHBgLCBgZm1vZGBdOworICAgICAg
ICAKKyAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBzdGVwKCR7dHlwZX0geSwgJHt0eXBl
fSB4KSB7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4geCA+PSB5ID8gMSA6
IDA7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICBwcmlu
dChgJHt0eXBlfSBsZGV4cCgke3R5cGV9IHgsICR7dHlwZX0gZSkge2ApOworICAgICAgICAgICAg
ICAgIHByaW50KGAgICAgcmV0dXJuIHggKiBwb3coMiwgZSk7YCk7CisgICAgICAgICAgICAgICAg
cHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBmbW9kKCR7dHlwZX0g
eCwgJHt0eXBlfSB5KSB7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICB1aW50IHdob2xl
ID0gdWludCh4IC8geSk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9IG11
bHRpcGxlID0gJHt0eXBlfSh3aG9sZSkgKiB5O2ApOworICAgICAgICAgICAgICAgIHByaW50KGAg
ICAgcmV0dXJuIHggLSBtdWx0aXBsZTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgfWApOwor
ICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBvdXRwdXRGdW5jdGlvbiBvZiBuYXRp
dmVGdW5jdGlvbnMuY29uY2F0KG5vbk5hdGl2ZUZ1bmN0aW9ucykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgc2l6ZSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHByaW50KGAke3R5cGV9JHtzaXplfSAke291dHB1dEZ1bmN0aW9ufSgke3R5cGV9JHtzaXpl
fSB4LCAke3R5cGV9JHtzaXplfSB5KSB7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmlu
dChgICAgICR7dHlwZX0ke3NpemV9IHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpbnQoYCAgICByZXN1bHRbJHtpfV0gPSAke291dHB1dEZ1bmN0aW9ufSh4WyR7aX1d
LCB5WyR7aX1dKTtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGogb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbnQoYCR7dHlwZX0ke2l9eCR7an0gJHtvdXRwdXRGdW5jdGlvbn0oJHt0eXBlfSR7aX14JHtq
fSB4LCAke3R5cGV9JHtpfXgke2p9IHkpIHtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmludChgICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgaTsgKyttKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgajsgKytuKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XVske259
XSA9ICR7b3V0cHV0RnVuY3Rpb259KHhbJHttfV1bJHtufV0sIHlbJHttfV1bJHtufV0pO2ApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJl
c3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHByaW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
KCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHRlcm5hcnkgZmxv
YXRpbmctcG9pbnQgc2NhbGFyIGZ1bmN0aW9ucywKKyAgICAgICAgLy8gd2hpY2ggY2FuIGFsc28g
YmUgYXBwbGllZCB0byB2ZWN0b3JzIGFuZCBtYXRyaWNlcyBjb21wb25lbnQtd2lzZS4KKyAgICAg
ICAgZm9yICh2YXIgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAgbGV0
IG5vbk5hdGl2ZUZ1bmN0aW9ucyA9IFtgc21vb3Roc3RlcGAsIGBsZXJwYCwgYGZtYWAsIGBtYWRg
XTsKKyAgICAgICAgCisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBzbW9vdGhzdGVwKCR7dHlw
ZX0gZWRnZTAsICR7dHlwZX0gZWRnZTEsICR7dHlwZX0geCkge2ApOworICAgICAgICAgICAgcHJp
bnQoYCAgICAke3R5cGV9IHQgPSBjbGFtcCgoeCAtIGVkZ2UwKSAvIChlZGdlMSAtIGVkZ2UwKSwg
MCwgMSk7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiB0ICogdCAqICgzIC0gMiAq
IHQpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5
cGV9IGxlcnAoJHt0eXBlfSB4LCAke3R5cGV9IHksICR7dHlwZX0gcykge2ApOworICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXR1cm4geCAqICgxIC0gcykgKyB5ICogcztgKTsKKyAgICAgICAgICAg
IHByaW50KGB9YCk7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBmbWEoJHt0eXBlfSB4LCAk
e3R5cGV9IHksICR7dHlwZX0geikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4g
eCAqIHkgKyB6O2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50
KGAke3R5cGV9IG1hZCgke3R5cGV9IHgsICR7dHlwZX0geSwgJHt0eXBlfSB6KSB7YCk7CisgICAg
ICAgICAgICBwcmludChgICAgIHJldHVybiB4ICogeSArIHo7YCk7CisgICAgICAgICAgICBwcmlu
dChgfWApOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodmFyIG5vbk5hdGl2ZUZ1bmN0aW9u
IG9mIG5vbk5hdGl2ZUZ1bmN0aW9ucykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIHNpemUg
b2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtzaXpl
fSAke25vbk5hdGl2ZUZ1bmN0aW9ufSgke3R5cGV9JHtzaXplfSB4LCAke3R5cGV9JHtzaXplfSB5
LCAke3R5cGV9JHtzaXplfSB6KSB7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAg
JHt0eXBlfSR7c2l6ZX0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXN1bHRbJHtpfV0gPSAke25vbk5hdGl2ZUZ1bmN0aW9ufSh4WyR7aX1dLCB5WyR7aX1dLCB6
WyR7aX1dKTtgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBw
cmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGB9
YCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgb2YgWzIs
IDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogb2YgWzIsIDMsIDRdKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7aX14JHtqfSAke25vbk5h
dGl2ZUZ1bmN0aW9ufSgke3R5cGV9JHtpfXgke2p9IHgsICR7dHlwZX0ke2l9eCR7an0geSwgJHt0
eXBlfSR7aX14JHtqfSB6KSB7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAg
ICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgbSA9IDA7IG0gPCBpOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBuID0gMDsgbiA8IGo7ICsrbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmludChgICAgIHJlc3VsdFske219XVske259XSA9ICR7bm9uTmF0aXZlRnVuY3Rpb259
KHhbJHttfV1bJHtufV0sIHlbJHttfV1bJHtufV0sIHpbJHttfV1bJHtufV0pO2ApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludCgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBwcmludChgbmF0aXZlIGJvb2wgaXNub3JtYWwoaGFsZik7
YCk7CisgICAgICAgIHByaW50KGBuYXRpdmUgYm9vbCBpc25vcm1hbChmbG9hdCk7YCk7CisgICAg
ICAgIGZvciAodmFyIHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoYGJvb2wk
e3NpemV9IGlzbm9ybWFsKCR7dHlwZX0ke3NpemV9IHgpIHtgKTsKKyAgICAgICAgICAgICAgICBw
cmludChgICAgIGJvb2wke3NpemV9IHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBwcmludChgICAg
IHJlc3VsdFske2l9XSA9IGlzbm9ybWFsKHhbJHtpfV0pO2ApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAg
ICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGxl
dCBuYXRpdmVGdW5jdGlvbnMgPSBbYGlzZmluaXRlYCwgYGlzaW5mYCwgYGlzbmFuYF07CisgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh2YXIgbmF0aXZlRnVuY3Rpb24gb2YgbmF0aXZlRnVuY3Rp
b25zKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSBib29sICR7bmF0aXZlRnVuY3Rp
b259KGZsb2F0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgYm9vbCAke25hdGl2ZUZ1bmN0
aW9ufShoYWxmIHgpIHtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiAke25h
dGl2ZUZ1bmN0aW9ufShmbG9hdCh4KSk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtg
aGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgbmF0aXZlRnVuY3Rp
b24gb2YgbmF0aXZlRnVuY3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHNp
emUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgYm9vbCR7
c2l6ZX0gJHtuYXRpdmVGdW5jdGlvbn0oJHt0eXBlfSR7c2l6ZX0geCkge2ApOworICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpbnQoYCAgICBib29sJHtzaXplfSByZXN1bHQ7YCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7aX1dID0gJHtuYXRpdmVG
dW5jdGlvbn0oeFske2l9XSk7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pKCkKKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2BoYWxmYCwgYGZs
b2F0YF0pIHsKKyAgICAgICAgICAgIGxldCBub25OYXRpdmVGdW5jdGlvbnMgPSBbYGlzb3JkZXJl
ZGAsIGBpc3Vub3JkZXJlZGBdOworICAgICAgICAKKyAgICAgICAgICAgIHByaW50KGBib29sIGlz
b3JkZXJlZCgke3R5cGV9IHgsICR7dHlwZX0geSkge2ApOworICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXR1cm4gKHggPT0geCkgJiYgKHkgPT0geSk7YCk7CisgICAgICAgICAgICBwcmludChgfWAp
OworICAgICAgICAgICAgcHJpbnQoYGJvb2wgaXN1bm9yZGVyZWQoJHt0eXBlfSB4LCAke3R5cGV9
IHkpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIGlzbmFuKHgpIHx8IGlzbmFu
KHkpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHZhciBub25OYXRpdmVGdW5jdGlvbiBvZiBub25OYXRpdmVGdW5jdGlvbnMpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHZhciBzaXplIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAgICAgICAg
ICAgICBwcmludChgYm9vbCR7c2l6ZX0gJHtub25OYXRpdmVGdW5jdGlvbn0oJHt0eXBlfSR7c2l6
ZX0geCwgJHt0eXBlfSR7c2l6ZX0geSkge2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChg
ICAgIGJvb2wke3NpemV9IHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAg
ICAgcmVzdWx0WyR7aX1dID0gJHtub25OYXRpdmVGdW5jdGlvbn0oeFske2l9XSwgeVske2l9XSk7
YCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgfWApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50KCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHByaW50KGBuYXRpdmUgZmxvYXQgYXRhbjIoZmxvYXQs
IGZsb2F0KTtgKTsKKyAgICAgICAgcHJpbnQoYGhhbGYgYXRhbjIoaGFsZiB4LCBoYWxmIHkpIHtg
KTsKKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gaGFsZihhdGFuMihmbG9hdCh4KSwgZmxvYXQo
eSkpKTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBb
YGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAgZm9yICh2YXIgc2l6ZSBvZiBbMiwgMywg
NF0pIHsKKyAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7c2l6ZX0gYXRhbjIoJHt0eXBl
fSR7c2l6ZX0geCwgJHt0eXBlfSR7c2l6ZX0geSkge2ApOworICAgICAgICAgICAgICAgIHByaW50
KGAgICAgJHt0eXBlfSR7c2l6ZX0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAg
cmVzdWx0WyR7aX1dID0gYXRhbjIoeFske2l9XSwgeVske2l9XSk7YCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAg
ICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2
YXIgaSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqIG9mIFsyLCAz
LCA0XSkgeworICAgICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7aX14JHtqfSBhdGFu
Migke3R5cGV9JHtpfXgke2p9IHgsICR7dHlwZX0ke2l9eCR7an0geSkge2ApOworICAgICAgICAg
ICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2ApOworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IGk7ICsrbSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBqOyArK24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XVske259XSA9IGF0YW4yKHhbJHtt
fV1bJHtufV0sIHlbJHttfV1bJHtufV0pO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0
dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQoKTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKKyAg
ICAgICAgICAgIHByaW50KGB2b2lkIHNpbmNvcygke3R5cGV9IHgsIHRocmVhZCAke3R5cGV9KiB5
LCB0aHJlYWQgJHt0eXBlfSogeikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAqeSA9IHNp
bih4KTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgKnogPSBjb3MoeCk7YCk7CisgICAgICAg
ICAgICBwcmludChgfWApOworICAgICAgICAgICAgZm9yICh2YXIgc2l6ZSBvZiBbMiwgMywgNF0p
IHsKKyAgICAgICAgICAgICAgICBwcmludChgdm9pZCBzaW5jb3MoJHt0eXBlfSR7c2l6ZX0geCwg
dGhyZWFkICR7dHlwZX0ke3NpemV9KiB5LCB0aHJlYWQgJHt0eXBlfSR7c2l6ZX0qIHopIHtgKTsK
KyAgICAgICAgICAgICAgICAvLyBDYW4ndCB0YWtlIGEgcG9pbnRlciB0byBhIG1lbWJlciBvZiBh
IHZlY3Rvci4KKyAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0gc2luUmVzdWx0O2Ap
OworICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSBjb3NSZXN1bHQ7YCk7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbnQoYCAgICBzaW5jb3MoeFske2l9XSwgJnNpblJlc3VsdCwgJmNvc1Jlc3Vs
dCk7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgKCp5KVske2l9XSA9IHNpblJl
c3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAoKnopWyR7aX1dID0gY29z
UmVzdWx0O2ApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmludChgfWAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSBvZiBbMiwgMywgNF0pIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBqIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAgICAg
ICAgICAgICBwcmludChgdm9pZCBzaW5jb3MoJHt0eXBlfSR7aX14JHtqfSB4LCB0aHJlYWQgJHt0
eXBlfSR7aX14JHtqfSogeSwgdGhyZWFkICR7dHlwZX0ke2l9eCR7an0qIHopIHtgKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdGFrZSBhIHBvaW50ZXIgdG8gYSBtZW1iZXIgb2YgYSBt
YXRyaXguCisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSBzaW5SZXN1bHQ7
YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSBjb3NSZXN1bHQ7YCk7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgaTsgKyttKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGo7ICsrbikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgc2luY29zKHhbJHttfV1bJHtufV0sICZz
aW5SZXN1bHQsICZjb3NSZXN1bHQpO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
aW50KGAgICAgKCp5KVske219XVske259XSA9IHNpblJlc3VsdDtgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmludChgICAgICgqeilbJHttfV1bJHtufV0gPSBjb3NSZXN1bHQ7YCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dmFyIGJpbmFyeUZ1bmN0aW9uIG9mIFtbYGFsbGAsIGB0cnVlYCwgYCYmYF0sIFtgYW55YCwgYGZh
bHNlYCwgYHx8YF1dKSB7CisgICAgICAgICAgICBwcmludChgYm9vbCAke2JpbmFyeUZ1bmN0aW9u
WzBdfShib29sIHgpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHg7YCk7Cisg
ICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgZm9yICh2YXIgc2l6ZSBvZiBbMiwg
MywgNF0pIHsKKyAgICAgICAgICAgICAgICBwcmludChgYm9vbCAke2JpbmFyeUZ1bmN0aW9uWzBd
fShib29sJHtzaXplfSB4KSB7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICBib29sIHJl
c3VsdCA9ICR7YmluYXJ5RnVuY3Rpb25bMV19O2ApOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAg
cmVzdWx0ID0gcmVzdWx0ICR7YmluYXJ5RnVuY3Rpb25bMl19ICh4WyR7aX1dKTtgKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2Ap
OworICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKHZhciB0eXBlIG9mIFtgdWNoYXJgLCBgdXNob3J0YCwgYHVpbnRgLCBgY2hhcmAsIGBz
aG9ydGAsIGBpbnRgLCBgaGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICAgICAgcHJpbnQo
YGJvb2wgJHtiaW5hcnlGdW5jdGlvblswXX0oJHt0eXBlfSB4KSB7YCk7CisgICAgICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXR1cm4geCAhPSAwO2ApOworICAgICAgICAgICAgICAgIHByaW50KGB9
YCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgc2l6ZSBvZiBbMiwgMywgNF0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnQoYGJvb2wgJHtiaW5hcnlGdW5jdGlvblswXX0oJHt0eXBlfSR7
c2l6ZX0geCkge2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIGJvb2wgcmVzdWx0
ID0gJHtiaW5hcnlGdW5jdGlvblsxXX07YCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChg
ICAgIHJlc3VsdCA9IHJlc3VsdCAke2JpbmFyeUZ1bmN0aW9uWzJdfSAoeFske2l9XSAhPSAwKTtg
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwcmludChgICAg
IHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0eXBlID09IGBoYWxmYCB8fCB0eXBl
ID09IGBmbG9hdGApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBvZiBbMiwgMywg
NF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogb2YgWzIsIDMsIDRdKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYGJvb2wgJHtiaW5hcnlGdW5jdGlv
blswXX0oJHt0eXBlfSR7aX14JHtqfSB4KSB7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpbnQoYCAgICBib29sIHJlc3VsdCA9ICR7YmluYXJ5RnVuY3Rpb25bMV19O2ApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgaTsgKyttKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgajsgKytu
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3Vs
dCA9IHJlc3VsdCAke2JpbmFyeUZ1bmN0aW9uWzJdfSAoeFske219XVske259XSAhPSAwKTtgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiBy
ZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50KCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWlu
dGBdKSB7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBhYnMoJHt0eXBlfSB4KSB7YCk7Cisg
ICAgICAgICAgICBwcmludChgICAgIHJldHVybiB4O2ApOworICAgICAgICAgICAgcHJpbnQoYH1g
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgY2hhcmAsIGBzaG9ydGAs
IGBpbnRgLCBgaGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBh
YnMoJHt0eXBlfSB4KSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgIGlmICh4IDwgMClgKTsK
KyAgICAgICAgICAgIHByaW50KGAgICAgICAgIHJldHVybiAteDtgKTsKKyAgICAgICAgICAgIHBy
aW50KGAgICAgcmV0dXJuIHg7YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICB9
CisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGAsIGBj
aGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlw
ZX0ke3NpemV9IGFicygke3R5cGV9JHtzaXplfSB4KSB7YCk7CisgICAgICAgICAgICAgICAgcHJp
bnQoYCAgICAke3R5cGV9JHtzaXplfSByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXN1bHRbJHtpfV0gPSBhYnMoeFske2l9XSk7YCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAg
ICBwcmludChgfWApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGUgPT0gYGhh
bGZgIHx8IHR5cGUgPT0gYGZsb2F0YCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgb2Yg
WzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogb2YgWzIsIDMsIDRd
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7aX14JHtqfSBhYnMo
JHt0eXBlfSR7aX14JHtqfSB4KSB7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChg
ICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgbSA9IDA7IG0gPCBpOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBuID0gMDsgbiA8IGo7ICsrbikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XVske259XSA9IGFicyh4WyR7bX1dWyR7bn1d
KTtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7
YCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHByaW50KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgdWNoYXJg
LCBgdXNob3J0YCwgYHVpbnRgXSkgeworICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gc2lnbigk
e3R5cGV9IHgpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHggPT0gMCA/IDAg
OiAxO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciB0eXBlIG9mIFtgY2hhcmAsIGBzaG9ydGAsIGBpbnRgLCBgaGFsZmAsIGBmbG9hdGBdKSB7
CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBzaWduKCR7dHlwZX0geCkge2ApOworICAgICAg
ICAgICAgcHJpbnQoYCAgICBpZiAoeCA8IDApYCk7CisgICAgICAgICAgICBwcmludChgICAgICAg
ICByZXR1cm4gLTE7YCk7CisgICAgICAgICAgICBwcmludChgICAgIGlmICh4ID09IDApYCk7Cisg
ICAgICAgICAgICBwcmludChgICAgICAgICByZXR1cm4gMDtgKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgcmV0dXJuIDE7YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICB9Cisg
ICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGAsIGBjaGFy
YCwgYHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKKyAgICAgICAgICAgIGZvciAo
dmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0k
e3NpemV9IHNpZ24oJHt0eXBlfSR7c2l6ZX0geCkge2ApOworICAgICAgICAgICAgICAgIHByaW50
KGAgICAgJHt0eXBlfSR7c2l6ZX0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAg
cmVzdWx0WyR7aX1dID0gc2lnbih4WyR7aX1dKTtgKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAg
IHByaW50KGB9YCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZSA9PSBgaGFs
ZmAgfHwgdHlwZSA9PSBgZmxvYXRgKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBvZiBb
MiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiBvZiBbMiwgMywgNF0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtpfXgke2p9IHNpZ24o
JHt0eXBlfSR7aX14JHtqfSB4KSB7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChg
ICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgbSA9IDA7IG0gPCBpOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBuID0gMDsgbiA8IGo7ICsrbikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XVske259XSA9IHNpZ24oeFske219XVske259
XSk7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0
O2ApOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBwcmludCgpOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYHVjaGFy
YCwgYHVzaG9ydGAsIGB1aW50YCwgYGNoYXJgLCBgc2hvcnRgLCBgaW50YCwgYGhhbGZgLCBgZmxv
YXRgXSkgeworICAgICAgICAgICAgbGV0IG5vbk5hdGl2ZUZ1bmN0aW9ucyA9IFtgbWluYCwgYG1h
eGBdOworICAgICAgICAKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG1pbigke3R5cGV9IHgs
ICR7dHlwZX0geSkge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4geCA+IHkgPyB5
IDogeDtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICBwcmludChgJHt0
eXBlfSBtYXgoJHt0eXBlfSB4LCAke3R5cGV9IHkpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAg
ICAgcmV0dXJuIHggPiB5ID8geCA6IHk7YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAodmFyIG5vbk5hdGl2ZUZ1bmN0aW9uIG9mIG5vbk5hdGl2
ZUZ1bmN0aW9ucykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIHNpemUgb2YgWzIsIDMsIDRd
KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtzaXplfSAke25vbk5hdGl2
ZUZ1bmN0aW9ufSgke3R5cGV9JHtzaXplfSB4LCAke3R5cGV9JHtzaXplfSB5KSB7YCk7CisgICAg
ICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7c2l6ZX0gcmVzdWx0O2ApOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHRbJHtpfV0gPSAke25vbk5hdGl2ZUZ1
bmN0aW9ufSh4WyR7aX1dLCB5WyR7aX1dKTtgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAg
ICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh0eXBlID09IGBoYWxmYCB8fCB0eXBlID09IGBmbG9hdGApIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGogb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbnQoYCR7dHlwZX0ke2l9eCR7an0gJHtub25OYXRpdmVGdW5jdGlvbn0oJHt0eXBlfSR7aX14
JHtqfSB4LCAke3R5cGV9JHtpfXgke2p9IHkpIHtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmludChgICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2ApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgaTsgKyttKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgajsgKytuKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XVsk
e259XSA9ICR7bm9uTmF0aXZlRnVuY3Rpb259KHhbJHttfV1bJHtufV0sIHlbJHttfV1bJHtufV0p
O2ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0
dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgfWApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnQoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYHVjaGFyYCwgYHVzaG9ydGAs
IGB1aW50YCwgYGNoYXJgLCBgc2hvcnRgLCBgaW50YCwgYGhhbGZgLCBgZmxvYXRgXSkgeworICAg
ICAgICAgICAgbGV0IG5vbk5hdGl2ZUZ1bmN0aW9ucyA9IFtgY2xhbXBgXTsKKyAgICAgICAgCisg
ICAgICAgICAgICBwcmludChgJHt0eXBlfSBjbGFtcCgke3R5cGV9IHgsICR7dHlwZX0gbG93ZXIs
ICR7dHlwZX0gdXBwZXIpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIG1heCht
aW4odXBwZXIsIHgpLCBsb3dlcik7YCk7CisgICAgICAgICAgICBwcmludChgfWApOworICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodmFyIG5vbk5hdGl2ZUZ1bmN0aW9uIG9mIG5vbk5hdGl2ZUZ1
bmN0aW9ucykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7
CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtzaXplfSAke25vbk5hdGl2ZUZ1
bmN0aW9ufSgke3R5cGV9JHtzaXplfSB4LCAke3R5cGV9JHtzaXplfSB5LCAke3R5cGV9JHtzaXpl
fSB6KSB7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7c2l6ZX0g
cmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHRbJHtpfV0g
PSAke25vbk5hdGl2ZUZ1bmN0aW9ufSh4WyR7aX1dLCB5WyR7aX1dLCB6WyR7aX1dKTtgKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVy
biByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0eXBlID09IGBoYWxmYCB8fCB0eXBlID09IGBm
bG9hdGApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBvZiBbMiwgMywgNF0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogb2YgWzIsIDMsIDRdKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0ke2l9eCR7an0gJHtub25OYXRp
dmVGdW5jdGlvbn0oJHt0eXBlfSR7aX14JHtqfSB4LCAke3R5cGV9JHtpfXgke2p9IHksICR7dHlw
ZX0ke2l9eCR7an0geikge2ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAg
ICAgJHt0eXBlfSR7aX14JHtqfSByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgbSA9IDA7IG0gPCBpOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBqOyArK24pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7bX1dWyR7bn1dID0gJHtub25O
YXRpdmVGdW5jdGlvbn0oeFske219XVske259XSwgeVske219XVske259XSwgelske219XVske259
XSk7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICBy
ZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGB9YCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludCgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBd
KSB7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBtb2RmKCR7dHlwZX0geCwgdGhyZWFkICR7
dHlwZX0qIGlwKSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHVpbnQgcmVzdWx0ID0gdWlu
dCh4KTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgKmlwID0geCAtICR7dHlwZX0ocmVzdWx0
KTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuICR7dHlwZX0ocmVzdWx0KTtgKTsK
KyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh2YXIg
c2l6ZSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7c2l6
ZX0gbW9kZigke3R5cGV9JHtzaXplfSB4LCB0aHJlYWQgJHt0eXBlfSR7c2l6ZX0qIHkpIHtgKTsK
KyAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke3NpemV9IHJlc3VsdDtgKTsKKyAg
ICAgICAgICAgICAgICAvLyBDYW4ndCB0YWtlIGEgcG9pbnRlciB0byBhIG1lbWJlciBvZiBhIHZl
Y3Rvci4KKyAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0gYnVmZmVyO2ApOworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7aX1dID0gbW9kZih4WyR7aX1dLCAmYnVmZmVy
KTtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAoKnkpWyR7aX1dID0gYnVmZmVy
O2ApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVy
biByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvciAodmFyIGkgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaiBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7
dHlwZX0ke2l9eCR7an0gbW9kZigke3R5cGV9JHtpfXgke2p9IHgsIHRocmVhZCAke3R5cGV9JHtp
fXgke2p9KiB5KSB7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7
aX14JHtqfSByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIC8vIENhbid0IHRha2UgYSBw
b2ludGVyIHRvIGEgbWVtYmVyIG9mIGEgbWF0cml4LgorICAgICAgICAgICAgICAgICAgICBwcmlu
dChgICAgICR7dHlwZX0gYnVmZmVyO2ApOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBt
ID0gMDsgbSA8IGk7ICsrbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9
IDA7IG4gPCBqOyArK24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAg
IHJlc3VsdFske219XVske259XSA9IG1vZGYoeFske219XVske259XSwgJmJ1ZmZlcik7YCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAoKnkpWyR7bX1dWyR7bn1dID0g
YnVmZmVyO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBwcmludCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBwcmludChgdWNoYXIgY291bnRfYml0cyh1Y2hhciB4KSB7YCk7CisgICAgICAgIHByaW50KGAg
ICAgcmV0dXJuIHVjaGFyKCgoeCB8IHVjaGFyKDEgPDwgMCkpID09IDAgPyAwIDogMSkgK2ApOwor
ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDc7ICsraSkgeworICAgICAgICAgICAgcHJpbnQo
YCAgICAgICAgICAgKCh4IHwgdWNoYXIoMSA8PCAke2l9KSkgPT0gMCA/IDAgOiAxKSArYCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcHJpbnQoYCAgICAgICAgICAgKCh4IHwgdWNoYXIoMSA8PCA3KSkg
PT0gMCA/IDAgOiAxKSk7YCk7CisgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIHByaW50KGB1
Y2hhciBjb3VudF9iaXRzKHVzaG9ydCB4KSB7YCk7CisgICAgICAgIHByaW50KGAgICAgcmV0dXJu
IHVjaGFyKCgoeCB8IHVzaG9ydCgxIDw8IDApKSA9PSAwID8gMCA6IDEpICtgKTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDE7IGkgPCAxNTsgKytpKSB7CisgICAgICAgICAgICBwcmludChgICAgICAg
ICAgICAoKHggfCB1c2hvcnQoMSA8PCAke2l9KSkgPT0gMCA/IDAgOiAxKSArYCk7CisgICAgICAg
IH0KKyAgICAgICAgcHJpbnQoYCAgICAgICAgICAgKCh4IHwgdXNob3J0KDEgPDwgMTUpKSA9PSAw
ID8gMCA6IDEpKTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgcHJpbnQoYHVjaGFy
IGNvdW50X2JpdHModWludCB4KSB7YCk7CisgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHVjaGFy
KCgoeCB8IHVpbnQoMSA8PCAwKSkgPT0gMCA/IDAgOiAxKSArYCk7CisgICAgICAgIGZvciAodmFy
IGkgPSAxOyBpIDwgMzE7ICsraSkgeworICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgICAgKCh4
IHwgdWludCgxIDw8ICR7aX0pKSA9PSAwID8gMCA6IDEpICtgKTsKKyAgICAgICAgfQorICAgICAg
ICBwcmludChgICAgICAgICAgICAoKHggfCB1aW50KDEgPDwgMzEpKSA9PSAwID8gMCA6IDEpKTtg
KTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgcHJpbnQoYHVjaGFyIHJldmVyc2ViaXRz
KHVjaGFyIHgpIHtgKTsKKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gdWNoYXIoKCh4ICYgdWNo
YXIoMSA8PCAwKSkgPDwgNykgfGApOworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDc7ICsr
aSkgeworICAgICAgICAgICAgbGV0IG9mZnNldCA9IDcgLSAyICogaQorICAgICAgICAgICAgcHJp
bnQoYCAgICAgICAgICAgKCh4ICYgdWNoYXIoMSA8PCAke2l9KSkgJHtvZmZzZXQgPiAwID8gYDw8
YCA6IGA+PmB9ICR7TWF0aC5hYnMob2Zmc2V0KX0pIHxgKTsKKyAgICAgICAgfQorICAgICAgICBw
cmludChgICAgICAgICAgICAoKHggJiB1Y2hhcigxIDw8IDcpKSA+PiA3KSk7YCk7CisgICAgICAg
IHByaW50KGB9YCk7CisgICAgICAgIHByaW50KGB1c2hvcnQgcmV2ZXJzZWJpdHModXNob3J0IHgp
IHtgKTsKKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gdXNob3J0KCgoeCAmIHVzaG9ydCgxIDw8
IDApKSA8PCAxNSkgfGApOworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDE1OyArK2kpIHsK
KyAgICAgICAgICAgIGxldCBvZmZzZXQgPSAxNSAtIDIgKiBpCisgICAgICAgICAgICBwcmludChg
ICAgICAgICAgICAoKHggJiB1c2hvcnQoMSA8PCAke2l9KSkgJHtvZmZzZXQgPiAwID8gYDw8YCA6
IGA+PmB9ICR7TWF0aC5hYnMob2Zmc2V0KX0pIHxgKTsKKyAgICAgICAgfQorICAgICAgICBwcmlu
dChgICAgICAgICAgICAoKHggJiB1c2hvcnQoMSA8PCAxNSkpID4+IDE1KSk7YCk7CisgICAgICAg
IHByaW50KGB9YCk7CisgICAgICAgIHByaW50KGB1aW50IHJldmVyc2ViaXRzKHVpbnQgeCkge2Ap
OworICAgICAgICBwcmludChgICAgIHJldHVybiB1aW50KCgoeCAmIHVpbnQoMSA8PCAwKSkgPDwg
MzEpIHxgKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCAzMTsgKytpKSB7CisgICAgICAg
ICAgICBsZXQgb2Zmc2V0ID0gMzEgLSAyICogaQorICAgICAgICAgICAgcHJpbnQoYCAgICAgICAg
ICAgKCh4ICYgdWludCgxIDw8ICR7aX0pKSAke29mZnNldCA+IDAgPyBgPDxgIDogYD4+YH0gJHtN
YXRoLmFicyhvZmZzZXQpfSkgfGApOworICAgICAgICB9CisgICAgICAgIHByaW50KGAgICAgICAg
ICAgICgoeCAmIHVpbnQoMSA8PCAzMSkpID4+IDMxKSk7YCk7CisgICAgICAgIHByaW50KGB9YCk7
CisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGBdKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBzaXplIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAgICAg
ICAgIHByaW50KGB1Y2hhciR7c2l6ZX0gY291bnRfYml0cygke3R5cGV9JHtzaXplfSB4KSB7YCk7
CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICB1Y2hhciR7c2l6ZX0gcmVzdWx0O2ApOworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7aX1dID0gY291bnRfYml0cyh4WyR7aX1dKTtg
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4g
cmVzdWx0O2ApOworICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYHVjaGFyYCwgYHVzaG9ydGAsIGB1
aW50YF0pIHsKKyAgICAgICAgICAgIGZvciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAg
ICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0ke3NpemV9IHJldmVyc2ViaXRzKCR7dHlwZX0ke3Np
emV9IHgpIHtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke3NpemV9IHJl
c3VsdDtgKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske2l9XSA9IHJldmVyc2Vi
aXRzKHhbJHtpfV0pO2ApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmlu
dChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcmludCgpOworICAgICAgICAKKyAgICAg
ICAgcHJpbnQoYHVpbnQgZmlyc3RiaXRoaWdoKHVjaGFyIHgpIHtgKTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPD0gNzsgKytpKSB7CisgICAgICAgICAgICBwcmludChgICAgIGlmICgoeCAm
IHVjaGFyKDEgPDwgJHs3IC0gaX0pKSAhPSAwKWApOworICAgICAgICAgICAgcHJpbnQoYCAgICAg
ICAgcmV0dXJuICR7aX07YCk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4g
ODtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgcHJpbnQoYHVpbnQgZmlyc3RiaXRo
aWdoKHVzaG9ydCB4KSB7YCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDE1OyArK2kp
IHsKKyAgICAgICAgICAgIHByaW50KGAgICAgaWYgKCh4ICYgdXNob3J0KDEgPDwgJHsxNSAtIGl9
KSkgIT0gMClgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgIHJldHVybiAke2l9O2ApOwor
ICAgICAgICB9CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiAxNjtgKTsKKyAgICAgICAg
cHJpbnQoYH1gKTsKKyAgICAgICAgcHJpbnQoYHVpbnQgZmlyc3RiaXRoaWdoKHVpbnQgeCkge2Ap
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAzMTsgKytpKSB7CisgICAgICAgICAgICBw
cmludChgICAgIGlmICgoeCAmIHVpbnQoMSA8PCAkezMxIC0gaX0pKSAhPSAwKWApOworICAgICAg
ICAgICAgcHJpbnQoYCAgICAgICAgcmV0dXJuICR7aX07YCk7CisgICAgICAgIH0KKyAgICAgICAg
cHJpbnQoYCAgICByZXR1cm4gMzI7YCk7CisgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIHBy
aW50KGB1aW50IGZpcnN0Yml0aGlnaChjaGFyIHgpIHtgKTsKKyAgICAgICAgcHJpbnQoYCAgICBy
ZXR1cm4gZmlyc3RiaXRoaWdoKHVjaGFyKHgpKTtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAg
ICAgICAgcHJpbnQoYHVpbnQgZmlyc3RiaXRoaWdoKHNob3J0IHgpIHtgKTsKKyAgICAgICAgcHJp
bnQoYCAgICByZXR1cm4gZmlyc3RiaXRoaWdoKHVzaG9ydCh4KSk7YCk7CisgICAgICAgIHByaW50
KGB9YCk7CisgICAgICAgIHByaW50KGB1aW50IGZpcnN0Yml0aGlnaChpbnQgeCkge2ApOworICAg
ICAgICBwcmludChgICAgIHJldHVybiBmaXJzdGJpdGhpZ2godWludCh4KSk7YCk7CisgICAgICAg
IHByaW50KGB9YCk7CisgICAgICAgIHByaW50KGB1aW50IGZpcnN0Yml0bG93KHVjaGFyIHgpIHtg
KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gNzsgKytpKSB7CisgICAgICAgICAgICBw
cmludChgICAgIGlmICgoeCAmIHVjaGFyKDEgPDwgJHtpfSkpICE9IDApYCk7CisgICAgICAgICAg
ICBwcmludChgICAgICAgICByZXR1cm4gJHs3IC0gaX07YCk7CisgICAgICAgIH0KKyAgICAgICAg
cHJpbnQoYCAgICByZXR1cm4gODtgKTsKKyAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgcHJp
bnQoYHVpbnQgZmlyc3RiaXRsb3codXNob3J0IHgpIHtgKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPD0gMTU7ICsraSkgeworICAgICAgICAgICAgcHJpbnQoYCAgICBpZiAoKHggJiB1c2hv
cnQoMSA8PCAke2l9KSkgIT0gMClgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgIHJldHVy
biAkezE1IC0gaX07YCk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gMTY7
YCk7CisgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIHByaW50KGB1aW50IGZpcnN0Yml0bG93
KHVpbnQgeCkge2ApOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAzMTsgKytpKSB7Cisg
ICAgICAgICAgICBwcmludChgICAgIGlmICgoeCAmIHVpbnQoMSA8PCAke2l9KSkgIT0gMClgKTsK
KyAgICAgICAgICAgIHByaW50KGAgICAgICAgIHJldHVybiAkezMxIC0gaX07YCk7CisgICAgICAg
IH0KKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gMzI7YCk7CisgICAgICAgIHByaW50KGB9YCk7
CisgICAgICAgIHByaW50KGB1aW50IGZpcnN0Yml0bG93KGNoYXIgeCkge2ApOworICAgICAgICBw
cmludChgICAgIHJldHVybiBmaXJzdGJpdGxvdyh1Y2hhcih4KSk7YCk7CisgICAgICAgIHByaW50
KGB9YCk7CisgICAgICAgIHByaW50KGB1aW50IGZpcnN0Yml0bG93KHNob3J0IHgpIHtgKTsKKyAg
ICAgICAgcHJpbnQoYCAgICByZXR1cm4gZmlyc3RiaXRsb3codXNob3J0KHgpKTtgKTsKKyAgICAg
ICAgcHJpbnQoYH1gKTsKKyAgICAgICAgcHJpbnQoYHVpbnQgZmlyc3RiaXRsb3coaW50IHgpIHtg
KTsKKyAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gZmlyc3RiaXRsb3codWludCh4KSk7YCk7Cisg
ICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIGZvciAodmFyIGZ1bmN0aW9uTmFtZSBvZiBbYGZp
cnN0Yml0aGlnaGAsIGBmaXJzdGJpdGxvd2BdKSB7CisgICAgICAgICAgICBmb3IgKHZhciB0eXBl
IG9mIFtgdWNoYXJgLCBgdXNob3J0YCwgYHVpbnRgLCBgY2hhcmAsIGBzaG9ydGAsIGBpbnRgXSkg
eworICAgICAgICAgICAgICAgIGZvciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAg
ICAgICAgICAgICAgIHByaW50KGB1aW50JHtzaXplfSAke2Z1bmN0aW9uTmFtZX0oJHt0eXBlfSR7
c2l6ZX0geCkge2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHVpbnQke3NpemV9
IHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7aX1d
ID0gJHtmdW5jdGlvbk5hbWV9KHhbJHtpfV0pO2ApOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJvdy1t
YWpvciwgc28gdGhlIGZpcnN0IGluZGV4IHNlbGVjdHMgd2hpY2ggcm93LCBhbmQgdGhlIHNlY29u
ZCBpbmRleCBzZWxlY3RzIHdoaWNoIGNvbHVtbgorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtg
aGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBkZXRlcm1pbmFu
dCgke3R5cGV9IHgpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHg7YCk7Cisg
ICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gZGV0ZXJt
aW5hbnQoJHt0eXBlfTJ4MiB4KSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiB4
WzBdWzBdICogeFsxXVsxXSAtIHhbMF1bMV0gKiB4WzFdWzBdO2ApOworICAgICAgICAgICAgcHJp
bnQoYH1gKTsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IGRldGVybWluYW50KCR7dHlwZX0z
eDMgeCkge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4geFswXVswXSAqIHhbMV1b
MV0gKiB4WzJdWzJdICtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgICAgICAgIHhbMF1bMV0g
KiB4WzFdWzJdICogeFsyXVswXSArYCk7CisgICAgICAgICAgICBwcmludChgICAgICAgICAgICB4
WzBdWzJdICogeFsxXVswXSAqIHhbMl1bMV0gLWApOworICAgICAgICAgICAgcHJpbnQoYCAgICAg
ICAgICAgeFsyXVswXSAqIHhbMV1bMV0gKiB4WzBdWzJdIC1gKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgICAgICAgIHhbMl1bMV0gKiB4WzFdWzJdICogeFswXVswXSAtYCk7CisgICAgICAgICAg
ICBwcmludChgICAgICAgICAgICB4WzJdWzJdICogeFsxXVswXSAqIHhbMF1bMV07YCk7CisgICAg
ICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gZGV0ZXJtaW5h
bnQoJHt0eXBlfTR4NCB4KSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0gcmVz
dWx0O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9M3gzIG1pbm9yO2ApOworICAg
ICAgICAgICAgcHJpbnQoYCAgICBtaW5vclswXVswXSA9IHhbMV1bMV07YCk7CisgICAgICAgICAg
ICBwcmludChgICAgIG1pbm9yWzBdWzFdID0geFsxXVsyXTtgKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgbWlub3JbMF1bMl0gPSB4WzFdWzNdO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICBt
aW5vclsxXVswXSA9IHhbMl1bMV07YCk7CisgICAgICAgICAgICBwcmludChgICAgIG1pbm9yWzFd
WzFdID0geFsyXVsyXTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgbWlub3JbMV1bMl0gPSB4
WzJdWzNdO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICBtaW5vclsyXVswXSA9IHhbM11bMV07
YCk7CisgICAgICAgICAgICBwcmludChgICAgIG1pbm9yWzJdWzFdID0geFszXVsyXTtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgbWlub3JbMl1bMl0gPSB4WzNdWzNdO2ApOworICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXN1bHQgPSByZXN1bHQgKyB4WzBdWzBdICogZGV0ZXJtaW5hbnQobWlu
b3IpO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICBtaW5vclswXVswXSA9IHhbMV1bMF07YCk7
CisgICAgICAgICAgICBwcmludChgICAgIG1pbm9yWzBdWzFdID0geFsxXVsyXTtgKTsKKyAgICAg
ICAgICAgIHByaW50KGAgICAgbWlub3JbMF1bMl0gPSB4WzFdWzNdO2ApOworICAgICAgICAgICAg
cHJpbnQoYCAgICBtaW5vclsxXVswXSA9IHhbMl1bMF07YCk7CisgICAgICAgICAgICBwcmludChg
ICAgIG1pbm9yWzFdWzFdID0geFsyXVsyXTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgbWlu
b3JbMV1bMl0gPSB4WzJdWzNdO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICBtaW5vclsyXVsw
XSA9IHhbM11bMF07YCk7CisgICAgICAgICAgICBwcmludChgICAgIG1pbm9yWzJdWzFdID0geFsz
XVsyXTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgbWlub3JbMl1bMl0gPSB4WzNdWzNdO2Ap
OworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQgPSByZXN1bHQgLSB4WzBdWzFdICogZGV0
ZXJtaW5hbnQobWlub3IpO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICBtaW5vclswXVswXSA9
IHhbMV1bMF07YCk7CisgICAgICAgICAgICBwcmludChgICAgIG1pbm9yWzBdWzFdID0geFsxXVsx
XTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgbWlub3JbMF1bMl0gPSB4WzFdWzNdO2ApOwor
ICAgICAgICAgICAgcHJpbnQoYCAgICBtaW5vclsxXVswXSA9IHhbMl1bMF07YCk7CisgICAgICAg
ICAgICBwcmludChgICAgIG1pbm9yWzFdWzFdID0geFsyXVsxXTtgKTsKKyAgICAgICAgICAgIHBy
aW50KGAgICAgbWlub3JbMV1bMl0gPSB4WzJdWzNdO2ApOworICAgICAgICAgICAgcHJpbnQoYCAg
ICBtaW5vclsyXVswXSA9IHhbM11bMF07YCk7CisgICAgICAgICAgICBwcmludChgICAgIG1pbm9y
WzJdWzFdID0geFszXVsxXTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgbWlub3JbMl1bMl0g
PSB4WzNdWzNdO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQgPSByZXN1bHQgKyB4
WzBdWzJdICogZGV0ZXJtaW5hbnQobWlub3IpO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICBt
aW5vclswXVswXSA9IHhbMV1bMF07YCk7CisgICAgICAgICAgICBwcmludChgICAgIG1pbm9yWzBd
WzFdID0geFsxXVsxXTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgbWlub3JbMF1bMl0gPSB4
WzFdWzJdO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICBtaW5vclsxXVswXSA9IHhbMl1bMF07
YCk7CisgICAgICAgICAgICBwcmludChgICAgIG1pbm9yWzFdWzFdID0geFsyXVsxXTtgKTsKKyAg
ICAgICAgICAgIHByaW50KGAgICAgbWlub3JbMV1bMl0gPSB4WzJdWzJdO2ApOworICAgICAgICAg
ICAgcHJpbnQoYCAgICBtaW5vclsyXVswXSA9IHhbM11bMF07YCk7CisgICAgICAgICAgICBwcmlu
dChgICAgIG1pbm9yWzJdWzFdID0geFszXVsxXTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAg
bWlub3JbMl1bMl0gPSB4WzNdWzJdO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQg
PSByZXN1bHQgLSB4WzBdWzNdICogZGV0ZXJtaW5hbnQobWlub3IpO2ApOworICAgICAgICAgICAg
cHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAg
ICAgICAgfQorICAgICAgICBwcmludCgpOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlw
ZSBvZiBbYHVjaGFyNGAsIGB1c2hvcnQ0YCwgYHVpbnQ0YCwgYGNoYXI0YCwgYHNob3J0NGAsIGBp
bnQ0YCwgYGhhbGY0YCwgYGZsb2F0NGBdKSB7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBk
c3QoJHt0eXBlfSBzcmMwLCAke3R5cGV9IHNyYzEpIHtgKTsKKyAgICAgICAgICAgIHByaW50KGAg
ICAgJHt0eXBlfSByZXN1bHQ7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC54ID0g
MTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0LnkgPSBzcmMwLnkgKiBzcmMxLnk7
YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC56ID0gc3JjMC56O2ApOworICAgICAg
ICAgICAgcHJpbnQoYCAgICByZXN1bHQudyA9IHNyYzEudztgKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAg
IH0KKyAgICAgICAgcHJpbnQoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIHR5cGUgb2Yg
W2BoYWxmYCwgYGZsb2F0YF0pIHsKKyAgICAgICAgICAgIHByaW50KGAke3R5cGV9IGRpc3RhbmNl
KCR7dHlwZX0geCwgJHt0eXBlfSB5KSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVy
biBsZW5ndGgoeCAtIHkpO2ApOworICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAg
IGZvciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoYCR7
dHlwZX0gZGlzdGFuY2UoJHt0eXBlfSR7c2l6ZX0geCwgJHt0eXBlfSR7c2l6ZX0geSkge2ApOwor
ICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIGxlbmd0aCh4IC0geSk7YCk7CisgICAg
ICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBwcmludCgpOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYGhhbGYzYCwg
YGZsb2F0M2BdKSB7CisgICAgICAgICAgICBwcmludChgJHt0eXBlfSBjcm9zcygke3R5cGV9IHUs
ICR7dHlwZX0gdikge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9IHJlc3VsdDtg
KTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0LnggPSB1LnkgKiB2LnogLSB1LnogKiB2
Lnk7YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdC55ID0gdS56ICogdi54IC0gdS54
ICogdi56O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQueiA9IHUueCAqIHYueSAt
IHUueSAqIHYueDtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsK
KyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQoKTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWlu
dGAsIGBjaGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKKyAgICAgICAg
ICAgIHByaW50KGAke3R5cGV9IGRvdCgke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOworICAgICAg
ICAgICAgcHJpbnQoYCAgICByZXR1cm4gYSAqIGI7YCk7CisgICAgICAgICAgICBwcmludChgfWAp
OworICAgICAgICAgICAgZm9yICh2YXIgc2l6ZSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAg
ICAgICBwcmludChgJHt0eXBlfSBkb3QoJHt0eXBlfSR7c2l6ZX0gYSwgJHt0eXBlfSR7c2l6ZX0g
Yikge2ApOworICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSByZXN1bHQgPSAwO2Ap
OworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0ID0gcmVzdWx0ICsgYVske2l9XSAqIGJb
JHtpfV07YCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50KGAgICAg
cmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHByaW50KCk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHZhciB0eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICBmb3IgKHZhciBz
aXplIG9mIFtgYCwgYDJgLCBgM2AsIGA0YF0pIHsKKyAgICAgICAgICAgICAgICBwcmludChgJHt0
eXBlfSR7c2l6ZX0gZmFjZWZvcndhcmQoJHt0eXBlfSR7c2l6ZX0gbiwgJHt0eXBlfSR7c2l6ZX0g
aSwgJHt0eXBlfSR7c2l6ZX0gbmcpIHtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgIHJl
dHVybiAtbiAqIHNpZ24oZG90KGksIG5nKSk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1g
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcmludCgpOworICAgICAgICAK
KyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAg
ICAgZm9yICh2YXIgc2l6ZSBvZiBbYGAsIGAyYCwgYDNgLCBgNGBdKSB7CisgICAgICAgICAgICAg
ICAgcHJpbnQoYCR7dHlwZX0gbGVuZ3RoKCR7dHlwZX0ke3NpemV9IHgpIHtgKTsKKyAgICAgICAg
ICAgICAgICBwcmludChgICAgIHJldHVybiBzcXJ0KGRvdCh4LCB4KSk7YCk7CisgICAgICAgICAg
ICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcmlu
dCgpOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRg
XSkgeworICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX00IGxpdCgke3R5cGV9IG5fZG90X2wsICR7
dHlwZX0gbl9kb3RfaCwgJHt0eXBlfSBtKSB7YCk7CisgICAgICAgICAgICBwcmludChgICAgICR7
dHlwZX0gYW1iaWVudCA9IDE7YCk7CisgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0gZGlm
ZnVzZSA9IG1heCgwLCBuX2RvdF9sKTtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBl
fSBzcGVjdWxhciA9IG5fZG90X2wgPCAwIHx8IG5fZG90X2ggPCAwID8gMCA6IG5fZG90X2ggKiBt
O2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9NCByZXN1bHQ7YCk7CisgICAgICAg
ICAgICBwcmludChgICAgIHJlc3VsdC54ID0gYW1iaWVudDtgKTsKKyAgICAgICAgICAgIHByaW50
KGAgICAgcmVzdWx0LnkgPSBkaWZmdXNlO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1
bHQueiA9IHNwZWN1bGFyO2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHQudyA9IDE7
YCk7CisgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAg
ICBwcmludChgfWApOworICAgICAgICB9CisgICAgICAgIHByaW50KCk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHZhciB0eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICBm
b3IgKHZhciBzaXplIG9mIFtgYCwgYDJgLCBgM2AsIGA0YF0pIHsKKyAgICAgICAgICAgICAgICBw
cmludChgJHt0eXBlfSR7c2l6ZX0gbm9ybWFsaXplKCR7dHlwZX0ke3NpemV9IHgpIHtgKTsKKyAg
ICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiB4IC8gbGVuZ3RoKHgpO2ApOworICAgICAg
ICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cHJpbnQoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2BoYWxmYCwgYGZs
b2F0YF0pIHsKKyAgICAgICAgICAgIGZvciAodmFyIHNpemUgb2YgW2BgLCBgMmAsIGAzYCwgYDRg
XSkgeworICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtzaXplfSByZWZsZWN0KCR7dHlw
ZX0ke3NpemV9IGksICR7dHlwZX0ke3NpemV9IG4pIHtgKTsKKyAgICAgICAgICAgICAgICBwcmlu
dChgICAgIHJldHVybiBpIC0gMiAqIG4gKiBkb3QoaSwgbik7YCk7CisgICAgICAgICAgICAgICAg
cHJpbnQoYH1gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcmludCgpOwor
ICAgICAgICAKKyAgICAgICAgLy8gT3BlbkdMIEVTIHYzLjMwIHNlY3Rpb24gOC40CisgICAgICAg
IGZvciAodmFyIHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKKyAgICAgICAgICAgIGZvciAo
dmFyIHNpemUgb2YgW2BgLCBgMmAsIGAzYCwgYDRgXSkgeworICAgICAgICAgICAgICAgIHByaW50
KGAke3R5cGV9JHtzaXplfSByZWZyYWN0KCR7dHlwZX0ke3NpemV9IGksICR7dHlwZX0ke3NpemV9
IG4sICR7dHlwZX0gZXRhKSB7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9
JHtzaXplfSByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9IGsg
PSAxIC0gZXRhICogZXRhICogKDEgLSBkb3QobiwgaSkgKiBkb3QobiwgaSkpO2ApOworICAgICAg
ICAgICAgICAgIHByaW50KGAgICAgaWYgKGsgPCAwKWApOworICAgICAgICAgICAgICAgIHByaW50
KGAgICAgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICBy
ZXR1cm4gZXRhICogaSAtIChldGEgKiBkb3QobiwgaSkgKyBzcXJ0KGspKSAqIG47YCk7CisgICAg
ICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBwcmludCgpOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYGhhbGZgLCBg
ZmxvYXRgXSkgeworICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gdHJhbnNwb3NlKCR7dHlwZX0g
eCkge2ApOworICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4geDtgKTsKKyAgICAgICAgICAg
IHByaW50KGB9YCk7CisgICAgICAgICAgICBmb3IgKHZhciBpIG9mIFsyLCAzLCA0XSkgeworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGogb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAg
ICAgIHByaW50KGAke3R5cGV9JHtpfXgke2p9IHRyYW5zcG9zZSgke3R5cGV9JHtqfXgke2l9IHgp
IHtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9JHtpfXgke2p9IHJl
c3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBpOyArK20p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgajsgKytuKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1bHRbJHttfV1bJHtu
fV0gPSB4WyR7bn1dWyR7bX1dO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJl
c3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQoKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodmFyIHJlc3VsdFR5cGUgb2YgW2BpbnRgLCBgdWludGAsIGBmbG9hdGBd
KSB7CisgICAgICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgaW50YCwgYHVpbnRgLCBgZmxvYXRg
XSkgeworICAgICAgICAgICAgICAgIGlmICh0eXBlID09IHJlc3VsdFR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcHJpbnQoYCR7cmVzdWx0VHlwZX0gYXMke3Jlc3VsdFR5cGV9KCR7dHlwZX0g
eCkge2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiB4O2ApOworICAg
ICAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgICAgIH0gZWxzZSAgaWYg
KHJlc3VsdFR5cGUgPT0gYGludGAgJiYgdHlwZSA9PSBgdWludGAgfHwgcmVzdWx0VHlwZSA9PSBg
dWludGAgJiYgdHlwZSA9PSBgaW50YCkgeworICAgICAgICAgICAgICAgICAgICBwcmludChgJHty
ZXN1bHRUeXBlfSBhcyR7cmVzdWx0VHlwZX0oJHt0eXBlfSB4KSB7YCk7CisgICAgICAgICAgICAg
ICAgICAgIHByaW50KGAgICAgcmV0dXJuICR7cmVzdWx0VHlwZX0oeCk7YCk7CisgICAgICAgICAg
ICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3Jlc3VsdFR5cGV9IGFzJHtyZXN1bHRUeXBlfSgk
e3R5cGV9KTtgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
c2l6ZSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmVz
dWx0VHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7cmVzdWx0VHlwZX0k
e3NpemV9IGFzJHtyZXN1bHRUeXBlfSgke3R5cGV9JHtzaXplfSB4KSB7YCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiB4O2ApOworICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHByaW50KGAke3Jlc3VsdFR5cGV9JHtzaXplfSBhcyR7cmVzdWx0VHlw
ZX0oJHt0eXBlfSR7c2l6ZX0geCkge2ApOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQo
YCAgICAke3Jlc3VsdFR5cGV9JHtzaXplfSByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7aX1dID0gYXMke3Jlc3VsdFR5cGV9KHhbJHtp
fV0pO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBgZmxvYXRgICYmIHR5cGUgPT0gYGZsb2F0
YCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIG9mIFsyLCAzLCA0XSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSByZXN1bHRUeXBlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3Jlc3VsdFR5cGV9JHtpfXgke2p9IGFzJHty
ZXN1bHRUeXBlfSgke3R5cGV9JHtpfXgke2p9IHgpIHtgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4geDtgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgJHtyZXN1bHRUeXBl
fSR7aX14JHtqfSBhcyR7cmVzdWx0VHlwZX0oJHt0eXBlfSR7aX14JHtqfSB4KSB7YCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHtyZXN1bHRUeXBlfSR7aX14
JHtqfSByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IG0gPSAwOyBtIDwgaTsgKyttKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBuID0gMDsgbiA8IGo7ICsrbikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7bX1dWyR7bn1dID0gYXMke3Jlc3Vs
dFR5cGV9KHhbJHttfV1bJHtufV0pO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cHJpbnQoKTsKKyAgICAgICAgCisgICAgICAgIHByaW50KGBuYXRpdmUgZmxvYXQgZjE2dG9mMzIo
dWludCk7YCk7CisgICAgICAgIHByaW50KGBuYXRpdmUgdWludCBmMzJ0b2YxNihmbG9hdCk7YCk7
CisgICAgICAgIGZvciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICBwcmlu
dChgZmxvYXQke3NpemV9IGYxNnRvZjMyKHVpbnQke3NpemV9IHgpIHtgKTsKKyAgICAgICAgICAg
IHByaW50KGAgICAgZmxvYXQke3NpemV9IHJlc3VsdDtgKTsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1
bHRbJHtpfV0gPSBmMTZ0b2YzMih4WyR7aX1dKTtgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7
CisgICAgICAgICAgICBwcmludChgdWludCR7c2l6ZX0gZjMydG9mMTYoZmxvYXQke3NpemV9IHgp
IHtgKTsKKyAgICAgICAgICAgIHByaW50KGAgICAgdWludCR7c2l6ZX0gcmVzdWx0O2ApOworICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBwcmludChgICAgIHJlc3VsdFske2l9XSA9IGYzMnRvZjE2KHhbJHtpfV0pO2ApOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAg
ICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgfQorICAgICAgICBwcmludCgpOworICAgICAgICAK
KyAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEFsbE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5j
KCk7YCk7CisgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBEZXZpY2VNZW1vcnlCYXJyaWVyV2l0
aEdyb3VwU3luYygpO2ApOworICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR3JvdXBNZW1vcnlC
YXJyaWVyV2l0aEdyb3VwU3luYygpO2ApOworICAgICAgICBwcmludCgpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYHVjaGFyYCwgYHVzaG9ydGAsIGB1aW50YCwgYGNoYXJg
LCBgc2hvcnRgLCBgaW50YCwgYGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAgcHJpbnQo
YCR7dHlwZX0gbXVsKCR7dHlwZX0geCwgJHt0eXBlfSB5KSB7YCk7CisgICAgICAgICAgICBwcmlu
dChgICAgIHJldHVybiB4ICogeTtgKTsKKyAgICAgICAgICAgIHByaW50KGB9YCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRg
LCBgdWludGAsIGBjaGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKKyAg
ICAgICAgICAgIGZvciAodmFyIHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAg
cHJpbnQoYCR7dHlwZX0ke3NpemV9IG11bCgke3R5cGV9IHgsICR7dHlwZX0ke3NpemV9IHkpIHtg
KTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke3NpemV9IHJlc3VsdDtgKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske2l9XSA9IHggKiB5WyR7aX1dO2ApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiByZXN1
bHQ7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICBwcmlu
dChgJHt0eXBlfSR7c2l6ZX0gbXVsKCR7dHlwZX0ke3NpemV9IHgsICR7dHlwZX0geSkge2ApOwor
ICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7c2l6ZX0gcmVzdWx0O2ApOworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7aX1dID0geFske2l9XSAqIHk7YCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3VsdDtg
KTsKKyAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBdKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBpIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAgICAgICAg
IGZvciAodmFyIGogb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAk
e3R5cGV9JHtpfXgke2p9IG11bCgke3R5cGV9IHgsICR7dHlwZX0ke2l9eCR7an0geSkge2ApOwor
ICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0O2Ap
OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IGk7ICsrbSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBqOyArK24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJlc3VsdFske219XVske259XSA9IHgg
KiB5WyR7bX1dWyR7bn1dO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHJlc3Vs
dDtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHJpbnQoYCR7dHlwZX0ke2l9eCR7an0gbXVsKCR7dHlwZX0ke2l9eCR7an0geCwgJHt0eXBl
fSB5KSB7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7aX14JHtq
fSByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgaTsg
KyttKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGo7ICsr
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7bX1d
WyR7bn1dID0geFske219XVske259XSAqIHk7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICBy
ZXR1cm4gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgfWApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zm9yICh2YXIgdHlwZSBvZiBbYHVjaGFyYCwgYHVzaG9ydGAsIGB1aW50YCwgYGNoYXJgLCBgc2hv
cnRgLCBgaW50YCwgYGhhbGZgLCBgZmxvYXRgXSkgeworICAgICAgICAgICAgZm9yICh2YXIgc2l6
ZSBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBtdWwoJHt0
eXBlfSR7c2l6ZX0geCwgJHt0eXBlfSR7c2l6ZX0geSkge2ApOworICAgICAgICAgICAgICAgIHBy
aW50KGAgICAgcmV0dXJuIGRvdCh4LCB5KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgfWAp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0
eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpIG9mIFsy
LCAzLCA0XSkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGogb2YgWzIsIDMsIDRdKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtqfSBtdWwoJHt0eXBlfSR7aX0geCwg
JHt0eXBlfSR7aX14JHtqfSB5KSB7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAg
JHt0eXBlfSR7an0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0g
MDsgbSA8IGo7ICsrbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXN1
bHRbJHttfV0gPSAwO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7
IG4gPCBpOyArK24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJl
c3VsdFske219XSArPSB4WyR7bn1dICogeVske259XVske219XTtgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBw
cmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGB9
YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtpfSBtdWwoJHt0eXBlfSR7
aX14JHtqfSB4LCAke3R5cGV9JHtqfSB5KSB7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50
KGAgICAgJHt0eXBlfSR7aX0gcmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBtID0gMDsgbSA8IGk7ICsrbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAg
ICByZXN1bHRbJHttfV0gPSAwO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
biA9IDA7IG4gPCBqOyArK24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChg
ICAgIHJlc3VsdFske219XSArPSB4WyR7bX1dWyR7bn1dICogeVske259XTtgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBwcmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgIHBy
aW50KGB9YCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBdKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciBpIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGogb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsg
b2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7
aX14JHtrfSBtdWwoJHt0eXBlfSR7aX14JHtqfSB4LCAke3R5cGV9JHtqfXgke2t9IHkpIHtgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSR7aX14JHtrfSByZXN1
bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IGk7ICsr
cCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgazsg
KytyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgcmVzdWx0
WyR7cH1dWyR7cn1dID0gMDtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgcSA9IDA7IHEgPCBqOyArK3EpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7cH1dWyR7cn1dICs9IHhbJHtwfV1bJHtxfV0gKiB5
WyR7cX1dWyR7cn1dO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcmludCgp
OworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdHlwZSBvZiBbYHVpbnRgLCBgaW50YF0pIHsK
KyAgICAgICAgICAgIGZvciAodmFyIGZ1bmN0aW9uTmFtZSBvZiBbYEFkZGAsIGBBbmRgLCBgRXhj
aGFuZ2VgLCBgTWF4YCwgYE1pbmAsIGBPcmAsIGBYb3JgXSkgeworICAgICAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZCR7ZnVuY3Rpb25OYW1lfSh0aHJlYWQgYXRvbWlj
XyR7dHlwZX0qLCAke3R5cGV9LCB0aHJlYWQgJHt0eXBlfSopO2ApOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdl
KHRocmVhZCBhdG9taWNfJHt0eXBlfSosICR7dHlwZX0sICR7dHlwZX0sIHRocmVhZCAke3R5cGV9
Kik7YCk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQoKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodmFyIHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGAsIGBjaGFyYCwgYHNob3J0
YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKKyAgICAgICAgICAgIGZvciAodmFyIGxlbmd0
aCBvZiBbYGAsIGAyYCwgYDNgLCBgNGBdKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShUZXh0dXJlMUQ8JHt0eXBlfSR7bGVuZ3RofT4sIHNh
bXBsZXIsIGZsb2F0IGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZl
ICR7dHlwZX0ke2xlbmd0aH0gU2FtcGxlKFRleHR1cmUxRDwke3R5cGV9JHtsZW5ndGh9Piwgc2Ft
cGxlciwgZmxvYXQgbG9jYXRpb24sIGludCBvZmZzZXQpO2ApOworICAgICAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFRleHR1cmUxRDwke3R5cGV9JHtsZW5n
dGh9PiwgaW50MiBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAk
e3R5cGV9JHtsZW5ndGh9IExvYWQoVGV4dHVyZTFEPCR7dHlwZX0ke2xlbmd0aH0+LCBpbnQyIGxv
Y2F0aW9uLCBpbnQgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZv
aWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlMUQ8JHt0eXBlfSR7bGVuZ3RofT4sIHVpbnQgTWlwTGV2
ZWwsIHRocmVhZCB1aW50KiBXaWR0aCwgdGhyZWFkIHVpbnQqIE51bWJlck9mTGV2ZWxzKTtgKTsK
KyAgICAgICAgICAgICAgICBwcmludCgpOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUg
JHt0eXBlfSR7bGVuZ3RofSBTYW1wbGUoVGV4dHVyZTFEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4s
IHNhbXBsZXIsIGZsb2F0MiBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShUZXh0dXJlMURBcnJheTwke3R5cGV9JHtsZW5n
dGh9Piwgc2FtcGxlciwgZmxvYXQyIGxvY2F0aW9uLCBpbnQgb2Zmc2V0KTtgKTsKKyAgICAgICAg
ICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gTG9hZChUZXh0dXJlMURBcnJh
eTwke3R5cGV9JHtsZW5ndGh9PiwgaW50MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICAgICAg
cHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoVGV4dHVyZTFEQXJyYXk8JHt0eXBl
fSR7bGVuZ3RofT4sIGludDMgbG9jYXRpb24sIGludCBvZmZzZXQpO2ApOworICAgICAgICAgICAg
ICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmUxREFycmF5PCR7dHlw
ZX0ke2xlbmd0aH0+LCB1aW50IE1pcExldmVsLCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVhZCB1
aW50KiBFbGVtZW50cywgdGhyZWFkIHVpbnQqIE51bWJlck9mTGV2ZWxzKTtgKTsKKyAgICAgICAg
ICAgICAgICBwcmludCgpOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7
bGVuZ3RofSBTYW1wbGUoVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9h
dDIgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7
bGVuZ3RofSBTYW1wbGUoVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9h
dDIgbG9jYXRpb24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0
aXZlICR7dHlwZX0ke2xlbmd0aH0gU2FtcGxlQmlhcyhUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3Ro
fT4sIHNhbXBsZXIsIGZsb2F0MiBsb2NhdGlvbiwgZmxvYXQgQmlhcyk7YCk7CisgICAgICAgICAg
ICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZUJpYXMoVGV4dHVyZTJE
PCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24sIGZsb2F0IEJpYXMs
IGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0k
e2xlbmd0aH0gU2FtcGxlR3JhZChUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3RofT4sIHNhbXBsZXIs
IGZsb2F0MiBsb2NhdGlvbiwgZmxvYXQyIEREWCwgZmxvYXQyIEREWSk7YCk7CisgICAgICAgICAg
ICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZUdyYWQoVGV4dHVyZTJE
PCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24sIGZsb2F0MiBERFgs
IGZsb2F0MiBERFksIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0
aXZlICR7dHlwZX0ke2xlbmd0aH0gU2FtcGxlTGV2ZWwoVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0
aH0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24sIGZsb2F0IExPRCk7YCk7CisgICAgICAgICAg
ICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZUxldmVsKFRleHR1cmUy
RDwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQyIGxvY2F0aW9uLCBmbG9hdCBMT0Qs
IGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX00
IEdhdGhlcihUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MiBsb2Nh
dGlvbik7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9NCBHYXRoZXIo
VGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24sIGlu
dDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX00IEdh
dGhlclJlZChUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MiBsb2Nh
dGlvbik7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9NCBHYXRoZXJS
ZWQoVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24s
IGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX00
IEdhdGhlckdyZWVuKFRleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQy
IGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX00IEdh
dGhlckdyZWVuKFRleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQyIGxv
Y2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAk
e3R5cGV9NCBHYXRoZXJCbHVlKFRleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwg
ZmxvYXQyIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlw
ZX00IEdhdGhlckJsdWUoVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9h
dDIgbG9jYXRpb24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0
aXZlICR7dHlwZX00IEdhdGhlckFscGhhKFRleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9Piwgc2Ft
cGxlciwgZmxvYXQyIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZl
ICR7dHlwZX00IEdhdGhlckFscGhhKFRleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxl
ciwgZmxvYXQyIGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICAgICAgcHJp
bnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0
aH0+LCBpbnQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7
dHlwZX0ke2xlbmd0aH0gTG9hZChUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3RofT4sIGludDMgbG9j
YXRpb24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZv
aWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3RofT4sIHVpbnQgTWlwTGV2
ZWwsIHRocmVhZCB1aW50KiBXaWR0aCwgdGhyZWFkIHVpbnQqIEhlaWdodCwgdGhyZWFkIHVpbnQq
IE51bWJlck9mTGV2ZWxzKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludCgpOworICAgICAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBTYW1wbGUoVGV4dHVyZTJEQXJy
YXk8JHt0eXBlfSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAg
ICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShUZXh0dXJl
MkRBcnJheTwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uLCBpbnQy
IG9mZnNldCk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5n
dGh9IFNhbXBsZUJpYXMoVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHNhbXBsZXIs
IGZsb2F0MyBsb2NhdGlvbiwgZmxvYXQgQmlhcyk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQo
YG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZUJpYXMoVGV4dHVyZTJEQXJyYXk8JHt0eXBl
fSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgZmxvYXQgQmlhcywgaW50MiBv
ZmZzZXQpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3Ro
fSBTYW1wbGVHcmFkKFRleHR1cmUyREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBm
bG9hdDMgbG9jYXRpb24sIGZsb2F0MiBERFgsIGZsb2F0MiBERFkpO2ApOworICAgICAgICAgICAg
ICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBTYW1wbGVHcmFkKFRleHR1cmUyREFy
cmF5PCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24sIGZsb2F0MiBE
RFgsIGZsb2F0MiBERFksIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChg
bmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gU2FtcGxlTGV2ZWwoVGV4dHVyZTJEQXJyYXk8JHt0eXBl
fSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgZmxvYXQgTE9EKTtgKTsKKyAg
ICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gU2FtcGxlTGV2ZWwo
VGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlv
biwgZmxvYXQgTE9ELCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSAke3R5cGV9NCBHYXRoZXIoVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHNh
bXBsZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSAke3R5cGV9NCBHYXRoZXIoVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHNhbXBs
ZXIsIGZsb2F0MyBsb2NhdGlvbiwgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyUmVkKFRleHR1cmUyREFycmF5PCR7dHlwZX0ke2xl
bmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyUmVkKFRleHR1cmUyREFycmF5PCR7dHlwZX0ke2xl
bmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAg
ICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX00IEdhdGhlckdyZWVuKFRleHR1cmUyREFy
cmF5PCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAg
ICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyR3JlZW4oVGV4dHVyZTJE
QXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgaW50MiBv
ZmZzZXQpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVy
Qmx1ZShUZXh0dXJlMkRBcnJheTwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQzIGxv
Y2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX00IEdhdGhl
ckJsdWUoVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MyBs
b2NhdGlvbiwgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUg
JHt0eXBlfTQgR2F0aGVyQWxwaGEoVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHNh
bXBsZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSAke3R5cGV9NCBHYXRoZXJBbHBoYShUZXh0dXJlMkRBcnJheTwke3R5cGV9JHtsZW5ndGh9Piwg
c2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICAg
ICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoVGV4dHVyZTJEQXJyYXk8JHt0
eXBlfSR7bGVuZ3RofT4sIGludDQgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgICAgIHByaW50
KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFRleHR1cmUyREFycmF5PCR7dHlwZX0ke2xl
bmd0aH0+LCBpbnQ0IGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICAgICAg
cHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7
bGVuZ3RofT4sIHVpbnQgTWlwTGV2ZWwsIHRocmVhZCB1aW50KiBXaWR0aCwgdGhyZWFkIHVpbnQq
IEhlaWdodCwgdGhyZWFkIHVpbnQqIEVsZW1lbnRzLCB0aHJlYWQgdWludCogTnVtYmVyT2ZMZXZl
bHMpO2ApOworICAgICAgICAgICAgICAgIHByaW50KCk7CisgICAgICAgICAgICAgICAgcHJpbnQo
YG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3Ro
fT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQo
YG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3Ro
fT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgaW50MyBvZmZzZXQpO2ApOworICAgICAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyKFRleHR1cmUzRDwke3R5cGV9JHts
ZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBw
cmludChgbmF0aXZlICR7dHlwZX00IEdhdGhlcihUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3RofT4s
IHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgaW50MyBvZmZzZXQpO2ApOworICAgICAgICAgICAg
ICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyUmVkKFRleHR1cmUzRDwke3R5cGV9JHts
ZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBw
cmludChgbmF0aXZlICR7dHlwZX00IEdhdGhlclJlZChUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3Ro
fT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgaW50MyBvZmZzZXQpO2ApOworICAgICAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyR3JlZW4oVGV4dHVyZTNEPCR7dHlw
ZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAgICAgICAg
ICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyR3JlZW4oVGV4dHVyZTNEPCR7dHlwZX0k
e2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24sIGludDMgb2Zmc2V0KTtgKTsKKyAg
ICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX00IEdhdGhlckJsdWUoVGV4dHVyZTNE
PCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAg
ICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyQmx1ZShUZXh0dXJlM0Q8JHt0
eXBlfSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgaW50MyBvZmZzZXQpO2Ap
OworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyQWxwaGEoVGV4
dHVyZTNEPCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOwor
ICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyQWxwaGEoVGV4dHVy
ZTNEPCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24sIGludDMgb2Zm
c2V0KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0g
TG9hZChUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3RofT4sIGludDQgbG9jYXRpb24pO2ApOworICAg
ICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFRleHR1cmUz
RDwke3R5cGV9JHtsZW5ndGh9PiwgaW50NCBsb2NhdGlvbiwgaW50MyBvZmZzZXQpO2ApOworICAg
ICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmUzRDwk
e3R5cGV9JHtsZW5ndGh9PiwgdWludCBNaXBMZXZlbCwgdGhyZWFkIHVpbnQqIFdpZHRoLCB0aHJl
YWQgdWludCogSGVpZ2h0LCB0aHJlYWQgdWludCogRGVwdGgsIHRocmVhZCB1aW50KiBOdW1iZXJP
ZkxldmVscyk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoKTsKKyAgICAgICAgICAgICAgICBw
cmludChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gU2FtcGxlKFRleHR1cmVDdWJlPCR7dHlwZX0k
e2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgICAg
IHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBTYW1wbGVCaWFzKFRleHR1cmVDdWJlPCR7
dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24sIGZsb2F0IEJpYXMpO2Ap
OworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBTYW1wbGVH
cmFkKFRleHR1cmVDdWJlPCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRp
b24sIGZsb2F0MyBERFgsIGZsb2F0MyBERFkpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBTYW1wbGVMZXZlbChUZXh0dXJlQ3ViZTwke3R5cGV9JHts
ZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdCBMT0QpO2ApOworICAgICAg
ICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyKFRleHR1cmVDdWJlPCR7dHlw
ZX0ke2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAgICAgICAg
ICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyUmVkKFRleHR1cmVDdWJlPCR7dHlwZX0k
e2xlbmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgICAg
IHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyR3JlZW4oVGV4dHVyZUN1YmU8JHt0eXBlfSR7
bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICAgICAg
cHJpbnQoYG5hdGl2ZSAke3R5cGV9NCBHYXRoZXJCbHVlKFRleHR1cmVDdWJlPCR7dHlwZX0ke2xl
bmd0aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyQWxwaGEoVGV4dHVyZUN1YmU8JHt0eXBlfSR7bGVu
Z3RofT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICAgICAgcHJp
bnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZUN1YmU8JHt0eXBlfSR7bGVuZ3Ro
fT4sIHVpbnQgTWlwTGV2ZWwsIHRocmVhZCB1aW50KiBXaWR0aCwgdGhyZWFkIHVpbnQqIEhlaWdo
dCwgdGhyZWFkIHVpbnQqIE51bWJlck9mTGV2ZWxzKTtgKTsKKyAgICAgICAgICAgICAgICBwcmlu
dCgpOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJX
VGV4dHVyZTFEPCR7dHlwZX0ke2xlbmd0aH0+LCB0aHJlYWQgdWludCogV2lkdGgpO2ApOworICAg
ICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTFE
PCR7dHlwZX0ke2xlbmd0aH0+LCB0aHJlYWQgZmxvYXQqIFdpZHRoKTtgKTsKKyAgICAgICAgICAg
ICAgICBwcmludChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gTG9hZChSV1RleHR1cmUxRDwke3R5
cGV9JHtsZW5ndGh9PiwgaW50IGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChg
bmF0aXZlIHZvaWQgU3RvcmUoUldUZXh0dXJlMUQ8JHt0eXBlfSR7bGVuZ3RofT4sICR7dHlwZX0k
e2xlbmd0aH0sIHVpbnQgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgICAgIHByaW50KCk7Cisg
ICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJl
MURBcnJheTwke3R5cGV9JHtsZW5ndGh9PiwgdGhyZWFkIHVpbnQqIFdpZHRoLCB0aHJlYWQgdWlu
dCogRWxlbWVudHMpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXRE
aW1lbnNpb25zKFJXVGV4dHVyZTFEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHRocmVhZCBmbG9h
dCogV2lkdGgsIHRocmVhZCB1aW50KiBFbGVtZW50cyk7YCk7CisgICAgICAgICAgICAgICAgcHJp
bnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoUldUZXh0dXJlMURBcnJheTwke3R5cGV9
JHtsZW5ndGh9PiwgaW50MiBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSB2b2lkIFN0b3JlKFJXVGV4dHVyZTFEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sICR7dHlw
ZX0ke2xlbmd0aH0sIHVpbnQyIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludCgp
OworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4
dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVhZCB1aW50
KiBIZWlnaHQpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1l
bnNpb25zKFJXVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LCB0aHJlYWQgZmxvYXQqIFdpZHRo
LCB0aHJlYWQgZmxvYXQqIEhlaWdodCk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoUldUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3RofT4sIGlu
dDIgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBTdG9y
ZShSV1RleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9PiwgJHt0eXBlfSR7bGVuZ3RofSwgdWludDIg
bG9jYXRpb24pO2ApOworICAgICAgICAgICAgICAgIHByaW50KCk7CisgICAgICAgICAgICAgICAg
cHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlMkRBcnJheTwke3R5cGV9
JHtsZW5ndGh9PiwgdGhyZWFkIHVpbnQqIFdpZHRoLCB0aHJlYWQgdWludCogSGVpZ2h0LCB0aHJl
YWQgdWludCogRWxlbWVudHMpO2ApOworICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9p
ZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHRocmVh
ZCBmbG9hdCogV2lkdGgsIHRocmVhZCBmbG9hdCogSGVpZ2h0LCB0aHJlYWQgZmxvYXQqIEVsZW1l
bnRzKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0g
TG9hZChSV1RleHR1cmUyREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LCBpbnQzIGxvY2F0aW9uKTtg
KTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgU3RvcmUoUldUZXh0dXJlMkRB
cnJheTwke3R5cGV9JHtsZW5ndGh9PiwgJHt0eXBlfSR7bGVuZ3RofSwgdWludDMgbG9jYXRpb24p
O2ApOworICAgICAgICAgICAgICAgIHByaW50KCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3RofT4sIHRo
cmVhZCB1aW50KiBXaWR0aCwgdGhyZWFkIHVpbnQqIEhlaWdodCwgdGhyZWFkIHVpbnQqIERlcHRo
KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhS
V1RleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9PiwgdGhyZWFkIGZsb2F0KiBXaWR0aCwgdGhyZWFk
IGZsb2F0KiBIZWlnaHQsIHRocmVhZCBmbG9hdCogRGVwdGgpO2ApOworICAgICAgICAgICAgICAg
IHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFJXVGV4dHVyZTNEPCR7dHlwZX0k
e2xlbmd0aH0+LCBpbnQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgbmF0
aXZlIHZvaWQgU3RvcmUoUldUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3RofT4sICR7dHlwZX0ke2xl
bmd0aH0sIHVpbnQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgICAgICBwcmludCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0eXBlIG9m
IFtgaGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0g
U2FtcGxlKFRleHR1cmVEZXB0aDJEPCR7dHlwZX0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24p
O2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZShUZXh0dXJlRGVw
dGgyRDwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQyIGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7
CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gU2FtcGxlQ21wKFRleHR1cmVEZXB0
aDJEPCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlLCBmbG9hdDIgbG9jYXRpb24sIGZs
b2F0IENvbXBhcmVWYWx1ZSk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0g
U2FtcGxlQ21wKFRleHR1cmVEZXB0aDJEPCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRl
LCBmbG9hdDIgbG9jYXRpb24sIGZsb2F0IENvbXBhcmVWYWx1ZSwgaW50MiBvZmZzZXQpO2ApOwor
ICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZUNtcExldmVsWmVybyhUZXh0
dXJlRGVwdGgyRDwke3R5cGV9PiwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSwgZmxvYXQyIGxvY2F0
aW9uLCBmbG9hdCBDb21wYXJlVmFsdWUpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAk
e3R5cGV9IFNhbXBsZUNtcExldmVsWmVybyhUZXh0dXJlRGVwdGgyRDwke3R5cGV9PiwgU2FtcGxl
ckNvbXBhcmlzb25TdGF0ZSwgZmxvYXQyIGxvY2F0aW9uLCBmbG9hdCBDb21wYXJlVmFsdWUsIGlu
dDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBTYW1wbGVC
aWFzKFRleHR1cmVEZXB0aDJEPCR7dHlwZX0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24sIGZs
b2F0IEJpYXMpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZUJp
YXMoVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIHNhbXBsZXIsIGZsb2F0MiBsb2NhdGlvbiwgZmxv
YXQgQmlhcywgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5
cGV9IFNhbXBsZUdyYWQoVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIHNhbXBsZXIsIGZsb2F0MiBs
b2NhdGlvbiwgZmxvYXQyIEREWCwgZmxvYXQyIEREWSk7YCk7CisgICAgICAgICAgICBwcmludChg
bmF0aXZlICR7dHlwZX0gU2FtcGxlR3JhZChUZXh0dXJlRGVwdGgyRDwke3R5cGV9Piwgc2FtcGxl
ciwgZmxvYXQyIGxvY2F0aW9uLCBmbG9hdDIgRERYLCBmbG9hdDIgRERZLCBpbnQyIG9mZnNldCk7
YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gU2FtcGxlTGV2ZWwoVGV4dHVy
ZURlcHRoMkQ8JHt0eXBlfT4sIHNhbXBsZXIsIGZsb2F0MiBsb2NhdGlvbiwgZmxvYXQgTE9EKTtg
KTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBTYW1wbGVMZXZlbChUZXh0dXJl
RGVwdGgyRDwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQyIGxvY2F0aW9uLCBmbG9hdCBMT0QsIGlu
dDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXIo
VGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIHNhbXBsZXIsIGZsb2F0MiBsb2NhdGlvbik7YCk7Cisg
ICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyKFRleHR1cmVEZXB0aDJEPCR7
dHlwZX0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXJSZWQoVGV4dHVyZURlcHRoMkQ8JHt0
eXBlfT4sIHNhbXBsZXIsIGZsb2F0MiBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICBwcmludChg
bmF0aXZlICR7dHlwZX0gR2F0aGVyUmVkKFRleHR1cmVEZXB0aDJEPCR7dHlwZX0+LCBzYW1wbGVy
LCBmbG9hdDIgbG9jYXRpb24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgJHt0eXBlfSBHYXRoZXJHcmVlbihUZXh0dXJlRGVwdGgyRDwke3R5cGV9Piwgc2FtcGxl
ciwgZmxvYXQyIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBl
fSBHYXRoZXJHcmVlbihUZXh0dXJlRGVwdGgyRDwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQyIGxv
Y2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlw
ZX0gR2F0aGVyQmx1ZShUZXh0dXJlRGVwdGgyRDwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQyIGxv
Y2F0aW9uKTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXJCbHVl
KFRleHR1cmVEZXB0aDJEPCR7dHlwZX0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24sIGludDIg
b2Zmc2V0KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXJBbHBo
YShUZXh0dXJlRGVwdGgyRDwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQyIGxvY2F0aW9uKTtgKTsK
KyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXJBbHBoYShUZXh0dXJlRGVw
dGgyRDwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQyIGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7
CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyQ21wKFRleHR1cmVEZXB0
aDJEPCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlLCBmbG9hdDIgbG9jYXRpb24sIGZs
b2F0IGNvbXBhcmVfdmFsdWUpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9
IEdhdGhlckNtcChUZXh0dXJlRGVwdGgyRDwke3R5cGV9PiwgU2FtcGxlckNvbXBhcmlzb25TdGF0
ZSwgZmxvYXQyIGxvY2F0aW9uLCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBpbnQyIG9mZnNldCk7YCk7
CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyQ21wUmVkKFRleHR1cmVE
ZXB0aDJEPCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlLCBmbG9hdDIgbG9jYXRpb24s
IGZsb2F0IGNvbXBhcmVfdmFsdWUpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5
cGV9IEdhdGhlckNtcFJlZChUZXh0dXJlRGVwdGgyRDwke3R5cGV9PiwgU2FtcGxlckNvbXBhcmlz
b25TdGF0ZSwgZmxvYXQyIGxvY2F0aW9uLCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBpbnQyIG9mZnNl
dCk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyQ21wR3JlZW4o
VGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIFNhbXBsZXJDb21wYXJpc29uU3RhdGUsIGZsb2F0MiBs
b2NhdGlvbiwgZmxvYXQgY29tcGFyZV92YWx1ZSk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0
aXZlICR7dHlwZX0gR2F0aGVyQ21wR3JlZW4oVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIFNhbXBs
ZXJDb21wYXJpc29uU3RhdGUsIGZsb2F0MiBsb2NhdGlvbiwgZmxvYXQgY29tcGFyZV92YWx1ZSwg
aW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IEdhdGhl
ckNtcEJsdWUoVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIFNhbXBsZXJDb21wYXJpc29uU3RhdGUs
IGZsb2F0MiBsb2NhdGlvbiwgZmxvYXQgY29tcGFyZV92YWx1ZSk7YCk7CisgICAgICAgICAgICBw
cmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyQ21wQmx1ZShUZXh0dXJlRGVwdGgyRDwke3R5cGV9
PiwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSwgZmxvYXQyIGxvY2F0aW9uLCBmbG9hdCBjb21wYXJl
X3ZhbHVlLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlw
ZX0gR2F0aGVyQ21wQWxwaGEoVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIFNhbXBsZXJDb21wYXJp
c29uU3RhdGUsIGZsb2F0MiBsb2NhdGlvbiwgZmxvYXQgY29tcGFyZV92YWx1ZSk7YCk7CisgICAg
ICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyQ21wQWxwaGEoVGV4dHVyZURlcHRo
MkQ8JHt0eXBlfT4sIFNhbXBsZXJDb21wYXJpc29uU3RhdGUsIGZsb2F0MiBsb2NhdGlvbiwgZmxv
YXQgY29tcGFyZV92YWx1ZSwgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSAke3R5cGV9IExvYWQoVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIGludDMgbG9jYXRpb24p
O2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IExvYWQoVGV4dHVyZURlcHRo
MkQ8JHt0eXBlfT4sIGludDMgbG9jYXRpb24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAg
IHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmVEZXB0aDJEPCR7dHlwZX0+
LCB1aW50IE1pcExldmVsLCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVhZCB1aW50KiBIZWlnaHQs
IHRocmVhZCB1aW50KiBOdW1iZXJPZkxldmVscyk7YCk7CisgICAgICAgICAgICBwcmludCgpOwor
ICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZShUZXh0dXJlRGVwdGgyREFy
cmF5PCR7dHlwZX0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAgICAgICAg
cHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZShUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+
LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAg
IHByaW50KGBuYXRpdmUgJHt0eXBlfSBTYW1wbGVDbXAoVGV4dHVyZURlcHRoMkRBcnJheTwke3R5
cGV9PiwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdCBDb21w
YXJlVmFsdWUpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZUNt
cChUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlLCBm
bG9hdDMgbG9jYXRpb24sIGZsb2F0IENvbXBhcmVWYWx1ZSwgaW50MiBvZmZzZXQpO2ApOworICAg
ICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZUNtcExldmVsWmVybyhUZXh0dXJl
RGVwdGgyREFycmF5PCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlLCBmbG9hdDMgbG9j
YXRpb24sIGZsb2F0IENvbXBhcmVWYWx1ZSk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZl
ICR7dHlwZX0gU2FtcGxlQ21wTGV2ZWxaZXJvKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4s
IFNhbXBsZXJDb21wYXJpc29uU3RhdGUsIGZsb2F0MyBsb2NhdGlvbiwgZmxvYXQgQ29tcGFyZVZh
bHVlLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0g
U2FtcGxlQmlhcyhUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LCBzYW1wbGVyLCBmbG9hdDMg
bG9jYXRpb24sIGZsb2F0IEJpYXMpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5
cGV9IFNhbXBsZUJpYXMoVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9Piwgc2FtcGxlciwgZmxv
YXQzIGxvY2F0aW9uLCBmbG9hdCBCaWFzLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICBw
cmludChgbmF0aXZlICR7dHlwZX0gU2FtcGxlR3JhZChUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlw
ZX0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24sIGZsb2F0MiBERFgsIGZsb2F0MiBERFkpO2Ap
OworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZUdyYWQoVGV4dHVyZURl
cHRoMkRBcnJheTwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdDIgRERY
LCBmbG9hdDIgRERZLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZl
ICR7dHlwZX0gU2FtcGxlTGV2ZWwoVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9Piwgc2FtcGxl
ciwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdCBMT0QpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSAke3R5cGV9IFNhbXBsZUxldmVsKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIHNh
bXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgZmxvYXQgTE9ELCBpbnQyIG9mZnNldCk7YCk7CisgICAg
ICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyKFRleHR1cmVEZXB0aDJEQXJyYXk8
JHt0eXBlfT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICBwcmlu
dChgbmF0aXZlICR7dHlwZX0gR2F0aGVyKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIHNh
bXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgcHJp
bnQoYG5hdGl2ZSAke3R5cGV9IEdhdGhlclJlZChUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+
LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSAke3R5cGV9IEdhdGhlclJlZChUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LCBzYW1wbGVy
LCBmbG9hdDMgbG9jYXRpb24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgJHt0eXBlfSBHYXRoZXJHcmVlbihUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LCBz
YW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAk
e3R5cGV9IEdhdGhlckdyZWVuKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIHNhbXBsZXIs
IGZsb2F0MyBsb2NhdGlvbiwgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSAke3R5cGV9IEdhdGhlckJsdWUoVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9Piwgc2Ft
cGxlciwgZmxvYXQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0
eXBlfSBHYXRoZXJCbHVlKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIHNhbXBsZXIsIGZs
b2F0MyBsb2NhdGlvbiwgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSAke3R5cGV9IEdhdGhlckFscGhhKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIHNhbXBs
ZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlw
ZX0gR2F0aGVyQWxwaGEoVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9Piwgc2FtcGxlciwgZmxv
YXQzIGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZl
ICR7dHlwZX0gR2F0aGVyQ21wKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIFNhbXBsZXJD
b21wYXJpc29uU3RhdGUsIGZsb2F0MyBsb2NhdGlvbiwgZmxvYXQgY29tcGFyZV92YWx1ZSk7YCk7
CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyQ21wKFRleHR1cmVEZXB0
aDJEQXJyYXk8JHt0eXBlfT4sIFNhbXBsZXJDb21wYXJpc29uU3RhdGUsIGZsb2F0MyBsb2NhdGlv
biwgZmxvYXQgY29tcGFyZV92YWx1ZSwgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgcHJp
bnQoYG5hdGl2ZSAke3R5cGV9IEdhdGhlckNtcFJlZChUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlw
ZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlLCBmbG9hdDMgbG9jYXRpb24sIGZsb2F0IGNvbXBh
cmVfdmFsdWUpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IEdhdGhlckNt
cFJlZChUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRl
LCBmbG9hdDMgbG9jYXRpb24sIGZsb2F0IGNvbXBhcmVfdmFsdWUsIGludDIgb2Zmc2V0KTtgKTsK
KyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXJDbXBHcmVlbihUZXh0dXJl
RGVwdGgyREFycmF5PCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlLCBmbG9hdDMgbG9j
YXRpb24sIGZsb2F0IGNvbXBhcmVfdmFsdWUpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSAke3R5cGV9IEdhdGhlckNtcEdyZWVuKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIFNh
bXBsZXJDb21wYXJpc29uU3RhdGUsIGZsb2F0MyBsb2NhdGlvbiwgZmxvYXQgY29tcGFyZV92YWx1
ZSwgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IEdh
dGhlckNtcEJsdWUoVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9PiwgU2FtcGxlckNvbXBhcmlz
b25TdGF0ZSwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdCBjb21wYXJlX3ZhbHVlKTtgKTsKKyAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXJDbXBCbHVlKFRleHR1cmVEZXB0aDJE
QXJyYXk8JHt0eXBlfT4sIFNhbXBsZXJDb21wYXJpc29uU3RhdGUsIGZsb2F0MyBsb2NhdGlvbiwg
ZmxvYXQgY29tcGFyZV92YWx1ZSwgaW50MiBvZmZzZXQpO2ApOworICAgICAgICAgICAgcHJpbnQo
YG5hdGl2ZSAke3R5cGV9IEdhdGhlckNtcEFscGhhKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBl
fT4sIFNhbXBsZXJDb21wYXJpc29uU3RhdGUsIGZsb2F0MyBsb2NhdGlvbiwgZmxvYXQgY29tcGFy
ZV92YWx1ZSk7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyQ21w
QWxwaGEoVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9PiwgU2FtcGxlckNvbXBhcmlzb25TdGF0
ZSwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBpbnQyIG9mZnNldCk7YCk7
CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gTG9hZChUZXh0dXJlRGVwdGgyREFy
cmF5PCR7dHlwZX0+LCBpbnQ0IGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRp
dmUgJHt0eXBlfSBMb2FkKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIGludDQgbG9jYXRp
b24sIGludDIgb2Zmc2V0KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXRE
aW1lbnNpb25zKFRleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIHVpbnQgTWlwTGV2ZWwsIHRo
cmVhZCB1aW50KiBXaWR0aCwgdGhyZWFkIHVpbnQqIEhlaWdodCwgdGhyZWFkIHVpbnQqIEVsZW1l
bnRzLCB0aHJlYWQgdWludCogTnVtYmVyT2ZMZXZlbHMpO2ApOworICAgICAgICAgICAgcHJpbnQo
KTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBTYW1wbGUoVGV4dHVyZURlcHRo
Q3ViZTwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAg
IHByaW50KGBuYXRpdmUgJHt0eXBlfSBTYW1wbGVDbXAoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9
PiwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdCBDb21wYXJl
VmFsdWUpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZUNtcExl
dmVsWmVybyhUZXh0dXJlRGVwdGhDdWJlPCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRl
LCBmbG9hdDMgbG9jYXRpb24sIGZsb2F0IENvbXBhcmVWYWx1ZSk7YCk7CisgICAgICAgICAgICBw
cmludChgbmF0aXZlICR7dHlwZX0gU2FtcGxlQmlhcyhUZXh0dXJlRGVwdGhDdWJlPCR7dHlwZX0+
LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24sIGZsb2F0IEJpYXMpO2ApOworICAgICAgICAgICAg
cHJpbnQoYG5hdGl2ZSAke3R5cGV9IFNhbXBsZUdyYWQoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9
Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdDIgRERYLCBmbG9hdDIgRERZKTtgKTsK
KyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBTYW1wbGVMZXZlbChUZXh0dXJlRGVw
dGhDdWJlPCR7dHlwZX0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24sIGZsb2F0IExPRCk7YCk7
CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyKFRleHR1cmVEZXB0aEN1
YmU8JHt0eXBlfT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICBw
cmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyUmVkKFRleHR1cmVEZXB0aEN1YmU8JHt0eXBlfT4s
IHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbik7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZl
ICR7dHlwZX0gR2F0aGVyR3JlZW4oVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9Piwgc2FtcGxlciwg
ZmxvYXQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBH
YXRoZXJCbHVlKFRleHR1cmVEZXB0aEN1YmU8JHt0eXBlfT4sIHNhbXBsZXIsIGZsb2F0MyBsb2Nh
dGlvbik7YCk7CisgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gR2F0aGVyQWxwaGEo
VGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uKTtgKTsK
KyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXJDbXAoVGV4dHVyZURlcHRo
Q3ViZTwke3R5cGV9PiwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSwgZmxvYXQzIGxvY2F0aW9uLCBm
bG9hdCBjb21wYXJlX3ZhbHVlKTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBl
fSBHYXRoZXJDbXBSZWQoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9PiwgU2FtcGxlckNvbXBhcmlz
b25TdGF0ZSwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdCBjb21wYXJlX3ZhbHVlKTtgKTsKKyAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXJDbXBHcmVlbihUZXh0dXJlRGVwdGhD
dWJlPCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlLCBmbG9hdDMgbG9jYXRpb24sIGZs
b2F0IGNvbXBhcmVfdmFsdWUpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9
IEdhdGhlckNtcEJsdWUoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9PiwgU2FtcGxlckNvbXBhcmlz
b25TdGF0ZSwgZmxvYXQzIGxvY2F0aW9uLCBmbG9hdCBjb21wYXJlX3ZhbHVlKTtgKTsKKyAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBHYXRoZXJDbXBBbHBoYShUZXh0dXJlRGVwdGhD
dWJlPCR7dHlwZX0+LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlLCBmbG9hdDMgbG9jYXRpb24sIGZs
b2F0IGNvbXBhcmVfdmFsdWUpO2ApOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9
IExvYWQoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9PiwgaW50NCBsb2NhdGlvbik7YCk7CisgICAg
ICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlRGVwdGhDdWJl
PCR7dHlwZX0+LCB1aW50IE1pcExldmVsLCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVhZCB1aW50
KiBIZWlnaHQsIHRocmVhZCB1aW50KiBOdW1iZXJPZkxldmVscyk7YCk7CisgICAgICAgICAgICBw
cmludCgpOworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldU
ZXh0dXJlRGVwdGgyRDwke3R5cGV9PiwgdGhyZWFkIHVpbnQqIFdpZHRoLCB0aHJlYWQgdWludCog
SGVpZ2h0KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25z
KFJXVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIHRocmVhZCBmbG9hdCogV2lkdGgsIHRocmVhZCBm
bG9hdCogSGVpZ2h0KTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBMb2Fk
KFJXVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sIGludDIgbG9jYXRpb24pO2ApOworICAgICAgICAg
ICAgcHJpbnQoYG5hdGl2ZSB2b2lkIFN0b3JlKFJXVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sICR7
dHlwZX0sIHVpbnQyIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgIHByaW50KCk7CisgICAgICAg
ICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmVEZXB0aDJEQXJy
YXk8JHt0eXBlfT4sIHRocmVhZCB1aW50KiBXaWR0aCwgdGhyZWFkIHVpbnQqIEhlaWdodCwgdGhy
ZWFkIHVpbnQqIEVsZW1lbnRzKTtgKTsKKyAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBH
ZXREaW1lbnNpb25zKFJXVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9PiwgdGhyZWFkIGZsb2F0
KiBXaWR0aCwgdGhyZWFkIGZsb2F0KiBIZWlnaHQsIHRocmVhZCBmbG9hdCogRWxlbWVudHMpO2Ap
OworICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IExvYWQoUldUZXh0dXJlRGVwdGgy
REFycmF5PCR7dHlwZX0+LCBpbnQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgdm9pZCBTdG9yZShSV1RleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sICR7dHlwZX0s
IHVpbnQzIGxvY2F0aW9uKTtgKTsKKyAgICAgICAgICAgIHByaW50KCk7CisgICAgICAgIH0KKyAg
ICAgICAgKi8KKyAgICB9KSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9KSgpOworCisvLyBGSVhN
RTogT25jZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgbmV3
IHZlcnNpb24sIHRoaXMgY29tbWVudHMgc2hvdWxkIGJlIHJlbW92ZWQuCisvLyBUaGlzIGxpc3Qg
aXMgdXNlZCB0byByZXN0cmljdCB0aGUgYXZhaWxhYmlsaXR5IG9mIHZlY3RvciB0eXBlcyBhdmFp
bGFibGUgaW4gdGhlIGxhbmdhdWdlLgorLy8gUGVybWlzc2libGUgdmVjdG9yIGVsZW1lbnQgdHlw
ZXMgbXVzdCBhcHBlYXIgaW4gdGhpcyBsaXN0IGFuZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeQor
Y29uc3QgVmVjdG9yRWxlbWVudFR5cGVzID0gWyAiYm9vbCIsICJ1Y2hhciIsICJjaGFyIiwgInVz
aG9ydCIsICJzaG9ydCIsICJ1aW50IiwgImludCIsICJoYWxmIiwgImZsb2F0IiBdOworY29uc3Qg
VmVjdG9yRWxlbWVudFNpemVzID0gWyAyLCAzLCA0IF07CisKK2Z1bmN0aW9uIGFsbFZlY3RvclR5
cGVOYW1lcygpCit7CisgICAgY29uc3QgbmFtZXMgPSBbXTsKKyAgICBmb3IgKGxldCBlbGVtZW50
VHlwZSBvZiBWZWN0b3JFbGVtZW50VHlwZXMpIHsKKyAgICAgICAgZm9yIChsZXQgc2l6ZSBvZiBW
ZWN0b3JFbGVtZW50U2l6ZXMpCisgICAgICAgICAgICBuYW1lcy5wdXNoKGAke2VsZW1lbnRUeXBl
fSR7c2l6ZX1gKTsKKyAgICB9CisgICAgcmV0dXJuIG5hbWVzOworfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMKaW5kZXggZDY4ZTQwMzBlNTlhNTcxMTgyYzYwNGIzZTJi
ZDM3YTcwNDk1ODMyMy4uMjAwNzE0MDM5MTg2MzI3ZDYyMjRiZTVmZTcyNjFiOTc0MGM2YmJiNSAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5qcworKysg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCkBAIC0zNCw2ICszNCwx
MSBAQCBjbGFzcyBGdW5jRGVmIGV4dGVuZHMgRnVuYyB7CiAKICAgICBnZXQgYm9keSgpIHsgcmV0
dXJuIHRoaXMuX2JvZHk7IH0KICAgICAKKyAgICBzZXQgYm9keShuZXdCb2R5KQorICAgIHsKKyAg
ICAgICAgdGhpcy5fYm9keSA9IG5ld0JvZHk7CisgICAgfQorICAgIAogICAgIHJld3JpdGUocmV3
cml0ZXIpCiAgICAgewogICAgICAgICB0aGlzLl9yZXR1cm5UeXBlID0gdGhpcy5fcmV0dXJuVHlw
ZS52aXNpdChyZXdyaXRlcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9QcmVwYXJlLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5q
cwppbmRleCA4MzQ1OTJkMzZmMzQ1N2RmYTg2YjU3NTFiYjcyNjI0NzJhM2YwYTJkLi4zYmM5Zjcy
MjQ0NzU3MTZlYWExMmU0ZWUxOTYxYjBmMjdlZDk3YTkwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1ByZXBhcmUuanMKQEAgLTY4LDYgKzY4LDcgQEAgbGV0IHByZXBhcmUgPSAoKCkg
PT4gewogICAgICAgICBjaGVja1R5cGVzV2l0aEFyZ3VtZW50cyhwcm9ncmFtKTsKICAgICAgICAg
ZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOwogICAgICAgICBwcm9ncmFtLnZpc2l0KG5ldyBTdHJ1
Y3RMYXlvdXRCdWlsZGVyKCkpOworICAgICAgICBhbGxvY2F0ZUF0RW50cnlQb2ludHMocHJvZ3Jh
bSk7CiAgICAgICAgIGlubGluZShwcm9ncmFtKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBw
cm9ncmFtOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhl
c2l6ZURlZmF1bHRDb25zdHJ1Y3Rvck9wZXJhdG9yLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3ludGhlc2l6ZURlZmF1bHRDb25zdHJ1Y3Rvck9wZXJhdG9yLmpzCmluZGV4IGRj
NTA2NTM4ZDFjNmM3MTA5YjFhZDFlY2JhM2NlYzI3OGQwZjdiNWMuLmI4ZWUyZjA0ZDAwZmEwNTgw
ZmViOTFmZDgxNzZkZTVkYmI2OWY5MWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N5bnRoZXNpemVEZWZhdWx0Q29uc3RydWN0b3JPcGVyYXRvci5qcworKysgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplRGVmYXVsdENvbnN0cnVjdG9y
T3BlcmF0b3IuanMKQEAgLTY1LDcgKzY1LDggQEAgZnVuY3Rpb24gc3ludGhlc2l6ZURlZmF1bHRD
b25zdHJ1Y3Rvck9wZXJhdG9yKHByb2dyYW0pCiAgICAgICAgIGxldCBuYXRpdmVGdW5jID0gbmV3
IE5hdGl2ZUZ1bmModHlwZS5vcmlnaW4sICJvcGVyYXRvciBjYXN0IiwgVHlwZVJlZi53cmFwKHR5
cGUpLCBbXSwgdHJ1ZSwgbnVsbCk7CiAgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24g
PSAoW10sIG5vZGUpID0+IHsKICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcg
RUJ1ZmZlcih0eXBlLnNpemUpLCAwKTsKLSAgICAgICAgICAgIG5vZGUudHlwZS5wb3B1bGF0ZURl
ZmF1bHRWYWx1ZShyZXN1bHQuYnVmZmVyLCAwKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBWZXJp
ZnkgaWYgdGhpcyBjaGFuZ2UgaXMgc2FmZS4KKyAgICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZh
dWx0VmFsdWUocmVzdWx0LmJ1ZmZlciwgMCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9OwogICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbCBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAppbmRleCBmYjEwMTVmMTkzODFjZjZlYWM3MzE3YjQ4
NWVmMDBjM2VjMWNiOTZlLi44MGZjYjFjYWRiZTExYWFmN2JmZmQ0NTAyNDRlNDg1Nzk4YTgxNGM1
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKKysr
IGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCkBAIC0xNCw2ICsxNCw3
IEBACiA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZS5qcyI+PC9zY3JpcHQ+CiAKIDxzY3JpcHQgc3Jj
PSJBZGRyZXNzU3BhY2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkFsbG9jYXRlQXRFbnRy
eVBvaW50cy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQW5vbnltb3VzVmFyaWFibGUuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFycmF5UmVmVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iQXJyYXlUeXBlLmpzIj48L3NjcmlwdD4KQEAgLTExNyw3ICsxMTgsNyBAQAogPHNj
cmlwdCBzcmM9IlJldHVybkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJldHVy
bkV4Y2VwdGlvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU2FtcGxlci5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0iU3RhbmRhcmRMaWJyYXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJGYXN0U3RhbmRhcmRMaWJyYXJ5LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJTdGF0
ZW1lbnRDbG9uZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN0cnVjdExheW91dEJ1aWxk
ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN0cnVjdFR5cGUuanMiPjwvc2NyaXB0PgpA
QCAtMTU2LDcgKzE1Nyw3IEBACiA8c2NyaXB0PgogZnVuY3Rpb24gZG9UZXN0SW5Ccm93c2VyKCkK
IHsKLSAgICB2YXIgdGVzdGVyID0gZG9UZXN0KC8uKi8pOworICAgIHZhciB0ZXN0ZXIgPSBkb1Rl
c3QoL15ORVdfLyk7CiAgICAgdmFyIGxhc3RUaW1lOwogICAgIGZ1bmN0aW9uIG5leHQoKQogICAg
IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCmluZGV4IDkwZDVlNWNjZDUwY2Zm
NGE5NDJiOTE3NjZiMjcyODY5ZjA5NDRjNjcuLjllYzA1YmRhMDdjMzJmMGRiOWFjZTYyNGQyMDhl
Y2QyZjFhMDBlZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rl
c3QuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwpAQCAtNzYy
Niw5ICs3NjI2LDIzMSBAQCB0ZXN0cy50ZXh0dXJlR2F0aGVyID0gZnVuY3Rpb24oKSB7CiAgICAg
Ly8gRklYTUU6IEdhdGhlciBvdGhlciBjb21wb25lbnRzCiB9CiAKK3Rlc3RzLmV2YWx1YXRpb25P
cmRlckZvckFyZ3VtZW50cyA9ICgpID0+IHsKKyAgICBjb25zdCBwcm9ncmFtID0gZG9QcmVwKGAK
KyAgICAgICAgaW50IGZvbygpIHsgcmV0dXJuICpiYXIoMTApICsgKmJhcigyMCk7IH0KKworICAg
ICAgICB0aHJlYWQgaW50KiBiYXIoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBp
bnQgeCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuICZ4OworICAgICAgICB9CisKKyAgICAg
ICAgaW50IGJheigpIHsgcmV0dXJuIHBsdXMoYmFyKDEwKSwgYmFyKDIwKSk7IH0KKworICAgICAg
ICBpbnQgcGx1cyh0aHJlYWQgaW50KiB4LCB0aHJlYWQgaW50KiB5KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gKnggKyAqeTsKKyAgICAgICAgfQorICAgIGApOworCisgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDIwKTsKKyAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdKSwgMjApOwor
fQorCisvLyBOT1RFOiBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBjdXJyZW50bHkgdGVzdGluZyB0
aGUgc3RhdGljIGFsbG9jYXRvciwgd2hpY2ggbW92ZXMgc29tZSB2YXJpYWJsZSBkZWNsYXJhdGlv
bnMuCisKK2Z1bmN0aW9uIGNoZWNrRmFrZUludChwcm9ncmFtLCByZXN1bHQsIGV4cGVjdGVkKQor
eworICAgIGlmIChyZXN1bHQudHlwZS5uYW1lICE9ICJGYWtlSW50IikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJXcm9uZyByZXN1bHQgdHlwZTsgcmVzdWx0OiAiICsgcmVzdWx0KTsKKyAgICBp
ZiAocmVzdWx0LmVQdHIuYnVmZmVyLmdldCgwKSAhPSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6ICIgKyByZXN1bHQuZVB0ci5idWZmZXIuZ2V0KDApICsg
IiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKK30KKwordGVzdHMuTkVXX3JldHVyblJl
ZmVyZW5jZVRvUGFyYW1ldGVyID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
KyAgICAgICAgc3RydWN0IEZha2VJbnQgeyBpbnQgeDsgfQorICAgICAgICBGYWtlSW50IG1ha2VG
YWtlSW50KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBGYWtlSW50IGZha2VJbnQ7Cisg
ICAgICAgICAgICBmYWtlSW50LnggPSB4OworICAgICAgICAgICAgcmV0dXJuIGZha2VJbnQ7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZlcnRleCBGYWtlSW50IGVudHJ5UG9pbnRUcnVl
KCkgeyByZXR1cm4gbWFrZUZha2VJbnQoZm9vKHRydWUpKTsgfQorICAgICAgICB2ZXJ0ZXggRmFr
ZUludCBlbnRyeVBvaW50RmFsc2UoKSB7IHJldHVybiBtYWtlRmFrZUludChmb28oZmFsc2UpKTsg
fQorICAgICAgICAKKyAgICAgICAgaW50IGZvbyhib29sIGNvbmRpdGlvbikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpiYXIoY29uZGl0aW9uLCAxLCAyKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGJvb2wgY29uZGl0aW9uLCBpbnQgYSwgaW50
IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb24gPyAmYSA6ICZiOwor
ICAgICAgICB9CisgICAgYCk7CisgICAgCisgICAgY2hlY2tGYWtlSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZW50cnlQb2ludFRydWUiLCBbXSksIDEpOworICAgIGNoZWNrRmFr
ZUludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImVudHJ5UG9pbnRGYWxzZSIsIFtd
KSwgMik7Cit9CisKK3Rlc3RzLk5FV19yZXR1cm5SZWZlcmVuY2VUb1BhcmFtZXRlcldpdGhOZXN0
aW5nID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0
IEZha2VJbnQgeyBpbnQgeDsgfQorICAgICAgICBGYWtlSW50IG1ha2VGYWtlSW50KGludCB4KQor
ICAgICAgICB7CisgICAgICAgICAgICBGYWtlSW50IGZha2VJbnQ7CisgICAgICAgICAgICBmYWtl
SW50LnggPSB4OworICAgICAgICAgICAgcmV0dXJuIGZha2VJbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHZlcnRleCBGYWtlSW50IGVudHJ5UG9pbnQoKSB7IHJldHVybiBtYWtlRmFr
ZUludCgqZm9vKDEwKSArICpiYXIoMjApKTsgfQorICAgICAgICAKKyAgICAgICAgdGhyZWFkIGlu
dCogZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHRocmVhZCBpbnQqIGJhcihpbnQgeCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICZ4OworICAgICAgICB9IAorICAgIGApOworICAgIAorICAgIGNo
ZWNrRmFrZUludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImVudHJ5UG9pbnQiLCBb
XSksIDMwKTsKK30KKwordGVzdHMuTkVXX3JldHVyblJlZmVyZW5jZVRvU2FtZVBhcmFtdGVyID0g
KCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZha2VJ
bnQgeyBpbnQgeDsgfQorICAgICAgICBGYWtlSW50IG1ha2VGYWtlSW50KGludCB4KQorICAgICAg
ICB7CisgICAgICAgICAgICBGYWtlSW50IGZha2VJbnQ7CisgICAgICAgICAgICBmYWtlSW50Lngg
PSB4OworICAgICAgICAgICAgcmV0dXJuIGZha2VJbnQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZlcnRleCBGYWtlSW50IGVudHJ5UG9pbnQoKSB7IHJldHVybiBtYWtlRmFrZUludCgq
Zm9vKDEwKSArICpmb28oMjApKTsgfQorICAgICAgICAKKyAgICAgICAgdGhyZWFkIGludCogZm9v
KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKyAg
ICBgKTsKKyAgICAKKyAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHN0YW5kYXJkaXplIHRoYXQgdGhl
IG9wZXJhbmRzIGFyZSBldmFsdWF0ZSBSVEwuCisgICAgY2hlY2tGYWtlSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZW50cnlQb2ludCIsIFtdKSwgMjApOworfQorCit0ZXN0cy5O
RVdfcmV0dXJuUmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlID0gKCkgPT4geworICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZha2VJbnQgeyBpbnQgeDsgfQorICAgICAg
ICBGYWtlSW50IG1ha2VGYWtlSW50KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBGYWtl
SW50IGZha2VJbnQ7CisgICAgICAgICAgICBmYWtlSW50LnggPSB4OworICAgICAgICAgICAgcmV0
dXJuIGZha2VJbnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZlcnRleCBGYWtlSW50
IGVudHJ5UG9pbnQoKSB7IHJldHVybiBtYWtlRmFrZUludChmb28oKSk7IH0KKyAgICAgICAgCisg
ICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKmJhcigpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aHJlYWQgaW50KiBiYXIoKQorICAgICAgICB7
CisgICAgICAgICAgICBpbnQgYSA9IDQyOworICAgICAgICAgICAgcmV0dXJuICZhOworICAgICAg
ICB9ICAgICAgICAKKyAgICBgKTsKKyAgICAKKyAgICBjaGVja0Zha2VJbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJlbnRyeVBvaW50IiwgW10pLCA0Mik7Cit9CisKK3Rlc3RzLk5F
V19yZXR1cm5SZWZlcmVuY2VUb0xvY2FsVmFyaWFibGVXaXRoTmVzdGluZyA9ICgpID0+IHsKKyAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGYWtlSW50IHsgaW50IHg7
IH0KKyAgICAgICAgRmFrZUludCBtYWtlRmFrZUludChpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgRmFrZUludCBmYWtlSW50OworICAgICAgICAgICAgZmFrZUludC54ID0geDsKKyAgICAg
ICAgICAgIHJldHVybiBmYWtlSW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2ZXJ0
ZXggRmFrZUludCBlbnRyeVBvaW50KCkgeyByZXR1cm4gbWFrZUZha2VJbnQoZm9vKCkpOyB9Cisg
ICAgICAgIAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICpiYXIoKSArICpiYXooKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhyZWFkIGlu
dCogYmFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGEgPSAyMDsKKyAgICAgICAgICAg
IHJldHVybiAmYTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhyZWFkIGludCogYmF6
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGEgPSAyMjsKKyAgICAgICAgICAgIHJldHVy
biAmYTsKKyAgICAgICAgfQorICAgIGApOworICAgIAorICAgIGNoZWNrRmFrZUludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImVudHJ5UG9pbnQiLCBbXSksIDQyKTsKK30KKwordGVz
dHMuTkVXX2NvbnZlcnRQdHJUb0FycmF5UmVmID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZha2VJbnQgeyBpbnQgeDsgfQorICAgICAgICBGYWtl
SW50IG1ha2VGYWtlSW50KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBGYWtlSW50IGZh
a2VJbnQ7CisgICAgICAgICAgICBmYWtlSW50LnggPSB4OworICAgICAgICAgICAgcmV0dXJuIGZh
a2VJbnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZlcnRleCBGYWtlSW50IGVudHJ5
UG9pbnQoKSB7IHJldHVybiBtYWtlRmFrZUludChmb28oKSk7IH0KKyAgICAgICAgCisgICAgICAg
IGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFyKClbMF07CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHRocmVhZCBpbnRbXSBiYXIoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnQgeCA9IDQyOworICAgICAgICAgICAgcmV0dXJuIEAoJngpOworICAgICAg
ICB9CisgICAgYCk7CisgICAgICAgIAorICAgIGNoZWNrRmFrZUludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImVudHJ5UG9pbnQiLCBbXSksIDQyKTsKK30KKwordGVzdHMuTkVXX2Nv
bnZlcnRMb2NhbFZhcmlhYmxlVG9BcnJheVJlZiA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGYWtlSW50IHsgaW50IHg7IH0KKyAgICAgICAgRmFr
ZUludCBtYWtlRmFrZUludChpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgRmFrZUludCBm
YWtlSW50OworICAgICAgICAgICAgZmFrZUludC54ID0geDsKKyAgICAgICAgICAgIHJldHVybiBm
YWtlSW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2ZXJ0ZXggRmFrZUludCBlbnRy
eVBvaW50KCkgeyByZXR1cm4gbWFrZUZha2VJbnQoZm9vKCkpOyB9CisgICAgICAgIAorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcigpWzBdOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB0aHJlYWQgaW50W10gYmFyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IHggPSA0MjsKKyAgICAgICAgICAgIHJldHVybiBAeDsKKyAgICAgICAg
fQorICAgIGApOworICAgICAgICAKKyAgICBjaGVja0Zha2VJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJlbnRyeVBvaW50IiwgW10pLCA0Mik7Cit9CisKIG9rVG9UZXN0ID0gdHJ1
ZTsKIAotbGV0IHRlc3RGaWx0ZXIgPSAvLiovOyAvLyBydW4gZXZlcnl0aGluZyBieSBkZWZhdWx0
CitsZXQgdGVzdEZpbHRlciA9IC9eTkVXXy87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1bHQK
IGxldCB0ZXN0RXhjbHVzaW9uRmlsdGVyID0gL15ESVNBQkxFRF8vOwogaWYgKHRoaXNbImFyZ3Vt
ZW50cyJdKSB7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysp
IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlRGVj
bC5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlRGVjbC5qcwppbmRl
eCA3NjhmOGJhYWFkM2I4MmQ0YzM1MTdlYjcxYjJiZWE0OWE3ZWVkODFkLi4zZDIxNzQ2MjQ4MTYy
NmJmNWJlYmYwMTUyMjM4MDYzYTk2YzI5MWY2IDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZURlY2wuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVmFyaWFibGVEZWNsLmpzCkBAIC0zMiw2ICszMiw3IEBAIGNsYXNzIFZhcmlhYmxl
RGVjbCBleHRlbmRzIFZhbHVlIHsKICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7CiAgICAgICAg
IHRoaXMuX3R5cGUgPSB0eXBlOwogICAgICAgICB0aGlzLl9pbml0aWFsaXplciA9IGluaXRpYWxp
emVyOworICAgICAgICB0aGlzLl9pc0FkZHJlc3NUYWtlbiA9IGZhbHNlOwogICAgIH0KICAgICAK
ICAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9CkBAIC00MCw2ICs0MSwx
NiBAQCBjbGFzcyBWYXJpYWJsZURlY2wgZXh0ZW5kcyBWYWx1ZSB7CiAgICAgZ2V0IGluaXRpYWxp
emVyKCkgeyByZXR1cm4gdGhpcy5faW5pdGlhbGl6ZXI7IH0KICAgICBnZXQgdmFySXNMVmFsdWUo
KSB7IHJldHVybiB0cnVlOyB9CiAgICAgCisgICAgZ2V0IGlzQWRkcmVzc1Rha2VuKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9pc0FkZHJlc3NUYWtlbjsKKyAgICB9CisgICAgCisgICAg
c2V0IGlzQWRkcmVzc1Rha2VuKG5ld1ZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5faXNBZGRy
ZXNzVGFrZW4gPSBuZXdWYWx1ZTsKKyAgICB9CisgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMudHlwZSArICIgIiArIHRoaXMubmFtZSArICh0aGlzLmluaXRp
YWxpemVyID8gIiA9ICIgKyB0aGlzLmluaXRpYWxpemVyIDogIiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>349358</attachid>
            <date>2018-09-10 17:10:03 -0700</date>
            <delta_ts>2018-09-10 20:16:09 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-188402-20180910171000.patch</filename>
            <type>text/plain</type>
            <size>169324</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NzUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2RmYzE1NzRjMjUyZjRjZTQ4ODUyYmNlNThkYjdkZmZm
OWVlMzBmOS4uZjA5YzI5ZmFmOGQ0Mzc2YjhmZjM5OGZmY2JkNmYxZDNlNmI0ZTNhMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkz
IEBACisyMDE4LTA5LTA1ICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dITFNMXSBMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2Nh
dGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9BbGxvY2F0ZUF0RW50cnlQb2ludHMuanM6IEFkZGVkLgorICAgICAgICAoZmluZEVu
dHJ5UG9pbnRzLnByb3RvdHlwZS52aXNpdEZ1bmNEZWYpOgorICAgICAgICAoZmluZEVudHJ5UG9p
bnRzKToKKyAgICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5GaW5kVmFyaWFibGVzKToKKyAg
ICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5GaW5kVmFyaWFibGVzLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlRGVjbCk6CisgICAgICAgIChhbGxvY2F0ZUF0RW50cnlQb2ludHMuRmluZFZhcmlh
Ymxlcy5wcm90b3R5cGUudmlzaXRGdW5jUGFyYW1ldGVyKToKKyAgICAgICAgKGFsbG9jYXRlQXRF
bnRyeVBvaW50cy5GaW5kVmFyaWFibGVzLnByb3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToK
KyAgICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5GaW5kVmFyaWFibGVzV2hvc2VBZGRyZXNz
SXNUYWtlbi5wcm90b3R5cGUudmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24pOgorICAgICAgICAo
YWxsb2NhdGVBdEVudHJ5UG9pbnRzLkZpbmRWYXJpYWJsZXNXaG9zZUFkZHJlc3NJc1Rha2VuLnBy
b3RvdHlwZS52aXNpdE1ha2VQdHJFeHByZXNzaW9uKToKKyAgICAgICAgKGFsbG9jYXRlQXRFbnRy
eVBvaW50cy5GaW5kVmFyaWFibGVzV2hvc2VBZGRyZXNzSXNUYWtlbi5wcm90b3R5cGUudmlzaXRN
YWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5G
aW5kVmFyaWFibGVzV2hvc2VBZGRyZXNzSXNUYWtlbik6CisgICAgICAgIChhbGxvY2F0ZUF0RW50
cnlQb2ludHMuUmVwbGFjZVVzZXMucHJvdG90eXBlLnZpc2l0VmFyaWFibGVEZWNsKToKKyAgICAg
ICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cy5SZXBsYWNlVXNlcyk6CisgICAgICAgIChhbGxvY2F0
ZUF0RW50cnlQb2ludHMuKToKKyAgICAgICAgKGFsbG9jYXRlQXRFbnRyeVBvaW50cyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanM6CisgICAg
ICAgIChBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90
b3R5cGUuZ2V0IGlzQWRkcmVzc1Rha2VuKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnBy
b3RvdHlwZS5zZXQgaXNBZGRyZXNzVGFrZW4pOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxkZXIucHJvdG90
eXBlLl9jcmVhdGVFUHRyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFs
dWF0b3IuanM6CisgICAgICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtl
QmxvY2spOgorICAgICAgICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9u
KToKKyAgICAgICAgKEV2YWx1YXRvcik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRmFzdFN0YW5kYXJkTGlicmFyeS5qczogQWRkZWQuCisgICAgICAgIChwcmludCk6CisgICAg
ICAgIChsZXQuc3RhbmRhcmRMaWJyYXJ5KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9GdW5jRGVmLmpzOgorICAgICAgICAoRnVuY0RlZi5wcm90b3R5cGUuc2V0IGJvZHkpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanM6CisgICAgICAgIChs
ZXQucHJlcGFyZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6
ZURlZmF1bHRDb25zdHJ1Y3Rvck9wZXJhdG9yLmpzOgorICAgICAgICAoc3ludGhlc2l6ZURlZmF1
bHRDb25zdHJ1Y3Rvck9wZXJhdG9yKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9UZXN0Lmh0bWw6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qczoK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZURlY2wuanM6CisgICAg
ICAgIChWYXJpYWJsZURlY2wpOgorICAgICAgICAoVmFyaWFibGVEZWNsLnByb3RvdHlwZS5nZXQg
aXNBZGRyZXNzVGFrZW4pOgorICAgICAgICAoVmFyaWFibGVEZWNsLnByb3RvdHlwZS5zZXQgaXNB
ZGRyZXNzVGFrZW4pOgorCisyMDE4LTA5LTA2ICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBDYWxsIGFyZ3VtZW50cyBzaG91bGQgYmUgY29waWVk
IGFzIHNvb24gYXMgdGhleSBhcmUgZXZhbHVhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODkzNjAKKworICAgICAgICBSZXZpZXdlZCBieSBNeWxl
cyBDLiBNYXhmaWVsZC4KKworICAgICAgICBQcmV2aW91c2x5IGFsbCBjYWxsIGFyZ3VtZW50cyB3
ZXJlIGV2YWx1YXRlZCBhbmQgdGhlbiB0aGVpciByZXN1bHRzIHdlcmUKKyAgICAgICAgY29waWVk
IGludG8gbmV3IGJ1ZmZlcnMgZm9yIHRoZSBjYWxsLiBIb3dldmVyLCB0aGUgcmVzdWx0cyBhcmUg
bm90CisgICAgICAgIG5lY2Vzc2FyaWx5IGluZGVwZW5kZW50LCBzbyB0aGUgcmVzdWx0IHNob3Vs
ZCBiZSBjb3BpZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgYWZ0ZXIgZXZhbHVhdGlvbi4KKworICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qczoKKyAgICAgICAgKEV2
YWx1YXRvci5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6IE1vdmUgbG9jYXRpb24gb2Yg
Y29weS4KKyAgICAgICAgKEV2YWx1YXRvcik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5qczogQWRkIG5ldyB0ZXN0IHRvIHZlcmlmeSBjb3JyZWN0CisgICAgICAgIGJl
aGF2aW9yLgorCisyMDE4LTA5LTA2ICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dITFNMXSBJbmxpbmluZyBzaG91bGQgYmUgb3B0aW9uYWwKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODY0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElubGluaW5nIGNhbiBub3cg
YmUgY29uZmlndXJlZCB2aWEgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHByZXBhcmUuCisgICAg
ICAgIElubGluaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGJ1dCBzb21lIGxhdGUgY2hlY2tz
IHRoYXQgcHJldmlvdXNseQorICAgICAgICBoYXBwZW5lZCBhcyBwYXJ0IGlubGluaW5nIGFyZSBh
bHdheXMgcGVyZm9ybWVkLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxs
LmpzOiBBZGQgTGF0ZUNoZWNrZXJBbmRMYXlvdXRCdWZmZXIuanMKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmUuanM6CisgICAgICAgIChfaW5saW5lRnVuY3Rpb24pOiBG
YWN0b3JlZCBvdXQgY29tcHVsc29yeSBzdGFnZXMsIHJlbW92ZWQKKyAgICAgICAgU3RydWN0TGF5
b3V0QnVpbGRlciBiZWNhdXNlIHRoaXMgaXMgYWxyZWFkeSBkb25lIGluIHByZXBhcmUuCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGF0ZUNoZWNrQW5kTGF5b3V0QnVmZmVycy5q
czogRGl0dG8uCisgICAgICAgIChsYXRlQ2hlY2tBbmRMYXlvdXRCdWZmZXJzKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzOgorICAgICAgICAobGV0LnByZXBh
cmUpOiBBZGQgb3B0aW9uYWwgcGFyYW1ldGVyIGZvciBpbmxpbmluZywgZGlzYWJsZWQgYnkgZGVm
YXVsdC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sOiBBZGQg
TGF0ZUNoZWNrZXJBbmRMYXlvdXRCdWZmZXIuanMKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0Lmh0bWw6IERpdHRvLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL2luZGV4Lmh0bWw6IERpdHRvLgorCiAyMDE4LTA5LTEwICBEb24gT2xtc3RlYWQgIDxkb24u
b2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgQ0JPUiBjb2RlcnMgc2hvdWxkIG9ubHkgYmUg
Y29tcGlsZWQgaWYgV2ViQXV0aE4gaXMgZW5hYmxlZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
QWxsLmpzCmluZGV4IDBhNTg4NTE2MWE0MDNkMDlhZWFhMWZlNWUxMDQzYWRmZTYxMjU2NWYuLmUy
OTEwZDc5ZDZjMjM1OWI3NjMxNjE5ODAzMTZhZmYwOTQyMjcwZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9BbGwuanMKQEAgLTM3LDYgKzM3LDcgQEAgbG9hZCgiUHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlLmpzIik7CiAKIGxvYWQoIkFkZHJlc3NT
cGFjZS5qcyIpOworbG9hZCgiQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzIik7CiBsb2FkKCJBbm9u
eW1vdXNWYXJpYWJsZS5qcyIpOwogbG9hZCgiQXJyYXlSZWZUeXBlLmpzIik7CiBsb2FkKCJBcnJh
eVR5cGUuanMiKTsKQEAgLTEwMiw2ICsxMDMsNyBAQCBsb2FkKCJJbmxpbmVyLmpzIik7CiBsb2Fk
KCJJbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJJbnRMaXRlcmFsVHlwZS5qcyIpOwogbG9hZCgiSW50
cmluc2ljcy5qcyIpOworbG9hZCgiTGF0ZUNoZWNrQW5kTGF5b3V0QnVmZmVycy5qcyIpOwogbG9h
ZCgiTGF0ZUNoZWNrZXIuanMiKTsKIGxvYWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2Vu
LmpzIik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGxvY2F0
ZUF0RW50cnlQb2ludHMuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGxvY2F0
ZUF0RW50cnlQb2ludHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI3NTIzZmJiYjY4M2I0NDBiNDU3MDMzYzc4
OWY5NGJjY2VkNzgxYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcwpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworInVzZSBzdHJpY3QiOworCitmdW5j
dGlvbiBhbGxvY2F0ZUF0RW50cnlQb2ludHMocHJvZ3JhbSkKK3sKKyAgICBjb25zdCBlbnRyeVBv
aW50cyA9IFtdOworICAgIGNsYXNzIE9ubHlWaXNpdEZ1bmNEZWZzVGhhdEFyZUVudHJ5UG9pbnRz
IGV4dGVuZHMgVmlzaXRvciB7CisgICAgICAgIHZpc2l0RnVuY0RlZihub2RlKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobm9kZS5pc0VudHJ5UG9pbnQpCisgICAgICAgICAgICAgICAgZW50
cnlQb2ludHMucHVzaChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcm9ncmFtLnZpc2l0
KG5ldyBPbmx5VmlzaXRGdW5jRGVmc1RoYXRBcmVFbnRyeVBvaW50cygpKTsKKworICAgIGNvbnN0
IGFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycyA9IG5ldyBTZXQoKTsKKyAgICBjbGFz
cyBGaW5kQWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJhbWV0ZXJzIGV4dGVuZHMgVmlzaXRvciB7
CisgICAgICAgIGNvbnN0cnVjdG9yKGN1cnJlbnRGdW5jKQorICAgICAgICB7CisgICAgICAgICAg
ICBzdXBlcigpOworICAgICAgICAgICAgdGhpcy5fY3VycmVudEZ1bmMgPSBjdXJyZW50RnVuYzsK
KyAgICAgICAgfQorCisgICAgICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKKyAgICAgICAg
eworICAgICAgICAgICAgc3VwZXIudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAg
ICAgIGlmIChub2RlLmZ1bmMgaW5zdGFuY2VvZiBGdW5jRGVmKQorICAgICAgICAgICAgICAgIG5v
ZGUuZnVuYy52aXNpdChuZXcgRmluZEFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycyhu
b2RlLmZ1bmMpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpc2l0VmFyaWFibGVEZWNsKG5vZGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG5vZGUuX2Z1bmMgPSB0aGlzLl9jdXJyZW50RnVuYzsK
KyAgICAgICAgICAgIGFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycy5hZGQobm9kZSk7
CisgICAgICAgICAgICBzdXBlci52aXNpdFZhcmlhYmxlRGVjbChub2RlKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZpc2l0RnVuY1BhcmFtZXRlcihub2RlKQorICAgICAgICB7CisgICAgICAgICAg
ICBub2RlLl9mdW5jID0gdGhpcy5fY3VycmVudEZ1bmM7CisgICAgICAgICAgICBpZiAoIXRoaXMu
X2N1cnJlbnRGdW5jLmlzRW50cnlQb2ludCkKKyAgICAgICAgICAgICAgICBhbGxWYXJpYWJsZXNB
bmRGdW5jdGlvblBhcmFtZXRlcnMuYWRkKG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChsZXQgZW50cnlQb2ludCBvZiBlbnRyeVBvaW50cykKKyAgICAgICAgZW50cnlQb2ludC52
aXNpdChuZXcgRmluZEFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycyhlbnRyeVBvaW50
KSk7CisKKyAgICBpZiAoIWFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycy5zaXplKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBnbG9iYWxTdHJ1Y3RUeXBlID0gbmV3IFN0cnVj
dFR5cGUoZW50cnlQb2ludHNbMF0ub3JpZ2luLCBudWxsKTsKKyAgICBwcm9ncmFtLmFkZChnbG9i
YWxTdHJ1Y3RUeXBlKTsKKyAgICBjb25zdCBwdHJUb0dsb2JhbFN0cnVjdFR5cGUgPSBuZXcgUHRy
VHlwZShlbnRyeVBvaW50c1swXS5vcmlnaW4sICJ0aHJlYWQiLCBnbG9iYWxTdHJ1Y3RUeXBlKTsK
KyAgICBwcm9ncmFtLmFkZChwdHJUb0dsb2JhbFN0cnVjdFR5cGUpOworCisgICAgbGV0IGNvdW50
ZXIgPSAwOworICAgIGNvbnN0IHZhclRvRmllbGRNYXAgPSBuZXcgTWFwKCk7CisgICAgZm9yIChs
ZXQgdmFyT3JQYXJhbSBvZiBhbGxWYXJpYWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMpIHsKKyAg
ICAgICAgY29uc3QgZmllbGROYW1lID0gYGZpZWxkJHtjb3VudGVyKyt9XyR7dmFyT3JQYXJhbS5f
ZnVuYy5uYW1lfV8ke3Zhck9yUGFyYW0ubmFtZX1gOworICAgICAgICBnbG9iYWxTdHJ1Y3RUeXBl
LmFkZChuZXcgRmllbGQodmFyT3JQYXJhbS5vcmlnaW4sIGZpZWxkTmFtZSwgdmFyT3JQYXJhbS50
eXBlKSk7CisgICAgICAgIHZhclRvRmllbGRNYXAuc2V0KHZhck9yUGFyYW0sIGZpZWxkTmFtZSk7
CisgICAgfQorCisgICAgZ2xvYmFsU3RydWN0VHlwZS52aXNpdChuZXcgU3RydWN0TGF5b3V0QnVp
bGRlcigpKTsKKyAgICBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzRm9yU3RydWN0VHlwZShwcm9n
cmFtLCBnbG9iYWxTdHJ1Y3RUeXBlKTsKKworICAgIGNvbnN0IHZpc2l0ZWRGdW5jdGlvblNldCA9
IG5ldyBTZXQoKTsKKworICAgIGZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uKGZ1bmMpCisgICAgewor
ICAgICAgICBjbGFzcyBVcGRhdGVGdW5jdGlvbnMgZXh0ZW5kcyBSZXdyaXRlciB7CisgICAgICAg
ICAgICBjb25zdHJ1Y3RvcihmdW5jKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN1
cGVyKCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZnVuYyA9IGZ1bmM7CisgICAgICAgICAgICAg
ICAgdmlzaXRlZEZ1bmN0aW9uU2V0LmFkZCh0aGlzLmZ1bmMpOworICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmZ1bmMuaXNFbnRyeVBvaW50KQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRW
YXJpYWJsZURlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9yZWNvbmZpZ3VyZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgICAgICB0
aGlzLmZ1bmMuX2JvZHkgPSB0aGlzLmZ1bmMuX2JvZHkudmlzaXQodGhpcyk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIF9hZGRWYXJpYWJsZURlY2xhcmF0aW9uKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZURlY2wgPSBuZXcgVmFyaWFibGVEZWNs
KHRoaXMuZnVuYy5vcmlnaW4sIG51bGwsIGdsb2JhbFN0cnVjdFR5cGUsIG51bGwpOworICAgICAg
ICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlUmVmID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRoaXMu
ZnVuYy5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAodGhpcy52YXJpYWJsZURlY2wpKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLmZ1bmMuYm9keS5zdGF0ZW1lbnRzLnVuc2hpZnQodGhpcy52YXJpYWJs
ZURlY2wpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfcmVjb25maWd1cmVQYXJhbWV0
ZXJzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBmdW5jUGFyYW0gPSBu
ZXcgRnVuY1BhcmFtZXRlcih0aGlzLmZ1bmMub3JpZ2luLCBudWxsLCBwdHJUb0dsb2JhbFN0cnVj
dFR5cGUpOworICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlUmVmID0gVmFyaWFibGVSZWYu
d3JhcChmdW5jUGFyYW0pOworICAgICAgICAgICAgICAgIHRoaXMuZnVuYy5fbmV3UGFyYW1ldGVy
cyA9IFsgZnVuY1BhcmFtIF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdldCBmdW5j
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnVuYzsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2V0IHZhcmlhYmxlRGVjbCgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlRGVjbDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZ2V0IGdsb2JhbFN0cnVjdFZhcmlhYmxlUmVmKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWFibGVSZWY7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIF9jYWxsRXhwcmVzc2lvbkZvclZhcmlhYmxlKG5vZGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gdmFyVG9G
aWVsZE1hcC5nZXQobm9kZSk7CisgICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0g
YG9wZXJhdG9yJi4ke2ZpZWxkTmFtZX1gOworICAgICAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxl
QW5kT3ZlcmxvYWRzID0gcHJvZ3JhbS5nbG9iYWxOYW1lQ29udGV4dC5nZXQoRnVuYywgZnVuY3Rp
b25OYW1lKTsKKyAgICAgICAgICAgICAgICBjb25zdCBjYWxsRXhwcmVzc2lvblJlc29sdXRpb24g
PSBDYWxsRXhwcmVzc2lvbi5yZXNvbHZlKG5vZGUub3JpZ2luLCBwb3NzaWJsZUFuZE92ZXJsb2Fk
cywgZnVuY3Rpb25OYW1lLCBbIHRoaXMuZ2xvYmFsU3RydWN0VmFyaWFibGVSZWYgXSwgWyBwdHJU
b0dsb2JhbFN0cnVjdFR5cGUgXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxFeHByZXNz
aW9uUmVzb2x1dGlvbi5jYWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfZGVyZWZl
cmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JWYXJpYWJsZShub2RlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUub3JpZ2lu
LCB0aGlzLl9jYWxsRXhwcmVzc2lvbkZvclZhcmlhYmxlKG5vZGUpLCBub2RlLnR5cGUsICJ0aHJl
YWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlzaXRWYXJpYWJsZVJlZihub2Rl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghdmFyVG9GaWVsZE1hcC5oYXMo
bm9kZS52YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci52aXNpdFZh
cmlhYmxlUmVmKG5vZGUpOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXJlZmVyZW5j
ZWRDYWxsRXhwcmVzc2lvbkZvclZhcmlhYmxlKG5vZGUudmFyaWFibGUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChub2RlLmluaXRpYWxpemVyKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIHRoaXMuX2RlcmVmZXJlbmNlZENh
bGxFeHByZXNzaW9uRm9yVmFyaWFibGUobm9kZSksIG5vZGUuaW5pdGlhbGl6ZXIudmlzaXQodGhp
cyksIG5vZGUudHlwZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZSA9PSB0aGlzLnZh
cmlhYmxlRGVjbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ldyBCbG9jayhub2RlLm9yaWdpbik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS5sVmFsdWUgaW5zdGFuY2VvZiBWYXJpYWJsZVJlZiAmJiB2
YXJUb0ZpZWxkTWFwLmhhcyhub2RlLmxWYWx1ZS52YXJpYWJsZSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9jYWxsRXhwcmVzc2lvbkZvclZhcmlhYmxlKG5vZGUubFZhbHVlLnZh
cmlhYmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRNYWtlUHRyRXhwcmVz
c2lvbihub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vZGUgPSBzdXBlci52
aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgICAgICAgICAgICAgIGlmIChub2RlLmZ1bmMg
aW5zdGFuY2VvZiBGdW5jRGVmKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZ1bmN0aW9u
KG5vZGUuZnVuYyk7CisKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5vbnltb3VzVmFyaWFi
bGVzID0gW107CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRpb25FeHByZXNzaW9u
cyA9IFtdOworICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3B5RXhwcmVzc2lvbnMgPSBbXTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0
aDsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IG5vZGUuZnVu
Yy5wYXJhbWV0ZXJzW2ldLnR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbm9u
eW1vdXNWYXJpYWJsZSA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgdHlwZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhbm9ueW1vdXNWYXJpYWJsZXMucHVzaChhbm9ueW1v
dXNWYXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0aW9uRXhwcmVzc2lv
bnMucHVzaChuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChhbm9u
eW1vdXNWYXJpYWJsZSksIG5vZGUuYXJndW1lbnRMaXN0W2ldLCB0eXBlKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb3B5RXhwcmVzc2lvbnMucHVzaChuZXcgQXNzaWdubWVudChub2RlLm9y
aWdpbiwgdGhpcy5fZGVyZWZlcmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JWYXJpYWJsZShub2RlLmZ1
bmMucGFyYW1ldGVyc1tpXSksIFZhcmlhYmxlUmVmLndyYXAoYW5vbnltb3VzVmFyaWFibGUpLCB0
eXBlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBub2Rl
Ll9hcmd1bWVudExpc3QgPSBbIHRoaXMuZ2xvYmFsU3RydWN0VmFyaWFibGVSZWYgXTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIGFu
b255bW91c1ZhcmlhYmxlcy5jb25jYXQoZXZhbHVhdGlvbkV4cHJlc3Npb25zLCBjb3B5RXhwcmVz
c2lvbnMsIFsgbm9kZSBdKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZp
c2l0ZWRGdW5jdGlvblNldC5oYXMoZnVuYykpCisgICAgICAgICAgICBuZXcgVXBkYXRlRnVuY3Rp
b25zKGZ1bmMpOworICAgIH0KKworICAgIGZvciAobGV0IGVudHJ5UG9pbnQgb2YgZW50cnlQb2lu
dHMpCisgICAgICAgIHVwZGF0ZUZ1bmN0aW9uKGVudHJ5UG9pbnQpOworCisgICAgY2xhc3MgVXBk
YXRlUGFyYW1zIGV4dGVuZHMgVmlzaXRvciB7CisgICAgICAgIHZpc2l0RnVuY0RlZihub2RlKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS5fbmV3UGFyYW1ldGVycykKKyAgICAgICAg
ICAgICAgICBub2RlLl9wYXJhbWV0ZXJzID0gbm9kZS5fbmV3UGFyYW1ldGVyczsKKyAgICAgICAg
fQorICAgIH0KKyAgICBwcm9ncmFtLnZpc2l0KG5ldyBVcGRhdGVQYXJhbXMoKSk7Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5q
cyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCmlu
ZGV4IDQwZjViZDMxY2MzZjdkNDlmZDFhYmRmZDNiM2Y4NDI1NzBiMzNjMDIuLmQ5ZTg0Y2M5MTA5
YzEyMWVlODY3ODI0OGNkYWNlOTZmZDMzNzRiOWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCkBAIC0zNCwxMSArMzQsMjIgQEAg
Y2xhc3MgQW5vbnltb3VzVmFyaWFibGUgZXh0ZW5kcyBWYWx1ZSB7CiAgICAgICAgIHRoaXMuX29y
aWdpbiA9IG9yaWdpbjsKICAgICAgICAgdGhpcy5pbmRleCA9IGFub255bW91c1ZhcmlhYmxlQ291
bnQrKzsKICAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICAgICAgdGhpcy5faXNBZGRyZXNz
VGFrZW4gPSBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRo
aXMuX29yaWdpbjsgfQogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMu
aW5kZXggKyAiPiI7IH0KICAgICAKKyAgICBnZXQgaXNBZGRyZXNzVGFrZW4oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2lzQWRkcmVzc1Rha2VuOworICAgIH0KKyAgICAKKyAgICBzZXQg
aXNBZGRyZXNzVGFrZW4obmV3VmFsdWUpCisgICAgeworICAgICAgICB0aGlzLl9pc0FkZHJlc3NU
YWtlbiA9IG5ld1ZhbHVlOworICAgIH0KKyAgICAKICAgICB0b1N0cmluZygpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5uYW1lOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ2FsbEZ1bmN0aW9uLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
Q2FsbEZ1bmN0aW9uLmpzCmluZGV4IDdhYWYwYmEyMjQ5ZmYyN2VkODE3YzhkYzhlNzcyYzI1ZGEx
YmI1ZGMuLjcyZjY3NGU3OTgwZmE4NTUwNzQ5MjU4MmFhZWQ5M2ZmYTYzMDE4Y2MgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5qcworKysgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRnVuY3Rpb24uanMKQEAgLTI4LDEyICsy
OCwxMSBAQAogZnVuY3Rpb24gY2FsbEZ1bmN0aW9uKHByb2dyYW0sIG5hbWUsIGFyZ3VtZW50TGlz
dCkKIHsKICAgICBsZXQgYXJndW1lbnRUeXBlcyA9IGFyZ3VtZW50TGlzdC5tYXAoYXJndW1lbnQg
PT4gYXJndW1lbnQudHlwZSk7Ci0gICAgbGV0IGZ1bmNPckZhaWx1cmVzID0gcmVzb2x2ZUlubGlu
ZWRGdW5jdGlvbihwcm9ncmFtLCBuYW1lLCBhcmd1bWVudFR5cGVzLCB0cnVlKTsKLSAgICBpZiAo
IShmdW5jT3JGYWlsdXJlcyBpbnN0YW5jZW9mIEZ1bmMpKSB7Ci0gICAgICAgIGxldCBmYWlsdXJl
cyA9IGZ1bmNPckZhaWx1cmVzOwotICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcigiPGNhbGxG
dW5jdGlvbj4iLCAiQ2Fubm90IHJlc29sdmUgZnVuY3Rpb24gY2FsbCAiICsgbmFtZSArICIoIiAr
IGFyZ3VtZW50TGlzdCArICIpIiArIChmYWlsdXJlcy5sZW5ndGggPyAiOyB0cmllZDpcbiIgKyBm
YWlsdXJlcy5qb2luKCJcbiIpIDogIiIpKTsKLSAgICB9Ci0gICAgbGV0IGZ1bmMgPSBmdW5jT3JG
YWlsdXJlczsKKyAgICBsZXQgb3ZlcmxvYWQgPSBwcm9ncmFtLmdsb2JhbE5hbWVDb250ZXh0LnJl
c29sdmVGdW5jT3ZlcmxvYWQobmFtZSwgYXJndW1lbnRUeXBlcywgbnVsbCwgdHJ1ZSk7CisgICAg
aWYgKCFvdmVybG9hZC5mdW5jKQorICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcigiPGNhbGxG
dW5jdGlvbj4iLCAiQ2Fubm90IHJlc29sdmUgZnVuY3Rpb24gY2FsbCAiICsgbmFtZSArICIoIiAr
IGFyZ3VtZW50TGlzdCArICIpIiArIChvdmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAiOyB0cmll
ZDpcbiIgKyBvdmVybG9hZC5mYWlsdXJlcy5qb2luKCJcbiIpIDogIiIpKTsKKworICAgIGNvbnN0
IGZ1bmMgPSBvdmVybG9hZC5mdW5jOwogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVuYy5wYXJh
bWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgIGxldCB0eXBlID0gYXJndW1lbnRUeXBlc1tp
XTsKICAgICAgICAgdHlwZS52aXNpdChuZXcgU3RydWN0TGF5b3V0QnVpbGRlcigpKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzIGIv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanMKaW5kZXggYTNi
ZWUxZmEyNDc1ZDFmNTZiMzA1ZjU2ZDhkYjMzNmVhOGE0YTcxNy4uNWQxZjg3Y2E4YWU5MTQyZDQx
YmZiY2Y0MjYxNjAxMzA3N2Y1MTJhMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanMKQEAgLTI1LDE1ICsyNSw5IEBACiAidXNlIHN0cmljdCI7
CiAKIGNsYXNzIEVCdWZmZXJCdWlsZGVyIGV4dGVuZHMgVmlzaXRvciB7Ci0gICAgY29uc3RydWN0
b3IocHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuX3Byb2dy
YW0gPSBwcm9ncmFtOwotICAgIH0KLSAgICAKICAgICBfY3JlYXRlRVB0cih0eXBlKQogICAgIHsK
LSAgICAgICAgaWYgKHR5cGUuc2l6ZSA9PSBudWxsKQorICAgICAgICBpZiAodHlwZS5zaXplID09
PSBudWxsKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUeXBlIGRvZXMgbm90IGhhdmUg
c2l6ZTogIiArIHR5cGUpOwogICAgICAgICBsZXQgYnVmZmVyID0gbmV3IEVCdWZmZXIodHlwZS5z
aXplKTsKICAgICAgICAgaWYgKCF0eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRVB0ci5qcyBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VQdHIuanMKaW5kZXggZTI1ODI2YzZhYzQzNmEwNzk3NjcyMWY4ZGFj
ODY4OWJlNjVjZmM5OC4uOTdlNzZmZDczODFjYjkzMWRkNzNhM2MwODZmN2EzYmNhMGFkNmEwZiAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRVB0ci5qcworKysgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FUHRyLmpzCkBAIC03NCw2ICs3NCw4IEBAIGNs
YXNzIEVQdHIgewogICAgIAogICAgIGNvcHlGcm9tKG90aGVyLCBzaXplKQogICAgIHsKKyAgICAg
ICAgaWYgKCFvdGhlci5nZXQpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b3RoZXJ9
IGhhcyBubyBnZXQuLi5gKTsKICAgICAgICAgaWYgKHNpemUgPT0gbnVsbCkKICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvcHkgbnVsbCBzaXplIik7CiAgICAgICAgIGZvciAo
bGV0IGkgPSBzaXplOyBpLS07KQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRXZhbHVhdG9yLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVh
dG9yLmpzCmluZGV4IDkyMDk4N2FlYWM0OTRkZTVjMzk5ZDAyMGQ0NjFkY2Q5MjIwYjcyNmYuLjA2
YWZkNDU0ZGM3NWM4YjI1OTk1Mzg4ODM5YzRjYzJiZWViM2VjOTQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcworKysgYi9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMKQEAgLTM3LDYgKzM3LDkgQEAgY2xhc3MgRXZh
bHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgLy8gcG9zc2libGUgZm9yIGEgcG9pbnRlciBy
ZXR1cm5lZCBmcm9tIGEgdmlzaXQgbWV0aG9kIGluIHJ2YWx1ZSBjb250ZXh0IHRvIGxpdmUgYWNy
b3NzIGFueSBlZmZlY3RzLgogICAgIF9zbmFwc2hvdCh0eXBlLCBkc3RQdHIsIHNyY1B0cikKICAg
ICB7CisgICAgICAgIC8vIFRoaXMgb25seSBvY2N1cnMgd2hlbiBhIG5hdGl2ZSBmdW5jdGlvbiBy
ZXR1cm5zIHZvaWQuCisgICAgICAgIGlmICghc3JjUHRyKQorICAgICAgICAgICAgcmV0dXJuIG51
bGw7CiAgICAgICAgIGxldCBzaXplID0gdHlwZS5zaXplOwogICAgICAgICBpZiAoc2l6ZSA9PSBu
dWxsKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZ2V0IHNpemUgb2YgdHlw
ZTogIiArIHR5cGUgKyAiIChzaXplID0gIiArIHNpemUgKyAiLCBjb25zdHJ1Y3RvciA9ICIgKyB0
eXBlLmNvbnN0cnVjdG9yLm5hbWUgKyAiKSIpOwpAQCAtNzEsMTYgKzc0LDM0IEBAIGNsYXNzIEV2
YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAg
fQogICAgIH0KLSAgICAKLSAgICB2aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCisKKyAgICBf
ZXZhbHVhdGVBcmd1bWVudHMoYXJndW1lbnRMaXN0LCBwYXJhbWV0ZXJMaXN0KQogICAgIHsKLSAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgbm9kZS5wYXJhbWV0ZXJzW2ldLmVQdHIuY29weUZyb20oCi0gICAgICAg
ICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbaV0udmlzaXQodGhpcyksCi0gICAgICAgICAgICAg
ICAgbm9kZS5wYXJhbWV0ZXJzW2ldLnR5cGUuc2l6ZSk7CisgICAgICAgIGNvbnN0IGNhbGxBcmd1
bWVudHMgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgaSA9IGFyZ3VtZW50TGlzdC5sZW5ndGg7IGkt
LTspIHsKKyAgICAgICAgICAgIGNvbnN0IGFyZ3VtZW50ID0gYXJndW1lbnRMaXN0W2ldOworICAg
ICAgICAgICAgY29uc3QgdHlwZSA9IHBhcmFtZXRlckxpc3RbaV0udHlwZTsKKyAgICAgICAgICAg
IGlmICghdHlwZSB8fCAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJDYW5ub3QgZ2V0IHR5cGUgb3IgYXJndW1lbnQ7IGkgPSAiICsgaSArICIsIGFyZ3VtZW50ID0g
IiArIGFyZ3VtZW50ICsgIiwgdHlwZSA9ICIgKyB0eXBlKTsKKyAgICAgICAgICAgIGxldCBhcmd1
bWVudFZhbHVlID0gYXJndW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50VmFsdWUpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50
IHZhbHVlLCBpID0gIiArIGkgKyAiLCBub2RlID0gIiArIG5vZGUpOworICAgICAgICAgICAgY2Fs
bEFyZ3VtZW50cy51bnNoaWZ0KEVCdWZmZXIuYWxsb3dBbGxvY2F0aW9uKCgpID0+IHRoaXMuX3Nu
YXBzaG90KHR5cGUsIG51bGwsIGFyZ3VtZW50VmFsdWUpKSk7CiAgICAgICAgIH0KLSAgICAgICAg
bGV0IHJlc3VsdCA9IHRoaXMuX3J1bkJvZHkobm9kZS5yZXR1cm5UeXBlLCBub2RlLnJldHVybkVQ
dHIsIG5vZGUuYm9keSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBj
YWxsQXJndW1lbnRzOworICAgIH0KKworICAgIF9ldmFsdWF0ZUZ1bmN0aW9uKG5vZGUsIGFyZ3Vt
ZW50TGlzdCwgcGFyYW1ldGVyTGlzdCwgZnVuY0JvZHksIHJldHVyblR5cGUsIHJldHVybkVQdHIp
CisgICAgeworICAgICAgICBjb25zdCBhcmd1bWVudFZhbHVlcyA9IHRoaXMuX2V2YWx1YXRlQXJn
dW1lbnRzKGFyZ3VtZW50TGlzdCwgcGFyYW1ldGVyTGlzdCk7CisgICAgICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBwYXJh
bWV0ZXJMaXN0W2ldLmVQdHIuY29weUZyb20oYXJndW1lbnRWYWx1ZXNbaV0sIHBhcmFtZXRlckxp
c3RbaV0udHlwZS5zaXplKTsKKyAgICAgICAgcmV0dXJuIEVCdWZmZXIuYWxsb3dBbGxvY2F0aW9u
KCgpID0+IHRoaXMuX3J1bkJvZHkocmV0dXJuVHlwZSwgcmV0dXJuRVB0ciwgZnVuY0JvZHkpKTsK
KyAgICB9CisKKyAgICB2aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fZXZhbHVhdGVGdW5jdGlvbihub2RlLCBub2RlLmFyZ3VtZW50TGlzdCwg
bm9kZS5wYXJhbWV0ZXJzLCBub2RlLmJvZHksIG5vZGUucmV0dXJuVHlwZSwgbm9kZS5yZXR1cm5F
UHRyKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKQEAgLTMxMCwyMSArMzMx
LDExIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgIAogICAgIHZpc2l0
Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIC8vIFdlIGV2YWx1YXRlIGlubGlu
ZWQgQVNUcywgc28gdGhpcyBjYW4gb25seSBiZSBhIG5hdGl2ZSBjYWxsLgotICAgICAgICBsZXQg
Y2FsbEFyZ3VtZW50cyA9IFtdOwotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuYXJn
dW1lbnRMaXN0Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnQgPSBub2Rl
LmFyZ3VtZW50TGlzdFtpXTsKLSAgICAgICAgICAgIGxldCB0eXBlID0gbm9kZS5mdW5jLnBhcmFt
ZXRlclR5cGVzW2ldOwotICAgICAgICAgICAgaWYgKCF0eXBlIHx8ICFhcmd1bWVudCkKLSAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZSBvciBhcmd1bWVudDsg
aSA9ICIgKyBpICsgIiwgYXJndW1lbnQgPSAiICsgYXJndW1lbnQgKyAiLCB0eXBlID0gIiArIHR5
cGUgKyAiOyBpbiAiICsgbm9kZSk7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRWYWx1ZSA9IGFy
Z3VtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudFZhbHVlKQotICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVudCB2YWx1ZSwgaSA9ICIg
KyBpICsgIiwgbm9kZSA9ICIgKyBub2RlKTsKLSAgICAgICAgICAgIGNhbGxBcmd1bWVudHMucHVz
aChFQnVmZmVyLmFsbG93QWxsb2NhdGlvbigoKSA9PiB0aGlzLl9zbmFwc2hvdCh0eXBlLCBudWxs
LCBhcmd1bWVudFZhbHVlKSkpOwotICAgICAgICB9Ci0gICAgICAgIGxldCByZXN1bHQgPSBFQnVm
ZmVyLmFsbG93QWxsb2NhdGlvbigoKSA9PiBub2RlLmZ1bmMuaW1wbGVtZW50YXRpb24oY2FsbEFy
Z3VtZW50cywgbm9kZSkpOwotICAgICAgICByZXN1bHQgPSB0aGlzLl9zbmFwc2hvdChub2RlLmZ1
bmMucmV0dXJuVHlwZSwgbm9kZS5yZXN1bHRFUHRyLCByZXN1bHQpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBpZiAobm9kZS5mdW5jIGluc3RhbmNlb2YgTmF0aXZlRnVuYykgewor
ICAgICAgICAgICAgY29uc3QgY2FsbEFyZ3VtZW50cyA9IHRoaXMuX2V2YWx1YXRlQXJndW1lbnRz
KG5vZGUuYXJndW1lbnRMaXN0LCBub2RlLmZ1bmMucGFyYW1ldGVycyk7CisgICAgICAgICAgICBy
ZXR1cm4gRUJ1ZmZlci5hbGxvd0FsbG9jYXRpb24oKCkgPT4gdGhpcy5fc25hcHNob3Qobm9kZS5m
dW5jLnJldHVyblR5cGUsIG5vZGUucmVzdWx0RVB0ciwgbm9kZS5mdW5jLmltcGxlbWVudGF0aW9u
KGNhbGxBcmd1bWVudHMsIG5vZGUpKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2V2YWx1YXRlRnVuY3Rpb24obm9kZSwgbm9kZS5hcmd1bWVudExpc3QsIG5vZGUu
ZnVuYy5wYXJhbWV0ZXJzLCBub2RlLmZ1bmMuYm9keSwgbm9kZS5mdW5jLnJldHVyblR5cGUsIG5v
ZGUucmVzdWx0RVB0cik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RnVuY0RlZi5qcwppbmRleCBkNjhlNDAzMGU1OWE1NzExODJjNjA0YjNlMmJkMzdhNzA0OTU4MzIz
Li4yMDA3MTQwMzkxODYzMjdkNjIyNGJlNWZlNzI2MWI5NzQwYzZiYmI1IDEwMDY0NAotLS0gYS9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCisrKyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMKQEAgLTM0LDYgKzM0LDExIEBAIGNsYXNzIEZ1
bmNEZWYgZXh0ZW5kcyBGdW5jIHsKIAogICAgIGdldCBib2R5KCkgeyByZXR1cm4gdGhpcy5fYm9k
eTsgfQogICAgIAorICAgIHNldCBib2R5KG5ld0JvZHkpCisgICAgeworICAgICAgICB0aGlzLl9i
b2R5ID0gbmV3Qm9keTsKKyAgICB9CisgICAgCiAgICAgcmV3cml0ZShyZXdyaXRlcikKICAgICB7
CiAgICAgICAgIHRoaXMuX3JldHVyblR5cGUgPSB0aGlzLl9yZXR1cm5UeXBlLnZpc2l0KHJld3Jp
dGVyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5q
cyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5qcwppbmRleCA4YmE5YWQ3
NGU3YzJhNzAzNjcyMjUyMTQ3MTlhNjFmYjdmYmZhM2M1Li5kMzU4ODFjMWJkMDM4ODAxOTNmYTBm
Y2MzMjAxZTBkODg4ZjJmZGRmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9JbmxpbmUuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5l
LmpzCkBAIC0zNiwyNiArMzYsNiBAQCBmdW5jdGlvbiBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwg
ZnVuYywgdmlzaXRpbmcpCiB7CiAgICAgaWYgKGZ1bmMuaW5saW5lZCB8fCBmdW5jLmlzTmF0aXZl
KQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZnVuYy52aXNpdChuZXcgTGF0ZUNoZWNrZXIo
KSk7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB0aGUgcHJlY2lzZSB0aW1lIHdoZW4gd2UgY2FuIGJ1
aWxkIEVCdWZmZXJzIGluIG9yZGVyIHRvIGdldCB0aGVtIHRvIGJlIHVuaXF1ZWQgYnkKLSAgICAv
LyB0eXBlIGluc3RhbnRpYXRpb24gYnV0IG5vdGhpbmcgZWxzZS4KLSAgICBmdW5jLnZpc2l0KG5l
dyBTdHJ1Y3RMYXlvdXRCdWlsZGVyKCkpOwotICAgIGZ1bmMudmlzaXQobmV3IEVCdWZmZXJCdWls
ZGVyKHByb2dyYW0pKTsKLSAgICAKICAgICBmdW5jLnJld3JpdGUobmV3IElubGluZXIocHJvZ3Jh
bSwgZnVuYywgdmlzaXRpbmcpKTsKLQogICAgIGZ1bmMuaW5saW5lZCA9IHRydWU7CiB9Ci0KLWZ1
bmN0aW9uIHJlc29sdmVJbmxpbmVkRnVuY3Rpb24ocHJvZ3JhbSwgbmFtZSwgYXJndW1lbnRUeXBl
cywgYWxsb3dFbnRyeVBvaW50ID0gZmFsc2UpCi17Ci0gICAgbGV0IG92ZXJsb2FkID0gcHJvZ3Jh
bS5nbG9iYWxOYW1lQ29udGV4dC5yZXNvbHZlRnVuY092ZXJsb2FkKG5hbWUsIGFyZ3VtZW50VHlw
ZXMsIHVuZGVmaW5lZCwgYWxsb3dFbnRyeVBvaW50KTsKLSAgICBpZiAoIW92ZXJsb2FkLmZ1bmMp
Ci0gICAgICAgIHJldHVybiBvdmVybG9hZC5mYWlsdXJlczsKLQotICAgIGxldCBmdW5jID0gb3Zl
cmxvYWQuZnVuYzsKLSAgICBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgZnVuYywgbmV3IFZpc2l0
aW5nU2V0KGZ1bmMpKTsKLSAgICByZXR1cm4gZnVuYzsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja0FuZExheW91dEJ1ZmZlcnMuanMgYi9Ub29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MYXRlQ2hlY2tBbmRMYXlvdXRCdWZmZXJzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY1YjM1YmI4MGUxNGQxNmUyNjAzMWE3MGFmMWM5YzM4NmIwNWM2NDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MYXRlQ2hlY2tBbmRM
YXlvdXRCdWZmZXJzLmpzCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBsYXRlQ2hlY2tB
bmRMYXlvdXRCdWZmZXJzKHByb2dyYW0pCit7CisgICAgZm9yIChsZXQgZnVuY0xpc3Qgb2YgcHJv
Z3JhbS5mdW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5j
TGlzdCkgeworICAgICAgICAgICAgaWYgKGZ1bmMuaXNOYXRpdmUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmdW5jLnZpc2l0KG5ldyBMYXRlQ2hlY2tlcigpKTsKKyAg
ICAgICAgICAgIGZ1bmMudmlzaXQobmV3IEVCdWZmZXJCdWlsZGVyKCkpOworICAgICAgICB9Cisg
ICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTGF0ZUNoZWNrZXIuanMKaW5kZXggNWQxZWY5NWEyMzAyYjJkNmZkYjllMDMw
ZWFiMzJlNmE3MGQ3NjZkZS4uZThjYmQ4ZDVkMTZhNWQ1MmZkOGFjNjE2NzI2YmYxNzk5OGQ2NDEx
MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGF0ZUNoZWNrZXIu
anMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGF0ZUNoZWNrZXIuanMKQEAg
LTQxLDExICs0MSwxMyBAQCBjbGFzcyBMYXRlQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAg
ICAgICAgICAgaWYgKCF0eXBlLmlzUHJpbWl0aXZlKQogICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlNoYWRlciBzaWduYXR1cmUg
Y2Fubm90IGluY2x1ZGUgbm9uLXByaW1pdGl2ZSB0eXBlOiAiICsgdHlwZSk7CiAgICAgICAgIH0K
LSAgICAgICAgYXNzZXJ0UHJpbWl0aXZlKG5vZGUucmV0dXJuVHlwZSk7Ci0gICAgICAgIGlmICgh
KG5vZGUucmV0dXJuVHlwZS51bmlmeU5vZGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKLSAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlZl
cnRleCBzaGFkZXIgIiArIG5vZGUubmFtZSArICIgbXVzdCByZXR1cm4gYSBzdHJ1Y3QuIik7Cisg
ICAgICAgIC8vIFRlc3RzIGFyZSBhbGxvd2VkIHRvIHJldHVybiB3aGF0ZXZlciB0aGV5IGxpa2Uu
CisgICAgICAgIGlmIChub2RlLnNoYWRlclR5cGUgPT0gInZlcnRleCIgfHwgbm9kZS5zaGFkZXJU
eXBlID09ICJmcmFnbWVudCIpCisgICAgICAgICAgICBhc3NlcnRQcmltaXRpdmUobm9kZS5yZXR1
cm5UeXBlKTsKICAgICAgICAgc3dpdGNoIChub2RlLnNoYWRlclR5cGUpIHsKICAgICAgICAgY2Fz
ZSAidmVydGV4IjoKKyAgICAgICAgICAgIGlmICghKG5vZGUucmV0dXJuVHlwZS51bmlmeU5vZGUg
aW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJWZXJ0ZXggc2hhZGVyICIgKyBub2RlLm5h
bWUgKyAiIG11c3QgcmV0dXJuIGEgc3RydWN0LiIpOwogICAgICAgICAgICAgZm9yIChsZXQgcGFy
YW1ldGVyIG9mIG5vZGUucGFyYW1ldGVycykgewogICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0
ZXIudHlwZS51bmlmeU5vZGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKQogICAgICAgICAgICAgICAg
ICAgICBhc3NlcnRQcmltaXRpdmUocGFyYW1ldGVyLnR5cGUpOwpAQCAtNTQsNiArNTYsNyBAQCBj
bGFzcyBMYXRlQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgImZyYWdtZW50IjoKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBTaG91bGQgZnJhZ21lbnQgc2hhZGVycyBiZSByZXF1aXJlZCB0byByZXR1cm4gc3RydWN0
cz8KICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBvZiBub2RlLnBhcmFtZXRlcnMpIHsK
ICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyLm5hbWUgPT0gInN0YWdlSW4iKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghKHBhcmFtZXRlci50eXBlLnVuaWZ5Tm9kZSBpbnN0YW5jZW9m
IFN0cnVjdFR5cGUpKQpAQCAtNjUsNiArNjgsOCBAQCBjbGFzcyBMYXRlQ2hlY2tlciBleHRlbmRz
IFZpc2l0b3IgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICJ0ZXN0IjoKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgc2hhZGVyIHR5cGU6
ICIgKyBub2RlLnNoYWRlclR5cGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1BhcnNlLmpzCmluZGV4IDRmYjg0OWQwY2RmMGQ5ZGEwOTBmMWMzMDEzMTEyOGI0MTM1MWI5
ZjEuLjdkMTM4MWYyZTNjNWEzMGFkMWUzZDk3ZjYyMzU0N2JjZThiMDQ1ZTYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCisrKyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCkBAIC0xMTcxLDcgKzExNzEsNyBAQCBmdW5jdGlv
biBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpbmQsIGxpbmVOdW1iZXJPZmZzZXQsIHRl
eHQpCiAgICAgICAgICAgICBuYW1lID0gIm9wZXJhdG9yIGNhc3QiOwogICAgICAgICAgICAgaXND
YXN0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNoYWRlclR5cGUgPSB0
cnlDb25zdW1lKCJ2ZXJ0ZXgiLCAiZnJhZ21lbnQiKTsKKyAgICAgICAgICAgIHNoYWRlclR5cGUg
PSB0cnlDb25zdW1lKCJ2ZXJ0ZXgiLCAiZnJhZ21lbnQiLCAidGVzdCIpOwogICAgICAgICAgICAg
cmV0dXJuVHlwZSA9IHBhcnNlVHlwZSgpOwogICAgICAgICAgICAgaWYgKHJldHVyblR5cGUgaW5z
dGFuY2VvZiBXU3ludGF4RXJyb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGU7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzIGIv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwppbmRleCA4MzQ1OTJkMzZm
MzQ1N2RmYTg2YjU3NTFiYjcyNjI0NzJhM2YwYTJkLi5kZjgyODY5MWEwYWU5YzMyYjZiNjA2ZjM3
YzhiNzZmYTg1OGU5ZDMxIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9QcmVwYXJlLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUu
anMKQEAgLTI2LDcgKzI2LDcgQEAKIAogbGV0IHByZXBhcmUgPSAoKCkgPT4gewogICAgIGxldCBz
dGFuZGFyZFByb2dyYW07Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKG9yaWdpbiwgbGluZU51bWJlck9m
ZnNldCwgdGV4dCkgeworICAgIHJldHVybiBmdW5jdGlvbihvcmlnaW4sIGxpbmVOdW1iZXJPZmZz
ZXQsIHRleHQsIHNob3VsZElubGluZSA9IGZhbHNlKSB7CiAgICAgICAgIGlmICghc3RhbmRhcmRQ
cm9ncmFtKSB7CiAgICAgICAgICAgICBzdGFuZGFyZFByb2dyYW0gPSBuZXcgUHJvZ3JhbSgpOwog
ICAgICAgICAgICAgbGV0IGZpcnN0TGluZU9mU3RhbmRhcmRMaWJyYXJ5ID0gMjg7IC8vIFNlZSBT
dGFuZGFyZExpYnJhcnkuanMuCkBAIC02OCw4ICs2OCwxMCBAQCBsZXQgcHJlcGFyZSA9ICgoKSA9
PiB7CiAgICAgICAgIGNoZWNrVHlwZXNXaXRoQXJndW1lbnRzKHByb2dyYW0pOwogICAgICAgICBm
aW5kSGlnaFpvbWJpZXMocHJvZ3JhbSk7CiAgICAgICAgIHByb2dyYW0udmlzaXQobmV3IFN0cnVj
dExheW91dEJ1aWxkZXIoKSk7Ci0gICAgICAgIGlubGluZShwcm9ncmFtKTsKLSAgICAgICAgCisg
ICAgICAgIGFsbG9jYXRlQXRFbnRyeVBvaW50cyhwcm9ncmFtKTsKKyAgICAgICAgbGF0ZUNoZWNr
QW5kTGF5b3V0QnVmZmVycyhwcm9ncmFtKTsKKyAgICAgICAgaWYgKHNob3VsZElubGluZSkKKyAg
ICAgICAgICAgIGlubGluZShwcm9ncmFtKTsKICAgICAgICAgcmV0dXJuIHByb2dyYW07CiAgICAg
fTsKIH0pKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElS
Vi5odG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbAppbmRleCA4
MDRjZDlhYmRhNmQ1YzNiZWMwM2JlMjU4MmFhM2YyM2YwMDdhMTg4Li4wZDIzNzEwMDVlNzEwY2Rj
NjBmMDMzZGE1YTUxMWM0OWFlMDA1YzM2IDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TUElSVi5odG1sCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1NQSVJWLmh0bWwKQEAgLTg1LDYgKzg1LDcgQEAgdGQgewogICAgIDxzY3JpcHQgc3JjPSJJbnRM
aXRlcmFsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbFR5cGUuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJJbnRyaW5zaWNzLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iTGF0ZUNoZWNrQW5kTGF5b3V0QnVmZmVycy5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IkxhdGVDaGVja2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iTGV4ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJMZXhlclRva2VuLmpzIj48
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRo
ZXNpemVEZWZhdWx0Q29uc3RydWN0b3JPcGVyYXRvci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N5bnRoZXNpemVEZWZhdWx0Q29uc3RydWN0b3JPcGVyYXRvci5qcwppbmRleCBk
YzUwNjUzOGQxYzZjNzEwOWIxYWQxZWNiYTNjZWMyNzhkMGY3YjVjLi5iOGVlMmYwNGQwMGZhMDU4
MGZlYjkxZmQ4MTc2ZGU1ZGJiNjlmOTFkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TeW50aGVzaXplRGVmYXVsdENvbnN0cnVjdG9yT3BlcmF0b3IuanMKKysrIGIv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZURlZmF1bHRDb25zdHJ1Y3Rv
ck9wZXJhdG9yLmpzCkBAIC02NSw3ICs2NSw4IEBAIGZ1bmN0aW9uIHN5bnRoZXNpemVEZWZhdWx0
Q29uc3RydWN0b3JPcGVyYXRvcihwcm9ncmFtKQogICAgICAgICBsZXQgbmF0aXZlRnVuYyA9IG5l
dyBOYXRpdmVGdW5jKHR5cGUub3JpZ2luLCAib3BlcmF0b3IgY2FzdCIsIFR5cGVSZWYud3JhcCh0
eXBlKSwgW10sIHRydWUsIG51bGwpOwogICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVudGF0aW9u
ID0gKFtdLCBub2RlKSA9PiB7CiAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3
IEVCdWZmZXIodHlwZS5zaXplKSwgMCk7Ci0gICAgICAgICAgICBub2RlLnR5cGUucG9wdWxhdGVE
ZWZhdWx0VmFsdWUocmVzdWx0LmJ1ZmZlciwgMCk7CisgICAgICAgICAgICAvLyBGSVhNRTogVmVy
aWZ5IGlmIHRoaXMgY2hhbmdlIGlzIHNhZmUuCisgICAgICAgICAgICB0eXBlLnBvcHVsYXRlRGVm
YXVsdFZhbHVlKHJlc3VsdC5idWZmZXIsIDApOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfTsKICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3Jz
LmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vz
c29ycy5qcwppbmRleCBhMDE4MTQ2OGEyNWVkNGMwOTA1MGQ3YmYxZDYxZjQ0ZWQzYTBhYTY2Li5k
NjUyMzk0YzU4YzZlYTY0OTg0NTRkMjEzMTFhN2E0M2ZhZTY5OTdhIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCisr
KyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3Nv
cnMuanMKQEAgLTI0LDkxICsyNCw5NiBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0aW9u
IHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKK2Z1bmN0aW9uIHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnNGb3JTdHJ1Y3RUeXBlKHByb2dyYW0sIHR5cGUpCiB7Ci0gICAgZm9yIChs
ZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghKHR5cGUg
aW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHsKLSAgICAgICAgICAgIGZ1
bmN0aW9uIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIGltcGxlbWVudGF0aW9u
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlzaXRJbXBsZW1l
bnRhdGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFZpc2l0aW5nIHRoZSB0eXBlIGZpcnN0IGVuc3VyZXMgdGhhdCB0aGUg
c3RydWN0IGxheW91dCBidWlsZGVyIGZpZ3VyZXMgb3V0IHRoZSBmaWVsZCdzCi0gICAgICAgICAg
ICAgICAgICAgIC8vIG9mZnNldC4KLSAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25E
YXRhLnR5cGUudmlzaXQodmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgfTsKKyAgICBmb3IgKGxl
dCBmaWVsZCBvZiB0eXBlLmZpZWxkcykgeworICAgICAgICBmdW5jdGlvbiBzZXR1cEltcGxlbWVu
dGF0aW9uRGF0YShuYXRpdmVGdW5jLCBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgeworICAgICAg
ICAgICAgbmF0aXZlRnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlv
bkRhdGEsIHZpc2l0b3IpID0+IHsKKyAgICAgICAgICAgICAgICAvLyBWaXNpdGluZyB0aGUgdHlw
ZSBmaXJzdCBlbnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQgYnVpbGRlciBmaWd1cmVzIG91
dCB0aGUgZmllbGQncworICAgICAgICAgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgICAgICAg
ICBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgICAgIH07
CiAKLSAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVudGF0aW9uID0gKGFyZ3VtZW50
TGlzdCwgbm9kZSkgPT4gewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1wbGVtZW50YXRp
b24oYXJndW1lbnRMaXN0LCBmaWVsZC5vZmZzZXQsIHR5cGUuc2l6ZSwgZmllbGQudHlwZS5zaXpl
KTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmdW5jdGlvbiBjcmVhdGVGaWVsZFR5cGUoKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBmaWVsZC50eXBlLnZpc2l0KG5ldyBSZXdyaXRlcigpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZVJl
ZigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVSZWYud3JhcCh0
eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGV0IGlzQ2Fz
dCA9IGZhbHNlOwotICAgICAgICAgICAgbGV0IHNoYWRlclR5cGU7Ci0gICAgICAgICAgICBsZXQg
bmF0aXZlRnVuYzsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24gPSAoYXJn
dW1lbnRMaXN0LCBub2RlKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0
aW9uKGFyZ3VtZW50TGlzdCwgZmllbGQub2Zmc2V0LCB0eXBlLnNpemUsIGZpZWxkLnR5cGUuc2l6
ZSk7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmdW5jdGlv
biBjcmVhdGVGaWVsZFR5cGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmllbGQu
dHlwZS52aXNpdChuZXcgUmV3cml0ZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZ1bmN0aW9uIGNyZWF0ZVR5cGVSZWYoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
VHlwZVJlZi53cmFwKHR5cGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsZXQgaXND
YXN0ID0gZmFsc2U7CisgICAgICAgIGxldCBzaGFkZXJUeXBlOworICAgICAgICBsZXQgbmF0aXZl
RnVuYzsKIAotICAgICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKLSAgICAg
ICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKLSAgICAgICAgICAgICAgICBmaWVs
ZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSwgY3JlYXRlRmllbGRUeXBlKCksCi0g
ICAgICAgICAgICAgICAgW25ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3Jl
YXRlVHlwZVJlZigpKV0sIGlzQ2FzdCwgc2hhZGVyVHlwZSk7Ci0gICAgICAgICAgICBzZXR1cElt
cGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUs
IGZpZWxkU2l6ZSkgPT4gewotICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihu
ZXcgRUJ1ZmZlcihmaWVsZFNpemUpLCAwKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuY29weUZy
b20oYmFzZS5wbHVzKG9mZnNldCksIGZpZWxkU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZl
RnVuYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9y
LmZpZWxkPQorICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAgICAgICBu
YXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJv
cGVyYXRvci4iICsgZmllbGQubmFtZSwgY3JlYXRlRmllbGRUeXBlKCksCisgICAgICAgICAgICBb
bmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkpXSwg
aXNDYXN0LCBzaGFkZXJUeXBlKTsKKyAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0
aXZlRnVuYywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAg
ICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihmaWVsZFNpemUpLCAw
KTsKKyAgICAgICAgICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLnBsdXMob2Zmc2V0KSwgZmllbGRT
aXplKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0pOworICAgICAgICBw
cm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzZXR0ZXI6
IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisg
ICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSArICI9Iiwg
Y3JlYXRlVHlwZVJlZigpLAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIG5ldyBGdW5j
UGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKSwKKyAgICAgICAg
ICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZUZpZWxk
VHlwZSgpKQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIGlzQ2FzdCwgc2hhZGVyVHlwZSk7
CisgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZSwgdmFs
dWVdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4geworICAgICAgICAgICAgbGV0
IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKHN0cnVjdFNpemUpLCAwKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLCBzdHJ1Y3RTaXplKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5wbHVzKG9mZnNldCkuY29weUZyb20odmFsdWUsIGZpZWxkU2l6ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9KTsKKyAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVu
Yyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAg
ICAgICBmdW5jdGlvbiBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkKKyAgICAgICAgewogICAgICAg
ICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAotICAgICAgICAgICAgICAgIGZpZWxk
Lm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lICsgIj0iLCBjcmVhdGVUeXBlUmVmKCks
CisgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3ImLiIgKyBmaWVsZC5uYW1l
LCBuZXcgUHRyVHlwZShmaWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgY3JlYXRlRmllbGRUeXBl
KCkpLAogICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJh
bWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkpLAotICAgICAgICAgICAg
ICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZUZpZWxk
VHlwZSgpKQorICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVUeXBlUmVm
KCkpKQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgaXNDYXN0LCBzaGFkZXJU
eXBlKTsKLSAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChb
YmFzZSwgdmFsdWVdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4gewotICAgICAg
ICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihzdHJ1Y3RTaXplKSwg
MCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UsIHN0cnVjdFNpemUpOwot
ICAgICAgICAgICAgICAgIHJlc3VsdC5wbHVzKG9mZnNldCkuY29weUZyb20odmFsdWUsIGZpZWxk
U2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHNldHVw
SW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6
ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UubG9hZFZhbHVl
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFiYXNlKQorICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgV1RyYXBFcnJvcihmaWVsZC5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJlZmVy
ZW5jZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChiYXNlLnBsdXMob2Zmc2V0
KSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVs
ZAotICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBBbmRlcihhZGRyZXNzU3BhY2UpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAotICAg
ICAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUs
IG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVGaWVsZFR5cGUo
KSksCi0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBG
dW5jUGFyYW1ldGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwg
bnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUHRyVHlwZShmaWVsZC5vcmln
aW4sIGFkZHJlc3NTcGFjZSwgY3JlYXRlVHlwZVJlZigpKSkKLSAgICAgICAgICAgICAgICAgICAg
XSwKLSAgICAgICAgICAgICAgICAgICAgaXNDYXN0LCBzaGFkZXJUeXBlKTsKLSAgICAgICAgICAg
ICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQs
IHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4gewotICAgICAgICAgICAgICAgICAgICBiYXNlID0g
YmFzZS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5jZSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RVB0ci5ib3goYmFzZS5wbHVzKG9mZnNldCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzZXR1cEFuZGVyKCJ0aHJlYWQiKTsKLSAgICAgICAgICAgIHNl
dHVwQW5kZXIoInRocmVhZGdyb3VwIik7Ci0gICAgICAgICAgICBzZXR1cEFuZGVyKCJkZXZpY2Ui
KTsKLSAgICAgICAgICAgIHNldHVwQW5kZXIoImNvbnN0YW50Iik7CiAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHNldHVwQW5kZXIoInRocmVhZCIpOworICAgICAgICBzZXR1cEFuZGVyKCJ0
aHJlYWRncm91cCIpOworICAgICAgICBzZXR1cEFuZGVyKCJkZXZpY2UiKTsKKyAgICAgICAgc2V0
dXBBbmRlcigiY29uc3RhbnQiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHN5bnRoZXNpemVTdHJ1
Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKK3sKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlw
ZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzeW50aGVzaXplU3Ry
dWN0QWNjZXNzb3JzRm9yU3RydWN0VHlwZShwcm9ncmFtLCB0eXBlKTsKICAgICB9CiB9CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwgYi9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKaW5kZXggZjVlYTNkOTAxOThkY2RiODcx
MzFmOTJjMjUwYzc0MzMwNGI2NmFjMC4uOThlMzg1MWYxNjk5YWE2Y2U2OGJmZDVhYjg0NjFhZTk3
ZGVlZDFjMSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5o
dG1sCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbApAQCAtMTQs
NiArMTQsNyBAQAogPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0PgogCiA8c2Ny
aXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJBbGxvY2F0
ZUF0RW50cnlQb2ludHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFub255bW91c1Zhcmlh
YmxlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IkFycmF5VHlwZS5qcyI+PC9zY3JpcHQ+CkBAIC04MCw2ICs4MSw3IEBA
CiA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IkludHJpbnNpY3MuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxhdGVDaGVja2VyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJMYXRlQ2hlY2tBbmRMYXlvdXRCdWZmZXJzLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJMZXhlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTGV4
ZXJUb2tlbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTGl0ZXJhbFR5cGVDaGVja2VyLmpz
Ij48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rl
c3QuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCmluZGV4IDFkYTlh
ZGZkZGZmMTZmODliOTI1NjkwNDg3ZDg3NzFmOWEyOGJiNjUuLjk5ODdmN2VlYWU4MmMzYjQxY2Zm
NzM4ZmMwZWZmNGVlZTgyNjIzZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5q
cwpAQCAtMzMxLDIyICszMzEsMjIgQEAgdGVzdHMgPSBuZXcgUHJveHkoe30sIHsKIAogdGVzdHMu
dGVybmFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbigpIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCi0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHRlc3QgaW50IGZvbyhpbnQgeCkK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHggPCAzID8gNCA6IDU7CiAgICAgICAgIH0K
LSAgICAgICAgaW50IGJhcihpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgYmFyKGludCB4KQogICAg
ICAgICB7CiAgICAgICAgICAgICBpbnQgeSA9IDE7CiAgICAgICAgICAgICBpbnQgeiA9IDI7CiAg
ICAgICAgICAgICAoeCA8IDMgPyB5IDogeikgPSA3OwogICAgICAgICAgICAgcmV0dXJuIHk7CiAg
ICAgICAgIH0KLSAgICAgICAgaW50IGJheihpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgYmF6KGlu
dCB4KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4geCA8IDEwID8gMTEgOiB4IDwgMTIg
PyAxNCA6IDE1OwogICAgICAgICB9Ci0gICAgICAgIGludCBxdXV4KGludCB4KQorICAgICAgICB0
ZXN0IGludCBxdXV4KGludCB4KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gMyA8IDQg
PyB4IDogNTsKICAgICAgICAgfQpAQCAtNDE1LDY1ICs0MTUsNjUgQEAgdGVzdHMudGVybmFyeUV4
cHJlc3Npb25Jc0xWYWx1ZSA9IGZ1bmN0aW9uKCkgewogfQogCiB0ZXN0cy5saXRlcmFsQm9vbCA9
IGZ1bmN0aW9uKCkgewotICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKCJib29sIGZvbygpIHsgcmV0
dXJuIHRydWU7IH0iKTsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCBib29sIGZvbygp
IHsgcmV0dXJuIHRydWU7IH0iKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSksIHRydWUpOwogfQogCiB0ZXN0cy5pZGVudGl0eUJvb2wgPSBm
dW5jdGlvbigpIHsKLSAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgiYm9vbCBmb28oYm9vbCB4KSB7
IHJldHVybiB4OyB9Iik7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoInRlc3QgYm9vbCBmb28o
Ym9vbCB4KSB7IHJldHVybiB4OyB9Iik7CiAgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHByb2dyYW0sIHRydWUpXSksIHRydWUpOwog
ICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
Qm9vbChwcm9ncmFtLCBmYWxzZSldKSwgZmFsc2UpOwogfQogCiB0ZXN0cy5pbnRTaW1wbGVNYXRo
ID0gZnVuY3Rpb24oKSB7Ci0gICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoImludCBmb28oaW50IHgs
IGludCB5KSB7IHJldHVybiB4ICsgeTsgfSIpOworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKCJ0
ZXN0IGludCBmb28oaW50IHgsIGludCB5KSB7IHJldHVybiB4ICsgeTsgfSIpOwogICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJvZ3Jh
bSwgNyksIG1ha2VJbnQocHJvZ3JhbSwgNSldKSwgMTIpOwotICAgIHByb2dyYW0gPSBkb1ByZXAo
ImludCBmb28oaW50IHgsIGludCB5KSB7IHJldHVybiB4IC0geTsgfSIpOworICAgIHByb2dyYW0g
PSBkb1ByZXAoInRlc3QgaW50IGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJuIHggLSB5OyB9Iik7
CiAgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFr
ZUludChwcm9ncmFtLCA3KSwgbWFrZUludChwcm9ncmFtLCA1KV0pLCAyKTsKICAgICBjaGVja0lu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KHByb2dyYW0s
IDUpLCBtYWtlSW50KHByb2dyYW0sIDcpXSksIC0yKTsKLSAgICBwcm9ncmFtID0gZG9QcmVwKCJp
bnQgZm9vKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCAqIHk7IH0iKTsKKyAgICBwcm9ncmFtID0g
ZG9QcmVwKCJ0ZXN0IGludCBmb28oaW50IHgsIGludCB5KSB7IHJldHVybiB4ICogeTsgfSIpOwog
ICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJ
bnQocHJvZ3JhbSwgNyksIG1ha2VJbnQocHJvZ3JhbSwgNSldKSwgMzUpOwogICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJvZ3JhbSwg
NyksIG1ha2VJbnQocHJvZ3JhbSwgLTUpXSksIC0zNSk7Ci0gICAgcHJvZ3JhbSA9IGRvUHJlcCgi
aW50IGZvbyhpbnQgeCwgaW50IHkpIHsgcmV0dXJuIHggLyB5OyB9Iik7CisgICAgcHJvZ3JhbSA9
IGRvUHJlcCgidGVzdCBpbnQgZm9vKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCAvIHk7IH0iKTsK
ICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KHByb2dyYW0sIDcpLCBtYWtlSW50KHByb2dyYW0sIDIpXSksIDMpOwogICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJvZ3JhbSwg
NyksIG1ha2VJbnQocHJvZ3JhbSwgLTIpXSksIC0zKTsKIH0KIAogdGVzdHMudWludFNpbXBsZU1h
dGggPSBmdW5jdGlvbigpIHsKLSAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgidWludCBmb28odWlu
dCB4LCB1aW50IHkpIHsgcmV0dXJuIHggKyB5OyB9Iik7CisgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoInRlc3QgdWludCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggKyB5OyB9Iik7CiAg
ICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VV
aW50KHByb2dyYW0sIDcpLCBtYWtlVWludChwcm9ncmFtLCA1KV0pLCAxMik7Ci0gICAgcHJvZ3Jh
bSA9IGRvUHJlcCgidWludCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggLSB5OyB9Iik7
CisgICAgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCB1aW50IGZvbyh1aW50IHgsIHVpbnQgeSkgeyBy
ZXR1cm4geCAtIHk7IH0iKTsKICAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZVVpbnQocHJvZ3JhbSwgNyksIG1ha2VVaW50KHByb2dyYW0sIDUp
XSksIDIpOwogICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlVWludChwcm9ncmFtLCA1KSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgNDI5NDk2
NzI5NCk7Ci0gICAgcHJvZ3JhbSA9IGRvUHJlcCgidWludCBmb28odWludCB4LCB1aW50IHkpIHsg
cmV0dXJuIHggKiB5OyB9Iik7CisgICAgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCB1aW50IGZvbyh1
aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCAqIHk7IH0iKTsKICAgICBjaGVja1VpbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVpbnQocHJvZ3JhbSwgNyksIG1h
a2VVaW50KHByb2dyYW0sIDUpXSksIDM1KTsKLSAgICBwcm9ncmFtID0gZG9QcmVwKCJ1aW50IGZv
byh1aW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCAvIHk7IH0iKTsKKyAgICBwcm9ncmFtID0gZG9Q
cmVwKCJ0ZXN0IHVpbnQgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJldHVybiB4IC8geTsgfSIpOwog
ICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
VWludChwcm9ncmFtLCA3KSwgbWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMyk7CiB9CiAKIHRlc3Rz
LnVjaGFyU2ltcGxlTWF0aCA9IGZ1bmN0aW9uKCkgewotICAgIGxldCBwcm9ncmFtID0gZG9QcmVw
KCJ1Y2hhciBmb28odWNoYXIgeCwgdWNoYXIgeSkgeyByZXR1cm4geCArIHk7IH0iKTsKKyAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCB1Y2hhciBmb28odWNoYXIgeCwgdWNoYXIgeSkgeyBy
ZXR1cm4geCArIHk7IH0iKTsKICAgICBjaGVja1VjaGFyKHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW21ha2VVY2hhcihwcm9ncmFtLCA3KSwgbWFrZVVjaGFyKHByb2dyYW0s
IDUpXSksIDEyKTsKLSAgICBwcm9ncmFtID0gZG9QcmVwKCJ1Y2hhciBmb28odWNoYXIgeCwgdWNo
YXIgeSkgeyByZXR1cm4geCAtIHk7IH0iKTsKKyAgICBwcm9ncmFtID0gZG9QcmVwKCJ0ZXN0IHVj
aGFyIGZvbyh1Y2hhciB4LCB1Y2hhciB5KSB7IHJldHVybiB4IC0geTsgfSIpOwogICAgIGNoZWNr
VWNoYXIocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZVVjaGFyKHBy
b2dyYW0sIDcpLCBtYWtlVWNoYXIocHJvZ3JhbSwgNSldKSwgMik7CiAgICAgY2hlY2tVY2hhcihw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWNoYXIocHJvZ3JhbSwg
NSksIG1ha2VVY2hhcihwcm9ncmFtLCA3KV0pLCAyNTQpOwotICAgIHByb2dyYW0gPSBkb1ByZXAo
InVjaGFyIGZvbyh1Y2hhciB4LCB1Y2hhciB5KSB7IHJldHVybiB4ICogeTsgfSIpOworICAgIHBy
b2dyYW0gPSBkb1ByZXAoInRlc3QgdWNoYXIgZm9vKHVjaGFyIHgsIHVjaGFyIHkpIHsgcmV0dXJu
IHggKiB5OyB9Iik7CiAgICAgY2hlY2tVY2hhcihwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlVWNoYXIocHJvZ3JhbSwgNyksIG1ha2VVY2hhcihwcm9ncmFtLCA1KV0p
LCAzNSk7Ci0gICAgcHJvZ3JhbSA9IGRvUHJlcCgidWNoYXIgZm9vKHVjaGFyIHgsIHVjaGFyIHkp
IHsgcmV0dXJuIHggLyB5OyB9Iik7CisgICAgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCB1Y2hhciBm
b28odWNoYXIgeCwgdWNoYXIgeSkgeyByZXR1cm4geCAvIHk7IH0iKTsKICAgICBjaGVja1VjaGFy
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVY2hhcihwcm9ncmFt
LCA3KSwgbWFrZVVjaGFyKHByb2dyYW0sIDIpXSksIDMpOwogfQogCiB0ZXN0cy5lcXVhbGl0eSA9
IGZ1bmN0aW9uKCkgewotICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKCJib29sIGZvbyh1aW50IHgs
IHVpbnQgeSkgeyByZXR1cm4geCA9PSB5OyB9Iik7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
InRlc3QgYm9vbCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggPT0geTsgfSIpOwogICAg
IGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWlu
dChwcm9ncmFtLCA3KSwgbWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgZmFsc2UpOwogICAgIGNoZWNr
Qm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWludChwcm9n
cmFtLCA3KSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgdHJ1ZSk7Ci0gICAgcHJvZ3JhbSA9IGRv
UHJlcCgiYm9vbCBmb28odWNoYXIgeCwgdWNoYXIgeSkgeyByZXR1cm4geCA9PSB5OyB9Iik7Cisg
ICAgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCBib29sIGZvbyh1Y2hhciB4LCB1Y2hhciB5KSB7IHJl
dHVybiB4ID09IHk7IH0iKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZVVjaGFyKHByb2dyYW0sIDcpLCBtYWtlVWNoYXIocHJvZ3JhbSwg
NSldKSwgZmFsc2UpOwogICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFttYWtlVWNoYXIocHJvZ3JhbSwgNyksIG1ha2VVY2hhcihwcm9ncmFtLCA3KV0p
LCB0cnVlKTsKLSAgICBwcm9ncmFtID0gZG9QcmVwKCJib29sIGZvbyhpbnQgeCwgaW50IHkpIHsg
cmV0dXJuIHggPT0geTsgfSIpOworICAgIHByb2dyYW0gPSBkb1ByZXAoInRlc3QgYm9vbCBmb28o
aW50IHgsIGludCB5KSB7IHJldHVybiB4ID09IHk7IH0iKTsKICAgICBjaGVja0Jvb2wocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludChwcm9ncmFtLCA3KSwgbWFr
ZUludChwcm9ncmFtLCA1KV0pLCBmYWxzZSk7CiAgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJvZ3JhbSwgNyksIG1ha2VJbnQocHJv
Z3JhbSwgNyldKSwgdHJ1ZSk7Ci0gICAgcHJvZ3JhbSA9IGRvUHJlcCgiYm9vbCBmb28oYm9vbCB4
LCBib29sIHkpIHsgcmV0dXJuIHggPT0geTsgfSIpOworICAgIHByb2dyYW0gPSBkb1ByZXAoInRl
c3QgYm9vbCBmb28oYm9vbCB4LCBib29sIHkpIHsgcmV0dXJuIHggPT0geTsgfSIpOwogICAgIGNo
ZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChw
cm9ncmFtLCBmYWxzZSksIG1ha2VCb29sKHByb2dyYW0sIHRydWUpXSksIGZhbHNlKTsKICAgICBj
aGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUJvb2wo
cHJvZ3JhbSwgdHJ1ZSksIG1ha2VCb29sKHByb2dyYW0sIGZhbHNlKV0pLCBmYWxzZSk7CiAgICAg
Y2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29s
KHByb2dyYW0sIGZhbHNlKSwgbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpXSksIHRydWUpOwpAQCAt
NDgyLDIyICs0ODIsMjIgQEAgdGVzdHMuZXF1YWxpdHkgPSBmdW5jdGlvbigpIHsKIAogdGVzdHMu
bG9naWNhbE5lZ2F0aW9uID0gZnVuY3Rpb24oKQogewotICAgIGxldCBwcm9ncmFtID0gZG9QcmVw
KCJib29sIGZvbyhib29sIHgpIHsgcmV0dXJuICF4OyB9Iik7CisgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoInRlc3QgYm9vbCBmb28oYm9vbCB4KSB7IHJldHVybiAheDsgfSIpOwogICAgIGNoZWNr
Qm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlQm9vbChwcm9n
cmFtLCB0cnVlKV0pLCBmYWxzZSk7CiAgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKV0pLCB0cnVlKTsKIH0K
IAogdGVzdHMubm90RXF1YWxpdHkgPSBmdW5jdGlvbigpIHsKLSAgICBsZXQgcHJvZ3JhbSA9IGRv
UHJlcCgiYm9vbCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggIT0geTsgfSIpOworICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKCJ0ZXN0IGJvb2wgZm9vKHVpbnQgeCwgdWludCB5KSB7IHJl
dHVybiB4ICE9IHk7IH0iKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbbWFrZVVpbnQocHJvZ3JhbSwgNyksIG1ha2VVaW50KHByb2dyYW0sIDUp
XSksIHRydWUpOwogICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFttYWtlVWludChwcm9ncmFtLCA3KSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgZmFs
c2UpOwotICAgIHByb2dyYW0gPSBkb1ByZXAoImJvb2wgZm9vKHVjaGFyIHgsIHVjaGFyIHkpIHsg
cmV0dXJuIHggIT0geTsgfSIpOworICAgIHByb2dyYW0gPSBkb1ByZXAoInRlc3QgYm9vbCBmb28o
dWNoYXIgeCwgdWNoYXIgeSkgeyByZXR1cm4geCAhPSB5OyB9Iik7CiAgICAgY2hlY2tCb29sKHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VVY2hhcihwcm9ncmFtLCA3
KSwgbWFrZVVjaGFyKHByb2dyYW0sIDUpXSksIHRydWUpOwogICAgIGNoZWNrQm9vbChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlVWNoYXIocHJvZ3JhbSwgNyksIG1h
a2VVY2hhcihwcm9ncmFtLCA3KV0pLCBmYWxzZSk7Ci0gICAgcHJvZ3JhbSA9IGRvUHJlcCgiYm9v
bCBmb28oaW50IHgsIGludCB5KSB7IHJldHVybiB4ICE9IHk7IH0iKTsKKyAgICBwcm9ncmFtID0g
ZG9QcmVwKCJ0ZXN0IGJvb2wgZm9vKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCAhPSB5OyB9Iik7
CiAgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQocHJvZ3JhbSwgNyksIG1ha2VJbnQocHJvZ3JhbSwgNSldKSwgdHJ1ZSk7CiAgICAgY2hl
Y2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJv
Z3JhbSwgNyksIG1ha2VJbnQocHJvZ3JhbSwgNyldKSwgZmFsc2UpOwotICAgIHByb2dyYW0gPSBk
b1ByZXAoImJvb2wgZm9vKGJvb2wgeCwgYm9vbCB5KSB7IHJldHVybiB4ICE9IHk7IH0iKTsKKyAg
ICBwcm9ncmFtID0gZG9QcmVwKCJ0ZXN0IGJvb2wgZm9vKGJvb2wgeCwgYm9vbCB5KSB7IHJldHVy
biB4ICE9IHk7IH0iKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpLCBtYWtlQm9vbChwcm9ncmFtLCB0
cnVlKV0pLCB0cnVlKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1ha2VCb29sKHByb2dyYW0sIGZh
bHNlKV0pLCB0cnVlKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpLCBtYWtlQm9vbChwcm9ncmFtLCBm
YWxzZSldKSwgZmFsc2UpOwpAQCAtNTA3LDE5ICs1MDcsMTkgQEAgdGVzdHMubm90RXF1YWxpdHkg
PSBmdW5jdGlvbigpIHsKIHRlc3RzLmVxdWFsaXR5VHlwZUZhaWx1cmUgPSBmdW5jdGlvbigpCiB7
CiAgICAgY2hlY2tGYWlsKAotICAgICAgICAoKSA9PiBkb1ByZXAoImJvb2wgZm9vKGludCB4LCB1
aW50IHkpIHsgcmV0dXJuIHggPT0geTsgfSIpLAorICAgICAgICAoKSA9PiBkb1ByZXAoInRlc3Qg
Ym9vbCBmb28oaW50IHgsIHVpbnQgeSkgeyByZXR1cm4geCA9PSB5OyB9IiksCiAgICAgICAgIChl
KSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiL2ludGVy
bmFsL3Rlc3Q6MSIpICE9IC0xKTsKIH0KIAogdGVzdHMuZ2VuZXJhbE5lZ2F0aW9uID0gZnVuY3Rp
b24oKQogewotICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKCJib29sIGZvbyhpbnQgeCkgeyByZXR1
cm4gIXg7IH0iKTsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCBib29sIGZvbyhpbnQg
eCkgeyByZXR1cm4gIXg7IH0iKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludChwcm9ncmFtLCA3KV0pLCBmYWxzZSk7CiAgICAgY2hl
Y2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJv
Z3JhbSwgMCldKSwgdHJ1ZSk7CiB9CiAKIHRlc3RzLmFkZDEgPSBmdW5jdGlvbigpIHsKLSAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcCgiaW50IGZvbyhpbnQgeCkgeyByZXR1cm4geCArIDE7IH0iKTsK
KyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCBpbnQgZm9vKGludCB4KSB7IHJldHVybiB4
ICsgMTsgfSIpOwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW21ha2VJbnQocHJvZ3JhbSwgNDIpXSksIDQzKTsKIH0KIApAQCAtNTMzLDcgKzUzMyw3
IEBAIHRlc3RzLm5hbWVSZXNvbHV0aW9uRmFpbHVyZSA9IGZ1bmN0aW9uKCkKIHRlc3RzLnNpbXBs
ZVZhcmlhYmxlID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAg
ICAgICAgaW50IGZvbyhpbnQgcCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGludCBwKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gcDsKICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC01NDUsNyArNTQ1LDcgQEAgdGVzdHMuc2ltcGxlVmFyaWFibGUgPSBmdW5jdGlvbigp
CiB0ZXN0cy5zaW1wbGVBc3NpZ25tZW50ID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFt
ID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbyhpbnQgcCkKKyAgICAgICAgdGVzdCBpbnQgZm9v
KGludCBwKQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgcmVzdWx0OwogICAgICAgICAgICAg
cmVzdWx0ID0gcDsKQEAgLTU1OCw3ICs1NTgsNyBAQCB0ZXN0cy5zaW1wbGVBc3NpZ25tZW50ID0g
ZnVuY3Rpb24oKQogdGVzdHMuc2ltcGxlRGVmYXVsdCA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oKQorICAgICAgICB0ZXN0IGludCBm
b28oKQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgcmVzdWx0OwogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTU3MCw3ICs1NzAsNyBAQCB0ZXN0cy5zaW1wbGVEZWZhdWx0ID0gZnVu
Y3Rpb24oKQogdGVzdHMuc2ltcGxlRGVyZWZlcmVuY2UgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0
IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGRldmljZSBpbnQqIHApCisgICAg
ICAgIHRlc3QgaW50IGZvbyhkZXZpY2UgaW50KiBwKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gKnA7CiAgICAgICAgIH0KQEAgLTU4Myw3ICs1ODMsNyBAQCB0ZXN0cy5zaW1wbGVEZXJl
ZmVyZW5jZSA9IGZ1bmN0aW9uKCkKIHRlc3RzLmRlcmVmZXJlbmNlU3RvcmUgPSBmdW5jdGlvbigp
CiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB2b2lkIGZvbyhkZXZpY2Ug
aW50KiBwKQorICAgICAgICB0ZXN0IHZvaWQgZm9vKGRldmljZSBpbnQqIHApCiAgICAgICAgIHsK
ICAgICAgICAgICAgICpwID0gNTI7CiAgICAgICAgIH0KQEAgLTU5OCw3ICs1OTgsNyBAQCB0ZXN0
cy5kZXJlZmVyZW5jZVN0b3JlID0gZnVuY3Rpb24oKQogdGVzdHMuc2ltcGxlTWFrZVB0ciA9IGZ1
bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHRocmVhZCBp
bnQqIGZvbygpCisgICAgICAgIHRlc3QgdGhyZWFkIGludCogZm9vKCkKICAgICAgICAgewogICAg
ICAgICAgICAgaW50IHggPSA0MjsKICAgICAgICAgICAgIHJldHVybiAmeDsKQEAgLTYxOSw3ICs2
MTksNyBAQCB0ZXN0cy5zaW1wbGVNYWtlUHRyID0gZnVuY3Rpb24oKQogdGVzdHMudGhyZWFkQXJy
YXlMb2FkID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAg
ICAgaW50IGZvbyh0aHJlYWQgaW50W10gYXJyYXkpCisgICAgICAgIHRlc3QgaW50IGZvbyh0aHJl
YWQgaW50W10gYXJyYXkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhcnJheVswdV07
CiAgICAgICAgIH0KQEAgLTYzMyw3ICs2MzMsNyBAQCB0ZXN0cy50aHJlYWRBcnJheUxvYWQgPSBm
dW5jdGlvbigpCiB0ZXN0cy50aHJlYWRBcnJheUxvYWRJbnRMaXRlcmFsID0gZnVuY3Rpb24oKQog
ewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbyh0aHJlYWQgaW50
W10gYXJyYXkpCisgICAgICAgIHRlc3QgaW50IGZvbyh0aHJlYWQgaW50W10gYXJyYXkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBhcnJheVswXTsKICAgICAgICAgfQpAQCAtNjQ3LDcg
KzY0Nyw3IEBAIHRlc3RzLnRocmVhZEFycmF5TG9hZEludExpdGVyYWwgPSBmdW5jdGlvbigpCiB0
ZXN0cy5kZXZpY2VBcnJheUxvYWQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoYAotICAgICAgICBpbnQgZm9vKGRldmljZSBpbnRbXSBhcnJheSkKKyAgICAgICAgdGVz
dCBpbnQgZm9vKGRldmljZSBpbnRbXSBhcnJheSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGFycmF5WzB1XTsKICAgICAgICAgfQpAQCAtNjYxLDcgKzY2MSw3IEBAIHRlc3RzLmRldmlj
ZUFycmF5TG9hZCA9IGZ1bmN0aW9uKCkKIHRlc3RzLnRocmVhZEFycmF5U3RvcmUgPSBmdW5jdGlv
bigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB2b2lkIGZvbyh0aHJl
YWQgaW50W10gYXJyYXksIGludCB2YWx1ZSkKKyAgICAgICAgdGVzdCB2b2lkIGZvbyh0aHJlYWQg
aW50W10gYXJyYXksIGludCB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXlbMHVd
ID0gdmFsdWU7CiAgICAgICAgIH0KQEAgLTY4Miw3ICs2ODIsNyBAQCB0ZXN0cy50aHJlYWRBcnJh
eVN0b3JlID0gZnVuY3Rpb24oKQogdGVzdHMuZGV2aWNlQXJyYXlTdG9yZSA9IGZ1bmN0aW9uKCkK
IHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHZvaWQgZm9vKGRldmljZSBp
bnRbXSBhcnJheSwgaW50IHZhbHVlKQorICAgICAgICB0ZXN0IHZvaWQgZm9vKGRldmljZSBpbnRb
XSBhcnJheSwgaW50IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheVswdV0gPSB2
YWx1ZTsKICAgICAgICAgfQpAQCAtNzAzLDcgKzcwMyw3IEBAIHRlc3RzLmRldmljZUFycmF5U3Rv
cmUgPSBmdW5jdGlvbigpCiB0ZXN0cy5kZXZpY2VBcnJheVN0b3JlSW50TGl0ZXJhbCA9IGZ1bmN0
aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHZvaWQgZm9vKGRl
dmljZSBpbnRbXSBhcnJheSwgaW50IHZhbHVlKQorICAgICAgICB0ZXN0IHZvaWQgZm9vKGRldmlj
ZSBpbnRbXSBhcnJheSwgaW50IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheVsw
XSA9IHZhbHVlOwogICAgICAgICB9CkBAIC04NDEsNyArODQxLDcgQEAgdGVzdHMuc2ltcGxlU3Ry
dWN0ID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgaW50IHg7CiAgICAgICAgICAgICBpbnQgeTsK
ICAgICAgICAgfQotICAgICAgICBGb28gZm9vKEZvbyBmb28pCisgICAgICAgIHRlc3QgRm9vIGZv
byhGb28gZm9vKQogICAgICAgICB7CiAgICAgICAgICAgICBGb28gcmVzdWx0OwogICAgICAgICAg
ICAgcmVzdWx0LnggPSBmb28ueTsKQEAgLTg4OCw3ICs4ODgsNyBAQCB0ZXN0cy5zdG9yZU51bGwg
PSBmdW5jdGlvbigpCiB0ZXN0cy5yZXR1cm5OdWxsID0gZnVuY3Rpb24oKQogewogICAgIGxldCBw
cm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgdGhyZWFkIGludCogZm9vKCkgeyByZXR1cm4gbnVs
bDsgfQorICAgICAgICB0ZXN0IHRocmVhZCBpbnQqIGZvbygpIHsgcmV0dXJuIG51bGw7IH0KICAg
ICBgKTsKICAgICBsZXQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSk7
CiAgICAgaWYgKCFyZXN1bHQudHlwZS5pc1B0cikKQEAgLTkwMiw3ICs5MDIsNyBAQCB0ZXN0cy5y
ZXR1cm5OdWxsID0gZnVuY3Rpb24oKQogdGVzdHMuZGVyZWZlcmVuY2VEZWZhdWx0TnVsbCA9IGZ1
bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28o
KQorICAgICAgICB0ZXN0IGludCBmb28oKQogICAgICAgICB7CiAgICAgICAgICAgICB0aHJlYWQg
aW50KiBwOwogICAgICAgICAgICAgcmV0dXJuICpwOwpAQCAtOTE2LDcgKzkxNiw3IEBAIHRlc3Rz
LmRlcmVmZXJlbmNlRGVmYXVsdE51bGwgPSBmdW5jdGlvbigpCiB0ZXN0cy5kZWZhdWx0SW5pdGlh
bGl6ZWROdWxsID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAg
ICAgICAgaW50IGZvbygpCisgICAgICAgIHRlc3QgaW50IGZvbygpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHRocmVhZCBpbnQqIHAgPSBudWxsOzsKICAgICAgICAgICAgIHJldHVybiAqcDsKQEAg
LTkzNCw3ICs5MzQsNyBAQCB0ZXN0cy5wYXNzTnVsbFRvUHRyTW9ub21vcnBoaWMgPSBmdW5jdGlv
bigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcHRyOwogICAgICAgICB9Ci0gICAg
ICAgIGludCBiYXIoKQorICAgICAgICB0ZXN0IGludCBiYXIoKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gZm9vKG51bGwpOwogICAgICAgICB9CkBAIC05NjYsNyArOTY2LDcgQEAgdGVz
dHMuc3RvcmVOdWxsQXJyYXlSZWYgPSBmdW5jdGlvbigpCiB0ZXN0cy5yZXR1cm5OdWxsQXJyYXlS
ZWYgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB0
aHJlYWQgaW50W10gZm9vKCkgeyByZXR1cm4gbnVsbDsgfQorICAgICAgICB0ZXN0IHRocmVhZCBp
bnRbXSBmb28oKSB7IHJldHVybiBudWxsOyB9CiAgICAgYCk7CiAgICAgbGV0IHJlc3VsdCA9IGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pOwogICAgIGlmICghcmVzdWx0LnR5cGUuaXNB
cnJheVJlZikKQEAgLTk4MCw3ICs5ODAsNyBAQCB0ZXN0cy5yZXR1cm5OdWxsQXJyYXlSZWYgPSBm
dW5jdGlvbigpCiB0ZXN0cy5kZXJlZmVyZW5jZURlZmF1bHROdWxsQXJyYXlSZWYgPSBmdW5jdGlv
bigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKCkKKyAg
ICAgICAgdGVzdCBpbnQgZm9vKCkKICAgICAgICAgewogICAgICAgICAgICAgdGhyZWFkIGludFtd
IHA7CiAgICAgICAgICAgICByZXR1cm4gcFswdV07CkBAIC05OTQsNyArOTk0LDcgQEAgdGVzdHMu
ZGVyZWZlcmVuY2VEZWZhdWx0TnVsbEFycmF5UmVmID0gZnVuY3Rpb24oKQogdGVzdHMuZGVmYXVs
dEluaXRpYWxpemVkTnVsbEFycmF5UmVmID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFt
ID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbygpCisgICAgICAgIHRlc3QgaW50IGZvbygpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHRocmVhZCBpbnRbXSBwID0gbnVsbDsKICAgICAgICAgICAg
IHJldHVybiBwWzB1XTsKQEAgLTEwMDgsNyArMTAwOCw3IEBAIHRlc3RzLmRlZmF1bHRJbml0aWFs
aXplZE51bGxBcnJheVJlZiA9IGZ1bmN0aW9uKCkKIHRlc3RzLmRlZmF1bHRJbml0aWFsaXplZE51
bGxBcnJheVJlZkludExpdGVyYWwgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoYAotICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKICAgICAg
ICAgewogICAgICAgICAgICAgdGhyZWFkIGludFtdIHAgPSBudWxsOwogICAgICAgICAgICAgcmV0
dXJuIHBbMF07CkBAIC0xMDI2LDcgKzEwMjYsNyBAQCB0ZXN0cy5wYXNzTnVsbFRvUHRyTW9ub21v
cnBoaWNBcnJheVJlZiA9IGZ1bmN0aW9uKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IHB0clswdV07CiAgICAgICAgIH0KLSAgICAgICAgaW50IGJhcigpCisgICAgICAgIHRlc3QgaW50
IGJhcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmb28obnVsbCk7CiAgICAgICAg
IH0KQEAgLTEwMzgsMTMgKzEwMzgsMTMgQEAgdGVzdHMucGFzc051bGxUb1B0ck1vbm9tb3JwaGlj
QXJyYXlSZWYgPSBmdW5jdGlvbigpCiAKIHRlc3RzLnJldHVybkludExpdGVyYWxVaW50ID0gZnVu
Y3Rpb24oKQogewotICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKCJ1aW50IGZvbygpIHsgcmV0dXJu
IDQyOyB9Iik7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoInRlc3QgdWludCBmb28oKSB7IHJl
dHVybiA0MjsgfSIpOwogICAgIGNoZWNrTnVtYmVyKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCA0Mik7CiB9CiAKIHRlc3RzLnJldHVybkludExpdGVyYWxGbG9hdCA9
IGZ1bmN0aW9uKCkKIHsKLSAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgiZmxvYXQgZm9vKCkgeyBy
ZXR1cm4gNDI7IH0iKTsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCBmbG9hdCBmb28o
KSB7IHJldHVybiA0MjsgfSIpOwogICAgIGNoZWNrTnVtYmVyKHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7CiB9CiAKQEAgLTEwNzIsNyArMTA3Miw3IEBAIHRl
c3RzLmJhZEludExpdGVyYWxGb3JGbG9hdCA9IGZ1bmN0aW9uKCkKIHRlc3RzLmRvdWJsZU5vdCA9
IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGJvb2wg
Zm9vKGJvb2wgeCkKKyAgICAgICAgdGVzdCBib29sIGZvbyhib29sIHgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiAhIXg7CiAgICAgICAgIH0KQEAgLTEwOTYsNyArMTA5Niw3IEBAIHRl
c3RzLnNpbXBsZVJlY3Vyc2lvbiA9IGZ1bmN0aW9uKCkKIHRlc3RzLnZhcmlhYmxlU2hhZG93aW5n
ID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50
IGZvbygpCisgICAgICAgIHRlc3QgaW50IGZvbygpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlu
dCB5OwogICAgICAgICAgICAgaW50IHggPSA3OwpAQCAtMTEwOSw3ICsxMTA5LDcgQEAgdGVzdHMu
dmFyaWFibGVTaGFkb3dpbmcgPSBmdW5jdGlvbigpCiAgICAgYCk7CiAgICAgY2hlY2tJbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDgpOwogICAgIHByb2dyYW0g
PSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKICAg
ICAgICAgewogICAgICAgICAgICAgaW50IHk7CiAgICAgICAgICAgICBpbnQgeCA9IDc7CkBAIC0x
MTI2LDcgKzExMjYsNyBAQCB0ZXN0cy52YXJpYWJsZVNoYWRvd2luZyA9IGZ1bmN0aW9uKCkKIHRl
c3RzLmlmU3RhdGVtZW50ID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVw
KGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQog
ICAgICAgICB7CiAgICAgICAgICAgICBpbnQgeSA9IDY7CiAgICAgICAgICAgICBpZiAoeCA9PSA3
KSB7CkBAIC0xMTQ3LDcgKzExNDcsNyBAQCB0ZXN0cy5pZlN0YXRlbWVudCA9IGZ1bmN0aW9uKCkK
IHRlc3RzLmlmRWxzZVN0YXRlbWVudCA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHRlc3QgaW50IGZvbyhp
bnQgeCkKICAgICAgICAgewogICAgICAgICAgICAgaW50IHkgPSA2OwogICAgICAgICAgICAgaWYg
KHggPT0gNykgewpAQCAtMTE3MCw3ICsxMTcwLDcgQEAgdGVzdHMuaWZFbHNlU3RhdGVtZW50ID0g
ZnVuY3Rpb24oKQogdGVzdHMuaWZFbHNlSWZTdGF0ZW1lbnQgPSBmdW5jdGlvbigpCiB7CiAgICAg
bGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB0
ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludCB5ID0gNjsKICAg
ICAgICAgICAgIGlmICh4ID09IDcpIHsKQEAgLTExOTMsNyArMTE5Myw3IEBAIHRlc3RzLmlmRWxz
ZUlmU3RhdGVtZW50ID0gZnVuY3Rpb24oKQogdGVzdHMuaWZFbHNlSWZFbHNlU3RhdGVtZW50ID0g
ZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZv
byhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQogICAgICAgICB7CiAgICAgICAg
ICAgICBpbnQgeSA9IDY7CiAgICAgICAgICAgICBpZiAoeCA9PSA3KSB7CkBAIC0xMjU1LDcgKzEy
NTUsNyBAQCB0ZXN0cy5yZXR1cm5JZiA9IGZ1bmN0aW9uKCkKICAgICAgICAgYCksCiAgICAgICAg
IChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CiAgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGludCB5ID0gNjsKICAgICAgICAgICAgIGlmICh4ID09
IDcpIHsKQEAgLTEyODYsNyArMTI4Niw3IEBAIHRlc3RzLnJldHVybklmID0gZnVuY3Rpb24oKQog
ICAgICAgICBgKSwKICAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKICAg
ICBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgdGVz
dCBpbnQgZm9vKGludCB4KQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgeSA9IDY7CiAgICAg
ICAgICAgICBpZiAoeCA9PSA3KSB7CkBAIC0xMzE5LDcgKzEzMTksNyBAQCB0ZXN0cy5yZXR1cm5J
ZiA9IGZ1bmN0aW9uKCkKICAgICAgICAgYCksCiAgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2Yg
V1R5cGVFcnJvcik7CiAgICAgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oaW50
IHgpCisgICAgICAgIHRlc3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAgewogICAgICAgICAgICAg
aW50IHkgPSA2OwogICAgICAgICAgICAgaWYgKHggPT0gNykKQEAgLTEzMzMsNyArMTMzMyw3IEBA
IHRlc3RzLnJldHVybklmID0gZnVuY3Rpb24oKQogdGVzdHMuc2ltcGxlV2hpbGUgPSBmdW5jdGlv
bigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4
KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHdo
aWxlICh4IDwgMTMpCiAgICAgICAgICAgICAgICAgeCA9IHggKiAyOwpAQCAtMTM0OSw3ICsxMzQ5
LDcgQEAgdGVzdHMuaW50T3ZlcmxvYWRSZXNvbHV0aW9uID0gZnVuY3Rpb24oKQogICAgICAgICBp
bnQgZm9vKGludCkgeyByZXR1cm4gMTsgfQogICAgICAgICBpbnQgZm9vKHVpbnQpIHsgcmV0dXJu
IDI7IH0KICAgICAgICAgaW50IGZvbyhmbG9hdCkgeyByZXR1cm4gMzsgfQotICAgICAgICBpbnQg
YmFyKCkgeyByZXR1cm4gZm9vKDQyKTsgfQorICAgICAgICB0ZXN0IGludCBiYXIoKSB7IHJldHVy
biBmb28oNDIpOyB9CiAgICAgYCk7CiAgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJiYXIiLCBbXSksIDEpOwogfQpAQCAtMTM2MCw3ICsxMzYwLDcgQEAgdGVzdHMu
aW50T3ZlcmxvYWRSZXNvbHV0aW9uUmV2ZXJzZU9yZGVyID0gZnVuY3Rpb24oKQogICAgICAgICBp
bnQgZm9vKGZsb2F0KSB7IHJldHVybiAzOyB9CiAgICAgICAgIGludCBmb28odWludCkgeyByZXR1
cm4gMjsgfQogICAgICAgICBpbnQgZm9vKGludCkgeyByZXR1cm4gMTsgfQotICAgICAgICBpbnQg
YmFyKCkgeyByZXR1cm4gZm9vKDQyKTsgfQorICAgICAgICB0ZXN0IGludCBiYXIoKSB7IHJldHVy
biBmb28oNDIpOyB9CiAgICAgYCk7CiAgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJiYXIiLCBbXSksIDEpOwogfQpAQCAtMTM2OCw3ICsxMzY4LDcgQEAgdGVzdHMu
aW50T3ZlcmxvYWRSZXNvbHV0aW9uUmV2ZXJzZU9yZGVyID0gZnVuY3Rpb24oKQogdGVzdHMuYnJl
YWsgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBp
bnQgZm9vKGludCB4KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgeCA9IHggKiAyOwpAQCAt
MTM4MSw3ICsxMzgxLDcgQEAgdGVzdHMuYnJlYWsgPSBmdW5jdGlvbigpCiAgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludChwcm9ncmFtLCAx
KV0pLCA4KTsKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlSW50KHByb2dyYW0sIDEwKV0pLCAyMCk7CiAgICAgcHJvZ3JhbSA9IGRvUHJlcChg
Ci0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHRlc3QgaW50IGZvbyhpbnQgeCkKICAg
ICAgICAgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICB3aGls
ZSAodHJ1ZSkgewpAQCAtMTQyMiw3ICsxNDIyLDcgQEAgdGVzdHMuYnJlYWsgPSBmdW5jdGlvbigp
CiAgICAgICAgIGApLAogICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwog
ICAgIHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAg
ICAgICAgIHRlc3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSA3KSB7CkBAIC0x
NDM1LDcgKzE0MzUsNyBAQCB0ZXN0cy5icmVhayA9IGZ1bmN0aW9uKCkKICAgICBgKTsKICAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KHBy
b2dyYW0sIDEpXSksIDcpOwogICAgIHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICAgICAgaW50
IGZvbyhpbnQgeCkKKyAgICAgICAgICAgIHRlc3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIHRlc3RzLmJyZWFrID0gZnVuY3Rpb24oKQogICAg
IGApOwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W21ha2VJbnQocHJvZ3JhbSwgMSldKSwgMSk7CiAgICAgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAg
ICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgICAgIHRlc3QgaW50IGZvbygpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDc7CkBAIC0xNDU1LDcgKzE0NTUsNyBAQCB0ZXN0cy5icmVhayA9IGZ1bmN0aW9uKCkK
ICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwg
Nyk7CiAgICAgY2hlY2tGYWlsKAogICAgICAgICAoKSA9PiBkb1ByZXAoYAotICAgICAgICAgICAg
aW50IGZvbyhpbnQgeCkKKyAgICAgICAgICAgIHRlc3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTQ2OSw3ICsxNDY5LDcgQEAgdGVzdHMuYnJlYWsgPSBmdW5jdGlvbigpCiB0
ZXN0cy5jb250aW51ZSA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
Ci0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHRlc3QgaW50IGZvbyhpbnQgeCkKICAg
ICAgICAgewogICAgICAgICAgICAgd2hpbGUgKHggPCAxMCkgewogICAgICAgICAgICAgICAgIGlm
ICh4ID09IDgpIHsKQEAgLTE0OTcsNyArMTQ5Nyw3IEBAIHRlc3RzLmNvbnRpbnVlID0gZnVuY3Rp
b24oKQogdGVzdHMuZG9XaGlsZSA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRv
UHJlcChgCi0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHRlc3QgaW50IGZvbyhpbnQg
eCkKICAgICAgICAgewogICAgICAgICAgICAgaW50IHkgPSA3OwogICAgICAgICAgICAgZG8gewpA
QCAtMTUxMCw3ICsxNTEwLDcgQEAgdGVzdHMuZG9XaGlsZSA9IGZ1bmN0aW9uKCkKICAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KHByb2dy
YW0sIDEpXSksIDgpOwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VJbnQocHJvZ3JhbSwgMTEpXSksIDgpOwogICAgIHByb2dyYW0gPSBkb1By
ZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGludCB5ID0gNzsKICAgICAgICAgICAgIGRvIHsKQEAg
LTE1MjIsNyArMTUyMiw3IEBAIHRlc3RzLmRvV2hpbGUgPSBmdW5jdGlvbigpCiAgICAgYCk7CiAg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUlu
dChwcm9ncmFtLCAxKV0pLCA4KTsKICAgICBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50
IGZvbyhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQogICAgICAgICB7CiAgICAg
ICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICAgICAgIGRvIHsKQEAgLTE1NDIsNyArMTU0Miw3
IEBAIHRlc3RzLmRvV2hpbGUgPSBmdW5jdGlvbigpCiB0ZXN0cy5mb3JMb29wID0gZnVuY3Rpb24o
KQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkK
KyAgICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQg
c3VtID0gMDsKICAgICAgICAgICAgIGludCBpOwpAQCAtMTU1Niw3ICsxNTU2LDcgQEAgdGVzdHMu
Zm9yTG9vcCA9IGZ1bmN0aW9uKCkKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KHByb2dyYW0sIDQpXSksIDYpOwogICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJvZ3JhbSwg
NSldKSwgMTApOwogICAgIHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4
KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlu
dCBzdW0gPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpID0gaSArIDEp
IHsKQEAgLTE1NjksNyArMTU2OSw3IEBAIHRlc3RzLmZvckxvb3AgPSBmdW5jdGlvbigpCiAgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludChw
cm9ncmFtLCA0KV0pLCA2KTsKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSW50KHByb2dyYW0sIDUpXSksIDEwKTsKICAgICBwcm9ncmFtID0g
ZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGlu
dCB4KQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICAgICAgIGlu
dCBpID0gMTAwOwpAQCAtMTU4Myw3ICsxNTgzLDcgQEAgdGVzdHMuZm9yTG9vcCA9IGZ1bmN0aW9u
KCkKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KHByb2dyYW0sIDQpXSksIDYpOwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJvZ3JhbSwgNSldKSwgMTApOwogICAgIHBy
b2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB0ZXN0IGlu
dCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludCBzdW0gPSAwOwogICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpID0gaSArIDEpIHsKQEAgLTE1OTksNyArMTU5
OSw3IEBAIHRlc3RzLmZvckxvb3AgPSBmdW5jdGlvbigpCiAgICAgY2hlY2tJbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludChwcm9ncmFtLCA1KV0pLCA2KTsK
ICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtl
SW50KHByb2dyYW0sIDYpXSksIDExKTsKICAgICBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAg
aW50IGZvbyhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQogICAgICAgICB7CiAg
ICAgICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
eDsgaSA9IGkgKyAxKSB7CkBAIC0xNjE2LDcgKzE2MTYsNyBAQCB0ZXN0cy5mb3JMb29wID0gZnVu
Y3Rpb24oKQogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQocHJvZ3JhbSwgNildKSwgMTApOwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJvZ3JhbSwgNyldKSwgMTApOwog
ICAgIHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB0
ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludCBzdW0gPSAwOwog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IDsgaSA9IGkgKyAxKSB7CkBAIC0xNjMzLDcgKzE2
MzMsNyBAQCB0ZXN0cy5mb3JMb29wID0gZnVuY3Rpb24oKQogICAgIGNoZWNrSW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJvZ3JhbSwgNildKSwgMTUp
OwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21h
a2VJbnQocHJvZ3JhbSwgNyldKSwgMjEpOwogICAgIHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAg
ICBpbnQgZm9vKGludCB4KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGludCBzdW0gPSAwOwogICAgICAgICAgICAgaW50IGkgPSAwOwpAQCAtMTY1
MSw3ICsxNjUxLDcgQEAgdGVzdHMuZm9yTG9vcCA9IGZ1bmN0aW9uKCkKICAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KHByb2dyYW0sIDYp
XSksIDE1KTsKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFttYWtlSW50KHByb2dyYW0sIDcpXSksIDIxKTsKICAgICBwcm9ncmFtID0gZG9QcmVwKGAK
LSAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQogICAg
ICAgICB7CiAgICAgICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICAgICAgIGludCBpID0gMDsK
QEAgLTE2ODEsNyArMTY4MSw3IEBAIHRlc3RzLmZvckxvb3AgPSBmdW5jdGlvbigpCiAgICAgICAg
IGApLAogICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwogICAgIHByb2dy
YW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB0ZXN0IGludCBm
b28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoIDsgOyApIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gNzsKQEAgLTE3MDQsNyArMTcwNCw3IEBAIHRlc3RzLmZvckxvb3AgPSBm
dW5jdGlvbigpCiAgICAgICAgIGApLAogICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBl
RXJyb3IpOwogICAgIHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQor
ICAgICAgICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAo
IDsgdHJ1ZTsgKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDc7CkBAIC0xNzIxLDcgKzE3MjEs
NyBAQCB0ZXN0cy5mb3JMb29wID0gZnVuY3Rpb24oKQogdGVzdHMucHJlZml4UGx1c1BsdXMgPSBm
dW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9v
KGludCB4KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgICsreDsKICAgICAgICAgICAgIHJldHVybiB4OwpAQCAtMTczMyw3ICsxNzMzLDcgQEAgdGVz
dHMucHJlZml4UGx1c1BsdXMgPSBmdW5jdGlvbigpCiB0ZXN0cy5wcmVmaXhQbHVzUGx1c1Jlc3Vs
dCA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGlu
dCBmb28oaW50IHgpCisgICAgICAgIHRlc3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuICsreDsKICAgICAgICAgfQpAQCAtMTc0NCw3ICsxNzQ0LDcgQEAgdGVz
dHMucHJlZml4UGx1c1BsdXNSZXN1bHQgPSBmdW5jdGlvbigpCiB0ZXN0cy5wb3N0Zml4UGx1c1Bs
dXMgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBp
bnQgZm9vKGludCB4KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHgrKzsKICAgICAgICAgICAgIHJldHVybiB4OwpAQCAtMTc1Niw3ICsxNzU2LDcg
QEAgdGVzdHMucG9zdGZpeFBsdXNQbHVzID0gZnVuY3Rpb24oKQogdGVzdHMucG9zdGZpeFBsdXNQ
bHVzUmVzdWx0ID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAg
ICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4geCsrOwogICAgICAgICB9CkBAIC0xNzY3LDcgKzE3Njcs
NyBAQCB0ZXN0cy5wb3N0Zml4UGx1c1BsdXNSZXN1bHQgPSBmdW5jdGlvbigpCiB0ZXN0cy5wcmVm
aXhNaW51c01pbnVzID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
LSAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQogICAg
ICAgICB7CiAgICAgICAgICAgICAtLXg7CiAgICAgICAgICAgICByZXR1cm4geDsKQEAgLTE3Nzks
NyArMTc3OSw3IEBAIHRlc3RzLnByZWZpeE1pbnVzTWludXMgPSBmdW5jdGlvbigpCiB0ZXN0cy5w
cmVmaXhNaW51c01pbnVzUmVzdWx0ID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGlu
dCB4KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gLS14OwogICAgICAgICB9CkBAIC0x
NzkwLDcgKzE3OTAsNyBAQCB0ZXN0cy5wcmVmaXhNaW51c01pbnVzUmVzdWx0ID0gZnVuY3Rpb24o
KQogdGVzdHMucG9zdGZpeE1pbnVzTWludXMgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dy
YW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB0ZXN0IGludCBm
b28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHgtLTsKICAgICAgICAgICAgIHJldHVy
biB4OwpAQCAtMTgwMiw3ICsxODAyLDcgQEAgdGVzdHMucG9zdGZpeE1pbnVzTWludXMgPSBmdW5j
dGlvbigpCiB0ZXN0cy5wb3N0Zml4TWludXNNaW51c1Jlc3VsdCA9IGZ1bmN0aW9uKCkKIHsKICAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAg
IHRlc3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHgtLTsK
ICAgICAgICAgfQpAQCAtMTgxMyw3ICsxODEzLDcgQEAgdGVzdHMucG9zdGZpeE1pbnVzTWludXNS
ZXN1bHQgPSBmdW5jdGlvbigpCiB0ZXN0cy5wbHVzRXF1YWxzID0gZnVuY3Rpb24oKQogewogICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAg
dGVzdCBpbnQgZm9vKGludCB4KQogICAgICAgICB7CiAgICAgICAgICAgICB4ICs9IDQyOwogICAg
ICAgICAgICAgcmV0dXJuIHg7CkBAIC0xODI1LDcgKzE4MjUsNyBAQCB0ZXN0cy5wbHVzRXF1YWxz
ID0gZnVuY3Rpb24oKQogdGVzdHMucGx1c0VxdWFsc1Jlc3VsdCA9IGZ1bmN0aW9uKCkKIHsKICAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAg
IHRlc3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHggKz0g
NDI7CiAgICAgICAgIH0KQEAgLTE4MzYsNyArMTgzNiw3IEBAIHRlc3RzLnBsdXNFcXVhbHNSZXN1
bHQgPSBmdW5jdGlvbigpCiB0ZXN0cy5taW51c0VxdWFscyA9IGZ1bmN0aW9uKCkKIHsKICAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHRl
c3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAgewogICAgICAgICAgICAgeCAtPSA0MjsKICAgICAg
ICAgICAgIHJldHVybiB4OwpAQCAtMTg0OCw3ICsxODQ4LDcgQEAgdGVzdHMubWludXNFcXVhbHMg
PSBmdW5jdGlvbigpCiB0ZXN0cy5taW51c0VxdWFsc1Jlc3VsdCA9IGZ1bmN0aW9uKCkKIHsKICAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAg
IHRlc3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHggLT0g
NDI7CiAgICAgICAgIH0KQEAgLTE4NTksNyArMTg1OSw3IEBAIHRlc3RzLm1pbnVzRXF1YWxzUmVz
dWx0ID0gZnVuY3Rpb24oKQogdGVzdHMudGltZXNFcXVhbHMgPSBmdW5jdGlvbigpCiB7CiAgICAg
bGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB0
ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHggKj0gNDI7CiAgICAg
ICAgICAgICByZXR1cm4geDsKQEAgLTE4NzEsNyArMTg3MSw3IEBAIHRlc3RzLnRpbWVzRXF1YWxz
ID0gZnVuY3Rpb24oKQogdGVzdHMudGltZXNFcXVhbHNSZXN1bHQgPSBmdW5jdGlvbigpCiB7CiAg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAg
ICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB4ICo9
IDQyOwogICAgICAgICB9CkBAIC0xODgyLDcgKzE4ODIsNyBAQCB0ZXN0cy50aW1lc0VxdWFsc1Jl
c3VsdCA9IGZ1bmN0aW9uKCkKIHRlc3RzLmRpdmlkZUVxdWFscyA9IGZ1bmN0aW9uKCkKIHsKICAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAg
IHRlc3QgaW50IGZvbyhpbnQgeCkKICAgICAgICAgewogICAgICAgICAgICAgeCAvPSA0MjsKICAg
ICAgICAgICAgIHJldHVybiB4OwpAQCAtMTg5NCw3ICsxODk0LDcgQEAgdGVzdHMuZGl2aWRlRXF1
YWxzID0gZnVuY3Rpb24oKQogdGVzdHMuZGl2aWRlRXF1YWxzUmVzdWx0ID0gZnVuY3Rpb24oKQog
ewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAg
ICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
eCAvPSA0MjsKICAgICAgICAgfQpAQCAtMTkwNSw3ICsxOTA1LDcgQEAgdGVzdHMuZGl2aWRlRXF1
YWxzUmVzdWx0ID0gZnVuY3Rpb24oKQogdGVzdHMudHdvSW50TGl0ZXJhbHMgPSBmdW5jdGlvbigp
CiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBib29sIGZvbygpCisgICAg
ICAgIHRlc3QgYm9vbCBmb28oKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gNDIgPT0g
NDI7CiAgICAgICAgIH0KQEAgLTE5MjgsNyArMTkyOCw3IEBAIHRlc3RzLmFzc2lnblVpbnRUb0lu
dCA9IGZ1bmN0aW9uKCkKIHRlc3RzLmJ1aWxkQXJyYXlUaGVuU3VtSXQgPSBmdW5jdGlvbigpCiB7
CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAg
dGVzdCBpbnQgZm9vKCkKICAgICAgICAgewogICAgICAgICAgICAgaW50WzQyXSBhcnJheTsKICAg
ICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDQyOyBpID0gaSArIDEpCkBAIC0xOTU0LDcg
KzE5NTQsNyBAQCB0ZXN0cy5idWlsZEFycmF5VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSA9
IGZ1bmN0aW9uKCkKICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBhcnJheVtpXTsK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbygp
CisgICAgICAgIHRlc3QgaW50IGZvbygpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludFs0Ml0g
YXJyYXk7CiAgICAgICAgICAgICByZXR1cm4gYmFyKEBhcnJheSk7CkBAIC0xOTc4LDcgKzE5Nzgs
NyBAQCB0ZXN0cy5vdmVycmlkZVN1YnNjcmlwdFN0cnVjdCA9IGZ1bmN0aW9uKCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gJmZvby0+eTsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAg
ICB9Ci0gICAgICAgIGludCBmb28oKQorICAgICAgICB0ZXN0IGludCBmb28oKQogICAgICAgICB7
CiAgICAgICAgICAgICBGb28gZm9vOwogICAgICAgICAgICAgZm9vLnggPSA0OTg7CkBAIC0yMDA0
LDcgKzIwMDQsNyBAQCB0ZXN0cy5vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZERvU3RvcmVzID0g
ZnVuY3Rpb24oKQogICAgICAgICAgICAgICAgIHJldHVybiAmZm9vLT55OwogICAgICAgICAgICAg
cmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCisgICAgICAgIHRlc3Qg
aW50IGZvbygpCiAgICAgICAgIHsKICAgICAgICAgICAgIEZvbyBmb287CiAgICAgICAgICAgICBm
b29bMF0gPSA0OTg7CkBAIC0yMDM0LDcgKzIwMzQsNyBAQCB0ZXN0cy5vdmVycmlkZVN1YnNjcmlw
dFN0cnVjdEFuZFVzZVBvaW50ZXJzID0gZnVuY3Rpb24oKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gKCpmb28pWzBdICsgKCpmb28pWzFdOwogICAgICAgICB9Ci0gICAgICAgIGludCBm
b28oKQorICAgICAgICB0ZXN0IGludCBmb28oKQogICAgICAgICB7CiAgICAgICAgICAgICBGb28g
Zm9vOwogICAgICAgICAgICAgZm9vLnggPSA0OTg7CkBAIC0yMDgzLDcgKzIwODMsNyBAQCB0ZXN0
cy5tYWtlQXJyYXlSZWZGcm9tTG9jYWwgPSBmdW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiByZWZbMF07CiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCisgICAgICAg
IHRlc3QgaW50IGZvbygpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludCB4ID0gNDg7CiAgICAg
ICAgICAgICByZXR1cm4gYmFyKEB4KTsKQEAgLTIxMDMsNyArMjEwMyw3IEBAIHRlc3RzLm1ha2VB
cnJheVJlZkZyb21Qb2ludGVyID0gZnVuY3Rpb24oKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gYmFyKEBwdHIpOwogICAgICAgICB9Ci0gICAgICAgIGludCBmb28oKQorICAgICAgICB0
ZXN0IGludCBmb28oKQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgeCA9IDQ4OwogICAgICAg
ICAgICAgcmV0dXJuIGJheigmeCk7CkBAIC0yMTM2LDcgKzIxMzYsNyBAQCB0ZXN0cy5tYWtlQXJy
YXlSZWZGcm9tQXJyYXlSZWYgPSBmdW5jdGlvbigpCiB0ZXN0cy5zaW1wbGVMZW5ndGggPSBmdW5j
dGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB1aW50IGZvbygp
CisgICAgICAgIHRlc3QgdWludCBmb28oKQogICAgICAgICB7CiAgICAgICAgICAgICBmbG9hdFs3
NTRdIGFycmF5OwogICAgICAgICAgICAgcmV0dXJuIChAYXJyYXkpLmxlbmd0aDsKQEAgLTIxNDgs
MTIgKzIxNDgsMTIgQEAgdGVzdHMuc2ltcGxlTGVuZ3RoID0gZnVuY3Rpb24oKQogdGVzdHMubm9u
QXJyYXlSZWZBcnJheUxlbmd0aFN1Y2NlZWQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dy
YW0gPSBkb1ByZXAoYAotICAgICAgICB1aW50IGZvbygpCisgICAgICAgIHRlc3QgdWludCBmb28o
KQogICAgICAgICB7CiAgICAgICAgICAgICBmbG9hdFs3NTRdIGFycmF5OwogICAgICAgICAgICAg
cmV0dXJuIGFycmF5Lmxlbmd0aDsKICAgICAgICAgfQotICAgICAgICB1aW50IGJhcigpCisgICAg
ICAgIHRlc3QgdWludCBiYXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBpbnRbNzU0XSBhcnJh
eTsKICAgICAgICAgICAgIHJldHVybiBhcnJheS5sZW5ndGg7CkBAIC0yMjE2LDcgKzIyMTYsNyBA
QCB0ZXN0cy5zaW1wbGVHZXR0ZXIgPSBmdW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBmb28ueDsKICAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgdGVz
dCBpbnQgZm9vKCkKICAgICAgICAgewogICAgICAgICAgICAgRm9vIGZvbzsKICAgICAgICAgICAg
IGZvby54ID0gNzgwNDsKQEAgLTIyNDEsNyArMjI0MSw3IEBAIHRlc3RzLnNpbXBsZVNldHRlciA9
IGZ1bmN0aW9uKCkKICAgICAgICAgICAgIGZvby54ID0gdmFsdWU7CiAgICAgICAgICAgICByZXR1
cm4gZm9vOwogICAgICAgICB9Ci0gICAgICAgIGludCBmb28oKQorICAgICAgICB0ZXN0IGludCBm
b28oKQogICAgICAgICB7CiAgICAgICAgICAgICBGb28gZm9vOwogICAgICAgICAgICAgZm9vLnkg
PSA3ODA0OwpAQCAtMjMzMiwxMyArMjMzMiwxMyBAQCB0ZXN0cy5uZXN0ZWRTdWJzY3JpcHRMVmFs
dWVFbXVsYXRpb25TaW1wbGUgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGludCB0ZXN0U2V0VmFsdWVzQW5kU3VtKCkKKyAg
ICAgICAgdGVzdCBpbnQgdGVzdFNldFZhbHVlc0FuZFN1bSgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEJheiBiYXo7CiAgICAgICAgICAgICBzZXRWYWx1ZXMoJmJheik7CiAgICAgICAgICAgICBy
ZXR1cm4gc3VtKGJheik7CiAgICAgICAgIH0KLSAgICAgICAgaW50IHRlc3RTZXRWYWx1ZXNNdXRh
dGVWYWx1ZXNBbmRTdW0oKQorICAgICAgICB0ZXN0IGludCB0ZXN0U2V0VmFsdWVzTXV0YXRlVmFs
dWVzQW5kU3VtKCkKICAgICAgICAgewogICAgICAgICAgICAgQmF6IGJhejsKICAgICAgICAgICAg
IHNldFZhbHVlcygmYmF6KTsKQEAgLTIzNTgsMTcgKzIzNTgsMTcgQEAgdGVzdHMubmVzdGVkU3Vi
c2NyaXB0TFZhbHVlRW11bGF0aW9uU2ltcGxlID0gZnVuY3Rpb24oKQogdGVzdHMub3BlcmF0b3JC
b29sID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAg
Ym9vbCBib29sRnJvbVVjaGFyRmFsc2UoKSB7IHJldHVybiBib29sKHVjaGFyKDApKTsgfQotICAg
ICAgICBib29sIGJvb2xGcm9tVWNoYXJUcnVlKCkgeyByZXR1cm4gYm9vbCh1Y2hhcigxKSk7IH0K
KyAgICAgICAgdGVzdCBib29sIGJvb2xGcm9tVWNoYXJGYWxzZSgpIHsgcmV0dXJuIGJvb2wodWNo
YXIoMCkpOyB9CisgICAgICAgIHRlc3QgYm9vbCBib29sRnJvbVVjaGFyVHJ1ZSgpIHsgcmV0dXJu
IGJvb2wodWNoYXIoMSkpOyB9CiAKLSAgICAgICAgYm9vbCBib29sRnJvbVVpbnRGYWxzZSgpIHsg
cmV0dXJuIGJvb2wodWludCgwKSk7IH0KLSAgICAgICAgYm9vbCBib29sRnJvbVVpbnRUcnVlKCkg
eyByZXR1cm4gYm9vbCh1aW50KDEpKTsgfQorICAgICAgICB0ZXN0IGJvb2wgYm9vbEZyb21VaW50
RmFsc2UoKSB7IHJldHVybiBib29sKHVpbnQoMCkpOyB9CisgICAgICAgIHRlc3QgYm9vbCBib29s
RnJvbVVpbnRUcnVlKCkgeyByZXR1cm4gYm9vbCh1aW50KDEpKTsgfQogCi0gICAgICAgIGJvb2wg
Ym9vbEZyb21JbnRGYWxzZSgpIHsgcmV0dXJuIGJvb2woaW50KDApKTsgfQotICAgICAgICBib29s
IGJvb2xGcm9tSW50VHJ1ZSgpIHsgcmV0dXJuIGJvb2woaW50KDEpKTsgfQorICAgICAgICB0ZXN0
IGJvb2wgYm9vbEZyb21JbnRGYWxzZSgpIHsgcmV0dXJuIGJvb2woaW50KDApKTsgfQorICAgICAg
ICB0ZXN0IGJvb2wgYm9vbEZyb21JbnRUcnVlKCkgeyByZXR1cm4gYm9vbChpbnQoMSkpOyB9CiAK
LSAgICAgICAgYm9vbCBib29sRnJvbUZsb2F0RmFsc2UoKSB7IHJldHVybiBib29sKGZsb2F0KDAp
KTsgfQotICAgICAgICBib29sIGJvb2xGcm9tRmxvYXRUcnVlKCkgeyByZXR1cm4gYm9vbChmbG9h
dCgxKSk7IH0KKyAgICAgICAgdGVzdCBib29sIGJvb2xGcm9tRmxvYXRGYWxzZSgpIHsgcmV0dXJu
IGJvb2woZmxvYXQoMCkpOyB9CisgICAgICAgIHRlc3QgYm9vbCBib29sRnJvbUZsb2F0VHJ1ZSgp
IHsgcmV0dXJuIGJvb2woZmxvYXQoMSkpOyB9CiAgICAgYCk7CiAKICAgICBjaGVja0Jvb2wocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJib29sRnJvbVVjaGFyRmFsc2UiLCBbXSksIGZh
bHNlKTsKQEAgLTI0MDcsNyArMjQwNyw3IEBAIHRlc3RzLm9wZXJhdG9yQm9vbCA9IGZ1bmN0aW9u
KCkKIHRlc3RzLmJvb2xCaXRBbmQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoYAotICAgICAgICBib29sIGZvbyhib29sIGEsIGJvb2wgYikKKyAgICAgICAgdGVzdCBi
b29sIGZvbyhib29sIGEsIGJvb2wgYikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGEg
JiBiOwogICAgICAgICB9CkBAIC0yNDIxLDcgKzI0MjEsNyBAQCB0ZXN0cy5ib29sQml0QW5kID0g
ZnVuY3Rpb24oKQogdGVzdHMuYm9vbEJpdE9yID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKLSAgICAgICAgYm9vbCBmb28oYm9vbCBhLCBib29sIGIpCisgICAgICAg
IHRlc3QgYm9vbCBmb28oYm9vbCBhLCBib29sIGIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBhIHwgYjsKICAgICAgICAgfQpAQCAtMjQzNSw3ICsyNDM1LDcgQEAgdGVzdHMuYm9vbEJp
dE9yID0gZnVuY3Rpb24oKQogdGVzdHMuYm9vbEJpdFhvciA9IGZ1bmN0aW9uKCkKIHsKICAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGJvb2wgZm9vKGJvb2wgYSwgYm9vbCBiKQor
ICAgICAgICB0ZXN0IGJvb2wgZm9vKGJvb2wgYSwgYm9vbCBiKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gYSBeIGI7CiAgICAgICAgIH0KQEAgLTI0NDksNyArMjQ0OSw3IEBAIHRlc3Rz
LmJvb2xCaXRYb3IgPSBmdW5jdGlvbigpCiB0ZXN0cy5ib29sQml0Tm90ID0gZnVuY3Rpb24oKQog
ewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgYm9vbCBmb28oYm9vbCBhKQor
ICAgICAgICB0ZXN0IGJvb2wgZm9vKGJvb2wgYSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIH5hOwogICAgICAgICB9CkBAIC0yNDYxLDcgKzI0NjEsNyBAQCB0ZXN0cy5ib29sQml0Tm90
ID0gZnVuY3Rpb24oKQogdGVzdHMuaW50Qml0QW5kID0gZnVuY3Rpb24oKQogewogICAgIGxldCBw
cm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbyhpbnQgYSwgaW50IGIpCisgICAgICAg
IHRlc3QgaW50IGZvbyhpbnQgYSwgaW50IGIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBhICYgYjsKICAgICAgICAgfQpAQCAtMjQ3NSw3ICsyNDc1LDcgQEAgdGVzdHMuaW50Qml0QW5k
ID0gZnVuY3Rpb24oKQogdGVzdHMuaW50Qml0T3IgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHBy
b2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKGludCBhLCBpbnQgYikKKyAgICAgICAg
dGVzdCBpbnQgZm9vKGludCBhLCBpbnQgYikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGEgfCBiOwogICAgICAgICB9CkBAIC0yNDg5LDcgKzI0ODksNyBAQCB0ZXN0cy5pbnRCaXRPciA9
IGZ1bmN0aW9uKCkKIHRlc3RzLmludEJpdFhvciA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJv
Z3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQorICAgICAgICB0
ZXN0IGludCBmb28oaW50IGEsIGludCBiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
YSBeIGI7CiAgICAgICAgIH0KQEAgLTI1MDMsNyArMjUwMyw3IEBAIHRlc3RzLmludEJpdFhvciA9
IGZ1bmN0aW9uKCkKIHRlc3RzLmludEJpdE5vdCA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJv
Z3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oaW50IGEpCisgICAgICAgIHRlc3QgaW50
IGZvbyhpbnQgYSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIH5hOwogICAgICAgICB9
CkBAIC0yNTE3LDcgKzI1MTcsNyBAQCB0ZXN0cy5pbnRCaXROb3QgPSBmdW5jdGlvbigpCiB0ZXN0
cy5pbnRMU2hpZnQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAot
ICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIpCisgICAgICAgIHRlc3QgaW50IGZvbyhpbnQg
YSwgdWludCBiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYSA8PCBiOwogICAgICAg
ICB9CkBAIC0yNTMxLDcgKzI1MzEsNyBAQCB0ZXN0cy5pbnRMU2hpZnQgPSBmdW5jdGlvbigpCiB0
ZXN0cy5pbnRSU2hpZnQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAotICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIpCisgICAgICAgIHRlc3QgaW50IGZvbyhp
bnQgYSwgdWludCBiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYSA+PiBiOwogICAg
ICAgICB9CkBAIC0yNTQ1LDcgKzI1NDUsNyBAQCB0ZXN0cy5pbnRSU2hpZnQgPSBmdW5jdGlvbigp
CiB0ZXN0cy51aW50Qml0QW5kID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKLSAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisgICAgICAgIHRlc3QgdWlu
dCBmb28odWludCBhLCB1aW50IGIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhICYg
YjsKICAgICAgICAgfQpAQCAtMjU1OSw3ICsyNTU5LDcgQEAgdGVzdHMudWludEJpdEFuZCA9IGZ1
bmN0aW9uKCkKIHRlc3RzLnVpbnRCaXRPciA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3Jh
bSA9IGRvUHJlcChgCi0gICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB0
ZXN0IHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gYSB8IGI7CiAgICAgICAgIH0KQEAgLTI1NzMsNyArMjU3Myw3IEBAIHRlc3RzLnVpbnRCaXRP
ciA9IGZ1bmN0aW9uKCkKIHRlc3RzLnVpbnRCaXRYb3IgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0
IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKKyAg
ICAgICAgdGVzdCB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGEgXiBiOwogICAgICAgICB9CkBAIC0yNTg3LDcgKzI1ODcsNyBAQCB0ZXN0cy51
aW50Qml0WG9yID0gZnVuY3Rpb24oKQogdGVzdHMudWludEJpdE5vdCA9IGZ1bmN0aW9uKCkKIHsK
ICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHVpbnQgZm9vKHVpbnQgYSkKKyAg
ICAgICAgdGVzdCB1aW50IGZvbyh1aW50IGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biB+YTsKICAgICAgICAgfQpAQCAtMjYwMSw3ICsyNjAxLDcgQEAgdGVzdHMudWludEJpdE5vdCA9
IGZ1bmN0aW9uKCkKIHRlc3RzLnVpbnRMU2hpZnQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHBy
b2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKKyAgICAg
ICAgdGVzdCB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGEgPDwgYjsKICAgICAgICAgfQpAQCAtMjYxNSw3ICsyNjE1LDcgQEAgdGVzdHMudWlu
dExTaGlmdCA9IGZ1bmN0aW9uKCkKIHRlc3RzLnVpbnRSU2hpZnQgPSBmdW5jdGlvbigpCiB7CiAg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQg
YikKKyAgICAgICAgdGVzdCB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIGEgPj4gYjsKICAgICAgICAgfQpAQCAtMjYyOSw3ICsyNjI5LDcgQEAg
dGVzdHMudWludFJTaGlmdCA9IGZ1bmN0aW9uKCkKIHRlc3RzLnVjaGFyQml0QW5kID0gZnVuY3Rp
b24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgdWNoYXIgZm9vKHVj
aGFyIGEsIHVjaGFyIGIpCisgICAgICAgIHRlc3QgdWNoYXIgZm9vKHVjaGFyIGEsIHVjaGFyIGIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhICYgYjsKICAgICAgICAgfQpAQCAtMjY0
Myw3ICsyNjQzLDcgQEAgdGVzdHMudWNoYXJCaXRBbmQgPSBmdW5jdGlvbigpCiB0ZXN0cy51Y2hh
ckJpdE9yID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAg
ICAgdWNoYXIgZm9vKHVjaGFyIGEsIHVjaGFyIGIpCisgICAgICAgIHRlc3QgdWNoYXIgZm9vKHVj
aGFyIGEsIHVjaGFyIGIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhIHwgYjsKICAg
ICAgICAgfQpAQCAtMjY1Nyw3ICsyNjU3LDcgQEAgdGVzdHMudWNoYXJCaXRPciA9IGZ1bmN0aW9u
KCkKIHRlc3RzLnVjaGFyQml0WG9yID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKLSAgICAgICAgdWNoYXIgZm9vKHVjaGFyIGEsIHVjaGFyIGIpCisgICAgICAgIHRl
c3QgdWNoYXIgZm9vKHVjaGFyIGEsIHVjaGFyIGIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBhIF4gYjsKICAgICAgICAgfQpAQCAtMjY3MSw3ICsyNjcxLDcgQEAgdGVzdHMudWNoYXJC
aXRYb3IgPSBmdW5jdGlvbigpCiB0ZXN0cy51Y2hhckJpdE5vdCA9IGZ1bmN0aW9uKCkKIHsKICAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHVjaGFyIGZvbyh1Y2hhciBhKQorICAg
ICAgICB0ZXN0IHVjaGFyIGZvbyh1Y2hhciBhKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gfmE7CiAgICAgICAgIH0KQEAgLTI2ODUsNyArMjY4NSw3IEBAIHRlc3RzLnVjaGFyQml0Tm90
ID0gZnVuY3Rpb24oKQogdGVzdHMudWNoYXJMU2hpZnQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0
IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB1Y2hhciBmb28odWNoYXIgYSwgdWludCBiKQor
ICAgICAgICB0ZXN0IHVjaGFyIGZvbyh1Y2hhciBhLCB1aW50IGIpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBhIDw8IGI7CiAgICAgICAgIH0KQEAgLTI2OTksNyArMjY5OSw3IEBAIHRl
c3RzLnVjaGFyTFNoaWZ0ID0gZnVuY3Rpb24oKQogdGVzdHMudWNoYXJSU2hpZnQgPSBmdW5jdGlv
bigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB1Y2hhciBmb28odWNo
YXIgYSwgdWludCBiKQorICAgICAgICB0ZXN0IHVjaGFyIGZvbyh1Y2hhciBhLCB1aW50IGIpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhID4+IGI7CiAgICAgICAgIH0KQEAgLTI3MTMs
MjMgKzI3MTMsMjMgQEAgdGVzdHMudWNoYXJSU2hpZnQgPSBmdW5jdGlvbigpCiB0ZXN0cy5mbG9h
dE1hdGggPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAg
ICBib29sIGZvbygpCisgICAgICAgIHRlc3QgYm9vbCBmb28oKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gNDIuNSA9PSA0Mi41OwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vMigp
CisgICAgICAgIHRlc3QgYm9vbCBmb28yKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IDQyLjVmID09IDQyLjU7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBmb28zKCkKKyAgICAgICAg
dGVzdCBib29sIGZvbzMoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gNDIuNSA9PSA0
Mi41ZjsKICAgICAgICAgfQotICAgICAgICBib29sIGZvbzQoKQorICAgICAgICB0ZXN0IGJvb2wg
Zm9vNCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiA0Mi41ZiA9PSA0Mi41ZjsKICAg
ICAgICAgfQotICAgICAgICBib29sIGZvbzUoKQorICAgICAgICB0ZXN0IGJvb2wgZm9vNSgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiA0Mi41ZiA9PSA0Mi41ZjsKICAgICAgICAgfQpA
QCAtMjczNywyNyArMjczNywyNyBAQCB0ZXN0cy5mbG9hdE1hdGggPSBmdW5jdGlvbigpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiB4OwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZv
bzYoKQorICAgICAgICB0ZXN0IGZsb2F0IGZvbzYoKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gYmFyKDcuNSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNygpCisgICAgICAg
IHRlc3QgZmxvYXQgZm9vNygpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBiYXIoNy41
Zik7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vOSgpCisgICAgICAgIHRlc3QgZmxvYXQg
Zm9vOSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmbG9hdCg3LjUpOwogICAgICAg
ICB9Ci0gICAgICAgIGZsb2F0IGZvbzEwKCkKKyAgICAgICAgdGVzdCBmbG9hdCBmb28xMCgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmbG9hdCg3LjVmKTsKICAgICAgICAgfQotICAg
ICAgICBmbG9hdCBmb28xMigpCisgICAgICAgIHRlc3QgZmxvYXQgZm9vMTIoKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gZmxvYXQoNyk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQg
Zm9vMTMoKQorICAgICAgICB0ZXN0IGZsb2F0IGZvbzEzKCkKICAgICAgICAgewogICAgICAgICAg
ICAgZmxvYXQgeCA9IDcuNWY7CiAgICAgICAgICAgICByZXR1cm4gZmxvYXQoeCk7CkBAIC0yODUx
LDM1ICsyODUxLDM1IEBAIHRlc3RzLmZsb2F0TWF0aCA9IGZ1bmN0aW9uKCkKIHRlc3RzLmJvb2xl
YW5NYXRoID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAg
ICAgYm9vbCBmb28oKQorICAgICAgICB0ZXN0IGJvb2wgZm9vKCkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIHRydWUgJiYgdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBib29sIGZvbzIo
KQorICAgICAgICB0ZXN0IGJvb2wgZm9vMigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biB0cnVlICYmIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9vMygpCisgICAgICAg
IHRlc3QgYm9vbCBmb28zKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlICYm
IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBmb280KCkKKyAgICAgICAgdGVzdCBib29s
IGZvbzQoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2UgJiYgZmFsc2U7CiAg
ICAgICAgIH0KLSAgICAgICAgYm9vbCBmb281KCkKKyAgICAgICAgdGVzdCBib29sIGZvbzUoKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZSB8fCB0cnVlOwogICAgICAgICB9Ci0g
ICAgICAgIGJvb2wgZm9vNigpCisgICAgICAgIHRlc3QgYm9vbCBmb282KCkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIHRydWUgfHwgZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgYm9v
bCBmb283KCkKKyAgICAgICAgdGVzdCBib29sIGZvbzcoKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2UgfHwgdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBib29sIGZvbzgoKQor
ICAgICAgICB0ZXN0IGJvb2wgZm9vOCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZSB8fCBmYWxzZTsKICAgICAgICAgfQpAQCAtMjkwMywyOCArMjkwMywyOCBAQCB0ZXN0cy5i
b29sZWFuU2hvcnRjaXJjdWl0aW5nID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgcmV0dXJuIHJl
dFZhbHVlOyAKICAgICAgICAgfQogCi0gICAgICAgIGludCBhbmRUcnVlKCkKKyAgICAgICAgdGVz
dCBpbnQgYW5kVHJ1ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludCB4OwogICAgICAgICAg
ICAgYm9vbCB5ID0gc2V0KCZ4LCAxLCB0cnVlKSAmJiBzZXQoJngsIDIsIGZhbHNlKTsKICAgICAg
ICAgICAgIHJldHVybiB4OyAKICAgICAgICAgfQogCi0gICAgICAgIGludCBhbmRGYWxzZSgpCisg
ICAgICAgIHRlc3QgaW50IGFuZEZhbHNlKCkKICAgICAgICAgewogICAgICAgICAgICAgaW50IHg7
CiAgICAgICAgICAgICBib29sIHkgPSBzZXQoJngsIDEsIGZhbHNlKSAmJiBzZXQoJngsIDIsIGZh
bHNlKTsKICAgICAgICAgICAgIHJldHVybiB4OyAKICAgICAgICAgfQogCi0gICAgICAgIGludCBv
clRydWUoKQorICAgICAgICB0ZXN0IGludCBvclRydWUoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBpbnQgeDsKICAgICAgICAgICAgIGJvb2wgeSA9IHNldCgmeCwgMSwgdHJ1ZSkgfHwgc2V0KCZ4
LCAyLCBmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm4geDsgCiAgICAgICAgIH0KIAotICAgICAg
ICBpbnQgb3JGYWxzZSgpCisgICAgICAgIHRlc3QgaW50IG9yRmFsc2UoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBpbnQgeDsKICAgICAgICAgICAgIGJvb2wgeSA9IHNldCgmeCwgMSwgZmFsc2Up
IHx8IHNldCgmeCwgMiwgZmFsc2UpOwpAQCAtMjk0Miw3ICsyOTQyLDcgQEAgdGVzdHMudHlwZWRl
ZkFycmF5ID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKICAgICAg
ICAgdHlwZWRlZiBBcnJheVR5cGVkZWYgPSBpbnRbMl07Ci0gICAgICAgIGludCBmb28oKQorICAg
ICAgICB0ZXN0IGludCBmb28oKQogICAgICAgICB7CiAgICAgICAgICAgICBBcnJheVR5cGVkZWYg
YXJyYXlUeXBlZGVmOwogICAgICAgICAgICAgcmV0dXJuIGFycmF5VHlwZWRlZlswXTsKQEAgLTMw
ODUsNyArMzA4NSw3IEBAIHRlc3RzLnNoYWRlclR5cGVzID0gZnVuY3Rpb24oKQogdGVzdHMudmVj
dG9yVHlwZVN5bnRheCA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
Ci0gICAgICAgIGludCBmb28yKCkKKyAgICAgICAgdGVzdCBpbnQgZm9vMigpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGludDIgeDsKICAgICAgICAgICAgIHZlY3RvcjxpbnQsIDI+IHogPSBpbnQy
KDMsIDQpOwpAQCAtMzA5Myw3ICszMDkzLDcgQEAgdGVzdHMudmVjdG9yVHlwZVN5bnRheCA9IGZ1
bmN0aW9uKCkKICAgICAgICAgICAgIHJldHVybiB4Lnk7CiAgICAgICAgIH0KIAotICAgICAgICBp
bnQgZm9vMygpCisgICAgICAgIHRlc3QgaW50IGZvbzMoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBpbnQzIHg7CiAgICAgICAgICAgICB2ZWN0b3I8aW50LCAzPiB6ID0gaW50MygzLCA0LCA1KTsK
QEAgLTMxMDEsNyArMzEwMSw3IEBAIHRlc3RzLnZlY3RvclR5cGVTeW50YXggPSBmdW5jdGlvbigp
CiAgICAgICAgICAgICByZXR1cm4geC56OwogICAgICAgICB9CiAKLSAgICAgICAgaW50IGZvbzQo
KQorICAgICAgICB0ZXN0IGludCBmb280KCkKICAgICAgICAgewogICAgICAgICAgICAgaW50NCB4
OwogICAgICAgICAgICAgdmVjdG9yPGludCw0PiB6ID0gaW50NCgzLCA0LCA1LCA2KTsKQEAgLTMx
MDksNyArMzEwOSw3IEBAIHRlc3RzLnZlY3RvclR5cGVTeW50YXggPSBmdW5jdGlvbigpCiAgICAg
ICAgICAgICByZXR1cm4geC53OwogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCB2ZWMyT3BlcmF0
b3JDYXN0KCkKKyAgICAgICAgdGVzdCBib29sIHZlYzJPcGVyYXRvckNhc3QoKQogICAgICAgICB7
CiAgICAgICAgICAgICBpbnQyIHggPSB2ZWN0b3I8aW50LDI+KDEsIDIpOwogICAgICAgICAgICAg
dmVjdG9yPGludCwgMj4geSA9IGludDIoMSwgMik7CkBAIC0zMTIzLDcgKzMxMjMsNyBAQCB0ZXN0
cy52ZWN0b3JUeXBlU3ludGF4ID0gZnVuY3Rpb24oKQogCiAgICAgcHJvZ3JhbSA9IGRvUHJlcChg
CiAgICAgICAgIHR5cGVkZWYgaSA9IGludDsKLSAgICAgICAgaW50IGZvbzIoKQorICAgICAgICB0
ZXN0IGludCBmb28yKCkKICAgICAgICAgewogICAgICAgICAgICAgaW50MiB4OwogICAgICAgICAg
ICAgdmVjdG9yPGksIDI+IHogPSBpbnQyKDMsIDQpOwpAQCAtMzEzMSw3ICszMTMxLDcgQEAgdGVz
dHMudmVjdG9yVHlwZVN5bnRheCA9IGZ1bmN0aW9uKCkKICAgICAgICAgICAgIHJldHVybiB4Lnk7
CiAgICAgICAgIH0KIAotICAgICAgICBib29sIHZlYzJPcGVyYXRvckNhc3QoKQorICAgICAgICB0
ZXN0IGJvb2wgdmVjMk9wZXJhdG9yQ2FzdCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludDIg
eCA9IHZlY3RvcjxpLDI+KDEsIDIpOwogICAgICAgICAgICAgdmVjdG9yPGksIDI+IHkgPSBpbnQy
KDEsIDIpOwpAQCAtMzE0NSwxMTQgKzMxNDUsMTE0IEBAIHRlc3RzLnZlY3RvclR5cGVTeW50YXgg
PSBmdW5jdGlvbigpCiB0ZXN0cy5idWlsdGluVmVjdG9ycyA9IGZ1bmN0aW9uKCkKIHsKICAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGludCBmb28oKQorICAgICAgICB0ZXN0IGlu
dCBmb28oKQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQyIGEgPSBpbnQyKDMsIDQpOwogICAg
ICAgICAgICAgcmV0dXJuIGFbMF07CiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbzIoKQorICAg
ICAgICB0ZXN0IGludCBmb28yKCkKICAgICAgICAgewogICAgICAgICAgICAgaW50MiBhID0gaW50
MigzLCA0KTsKICAgICAgICAgICAgIGludDMgYiA9IGludDMoYSwgNSk7CiAgICAgICAgICAgICBy
ZXR1cm4gYlsxXTsKICAgICAgICAgfQotICAgICAgICBpbnQgZm9vMygpCisgICAgICAgIHRlc3Qg
aW50IGZvbzMoKQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQzIGEgPSBpbnQzKDMsIDQsIDUp
OwogICAgICAgICAgICAgaW50NCBiID0gaW50NCg2LCBhKTsKICAgICAgICAgICAgIHJldHVybiBi
WzFdOwogICAgICAgICB9Ci0gICAgICAgIGludCBmb280KCkKKyAgICAgICAgdGVzdCBpbnQgZm9v
NCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludDIgYSA9IGludDIoMywgNCk7CiAgICAgICAg
ICAgICBpbnQyIGIgPSBpbnQyKDUsIDYpOwogICAgICAgICAgICAgaW50NCBjID0gaW50NChhLCBi
KTsKICAgICAgICAgICAgIHJldHVybiBjWzJdOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9v
NSgpCisgICAgICAgIHRlc3QgYm9vbCBmb281KCkKICAgICAgICAgewogICAgICAgICAgICAgaW50
NCBhID0gaW50NCgzLCA0LCA1LCA2KTsKICAgICAgICAgICAgIGludDIgYiA9IGludDIoNCwgNSk7
CiAgICAgICAgICAgICBpbnQ0IGMgPSBpbnQ0KDMsIGIsIDYpOwogICAgICAgICAgICAgcmV0dXJu
IGEgPT0gYzsKICAgICAgICAgfQotICAgICAgICBib29sIGZvbzYoKQorICAgICAgICB0ZXN0IGJv
b2wgZm9vNigpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludDIgYSA9IGludDIoNCwgNSk7CiAg
ICAgICAgICAgICBpbnQzIGIgPSBpbnQzKDMsIGEpOwogICAgICAgICAgICAgaW50MyBjID0gaW50
MygzLCA0LCA2KTsKICAgICAgICAgICAgIHJldHVybiBiID09IGM7CiAgICAgICAgIH0KLSAgICAg
ICAgdWludCBmb291KCkKKyAgICAgICAgdGVzdCB1aW50IGZvb3UoKQogICAgICAgICB7CiAgICAg
ICAgICAgICB1aW50MiBhID0gdWludDIoMywgNCk7CiAgICAgICAgICAgICByZXR1cm4gYVswXTsK
ICAgICAgICAgfQotICAgICAgICB1aW50IGZvb3UyKCkKKyAgICAgICAgdGVzdCB1aW50IGZvb3Uy
KCkKICAgICAgICAgewogICAgICAgICAgICAgdWludDIgYSA9IHVpbnQyKDMsIDQpOwogICAgICAg
ICAgICAgdWludDMgYiA9IHVpbnQzKGEsIDUpOwogICAgICAgICAgICAgcmV0dXJuIGJbMV07CiAg
ICAgICAgIH0KLSAgICAgICAgdWludCBmb291MygpCisgICAgICAgIHRlc3QgdWludCBmb291Mygp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHVpbnQzIGEgPSB1aW50MygzLCA0LCA1KTsKICAgICAg
ICAgICAgIHVpbnQ0IGIgPSB1aW50NCg2LCBhKTsKICAgICAgICAgICAgIHJldHVybiBiWzFdOwog
ICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vdTQoKQorICAgICAgICB0ZXN0IHVpbnQgZm9vdTQo
KQogICAgICAgICB7CiAgICAgICAgICAgICB1aW50MiBhID0gdWludDIoMywgNCk7CiAgICAgICAg
ICAgICB1aW50MiBiID0gdWludDIoNSwgNik7CiAgICAgICAgICAgICB1aW50NCBjID0gdWludDQo
YSwgYik7CiAgICAgICAgICAgICByZXR1cm4gY1syXTsKICAgICAgICAgfQotICAgICAgICBib29s
IGZvb3U1KCkKKyAgICAgICAgdGVzdCBib29sIGZvb3U1KCkKICAgICAgICAgewogICAgICAgICAg
ICAgdWludDQgYSA9IHVpbnQ0KDMsIDQsIDUsIDYpOwogICAgICAgICAgICAgdWludDIgYiA9IHVp
bnQyKDQsIDUpOwogICAgICAgICAgICAgdWludDQgYyA9IHVpbnQ0KDMsIGIsIDYpOwogICAgICAg
ICAgICAgcmV0dXJuIGEgPT0gYzsKICAgICAgICAgfQotICAgICAgICBib29sIGZvb3U2KCkKKyAg
ICAgICAgdGVzdCBib29sIGZvb3U2KCkKICAgICAgICAgewogICAgICAgICAgICAgdWludDIgYSA9
IHVpbnQyKDQsIDUpOwogICAgICAgICAgICAgdWludDMgYiA9IHVpbnQzKDMsIGEpOwogICAgICAg
ICAgICAgdWludDMgYyA9IHVpbnQzKDMsIDQsIDYpOwogICAgICAgICAgICAgcmV0dXJuIGIgPT0g
YzsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb29mKCkKKyAgICAgICAgdGVzdCBmbG9hdCBm
b29mKCkKICAgICAgICAgewogICAgICAgICAgICAgZmxvYXQyIGEgPSBmbG9hdDIoMy4sIDQuKTsK
ICAgICAgICAgICAgIHJldHVybiBhWzBdOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvb2Yy
KCkKKyAgICAgICAgdGVzdCBmbG9hdCBmb29mMigpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZs
b2F0MiBhID0gZmxvYXQyKDMuLCA0Lik7CiAgICAgICAgICAgICBmbG9hdDMgYiA9IGZsb2F0Myhh
LCA1Lik7CiAgICAgICAgICAgICByZXR1cm4gYlsxXTsKICAgICAgICAgfQotICAgICAgICBmbG9h
dCBmb29mMygpCisgICAgICAgIHRlc3QgZmxvYXQgZm9vZjMoKQogICAgICAgICB7CiAgICAgICAg
ICAgICBmbG9hdDMgYSA9IGZsb2F0MygzLiwgNC4sIDUuKTsKICAgICAgICAgICAgIGZsb2F0NCBi
ID0gZmxvYXQ0KDYuLCBhKTsKICAgICAgICAgICAgIHJldHVybiBiWzFdOwogICAgICAgICB9Ci0g
ICAgICAgIGZsb2F0IGZvb2Y0KCkKKyAgICAgICAgdGVzdCBmbG9hdCBmb29mNCgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGZsb2F0MiBhID0gZmxvYXQyKDMuLCA0Lik7CiAgICAgICAgICAgICBm
bG9hdDIgYiA9IGZsb2F0Mig1LiwgNi4pOwogICAgICAgICAgICAgZmxvYXQ0IGMgPSBmbG9hdDQo
YSwgYik7CiAgICAgICAgICAgICByZXR1cm4gY1syXTsKICAgICAgICAgfQotICAgICAgICBib29s
IGZvb2Y1KCkKKyAgICAgICAgdGVzdCBib29sIGZvb2Y1KCkKICAgICAgICAgewogICAgICAgICAg
ICAgZmxvYXQ0IGEgPSBmbG9hdDQoMy4sIDQuLCA1LiwgNi4pOwogICAgICAgICAgICAgZmxvYXQy
IGIgPSBmbG9hdDIoNC4sIDUuKTsKICAgICAgICAgICAgIGZsb2F0NCBjID0gZmxvYXQ0KDMuLCBi
LCA2Lik7CiAgICAgICAgICAgICByZXR1cm4gYSA9PSBjOwogICAgICAgICB9Ci0gICAgICAgIGJv
b2wgZm9vZjYoKQorICAgICAgICB0ZXN0IGJvb2wgZm9vZjYoKQogICAgICAgICB7CiAgICAgICAg
ICAgICBmbG9hdDIgYSA9IGZsb2F0Mig0LiwgNS4pOwogICAgICAgICAgICAgZmxvYXQzIGIgPSBm
bG9hdDMoMy4sIGEpOwpAQCAtMzI5Myw3ICszMjkzLDcgQEAgdGVzdHMuYnVpbHRpblZlY3Rvckdl
dHRlcnMgPSBmdW5jdGlvbigpCiAgICAgICAgIGZvciAobGV0IHNpemUgb2Ygc2l6ZXMpIHsKICAg
ICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAg
ICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dHlwZU5hbWV9JHtzaXplfSR7ZWxlbWVudHNbaV19
YDsKLSAgICAgICAgICAgICAgICBzcmMgKz0gYCR7dHlwZU5hbWV9ICR7ZnVuY3Rpb25OYW1lfSgp
CisgICAgICAgICAgICAgICAgc3JjICs9IGB0ZXN0ICR7dHlwZU5hbWV9ICR7ZnVuY3Rpb25OYW1l
fSgpCiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJHt0eXBlTmFtZX0ke3NpemV9IHggPSAke3R5cGVOYW1lfSR7c2l6ZX0oJHtpbml0aWFsaXpl
ckxpc3Quc2xpY2UoMCwgc2l6ZSkuam9pbigiLCAiKX0pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB4LiR7ZWxlbWVudHNbaV19OwpAQCAtMzMyOSw3ICszMzI5LDcgQEAgdGVz
dHMuYnVpbHRpblZlY3RvclNldHRlcnMgPSBmdW5jdGlvbigpCiAgICAgICAgIGZvciAobGV0IHNp
emUgb2Ygc2l6ZXMpIHsKICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dHlwZU5hbWV9JHtz
aXplfSR7ZWxlbWVudHNbaV19YDsKLSAgICAgICAgICAgICAgICBzcmMgKz0gYCR7dHlwZU5hbWV9
ICR7ZnVuY3Rpb25OYW1lfSgpCisgICAgICAgICAgICAgICAgc3JjICs9IGB0ZXN0ICR7dHlwZU5h
bWV9ICR7ZnVuY3Rpb25OYW1lfSgpCiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJHt0eXBlTmFtZX0ke3NpemV9IHggPSAke3R5cGVOYW1lfSR7
c2l6ZX0oJHtpbml0aWFsaXplckxpc3Quc2xpY2UoMCwgc2l6ZSkuam9pbigiLCAiKX0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHguJHtlbGVtZW50c1tpXX0gPSAzNDsKQEAgLTMzNjYs
NyArMzM2Niw3IEBAIHRlc3RzLmJ1aWx0aW5WZWN0b3JJbmRleFNldHRlcnMgPSBmdW5jdGlvbigp
CiAgICAgICAgIGZvciAobGV0IHNpemUgb2Ygc2l6ZXMpIHsKICAgICAgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25O
YW1lID0gYCR7dHlwZU5hbWV9JHtzaXplfSR7ZWxlbWVudHNbaV19YDsKLSAgICAgICAgICAgICAg
ICBzcmMgKz0gYCR7dHlwZU5hbWV9ICR7ZnVuY3Rpb25OYW1lfSgpCisgICAgICAgICAgICAgICAg
c3JjICs9IGB0ZXN0ICR7dHlwZU5hbWV9ICR7ZnVuY3Rpb25OYW1lfSgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0eXBlTmFtZX0ke3Np
emV9IHggPSAke3R5cGVOYW1lfSR7c2l6ZX0oJHtpbml0aWFsaXplckxpc3Quc2xpY2UoMCwgc2l6
ZSkuam9pbigiLCAiKX0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbJHtpfV0gPSAz
NDsKQEAgLTMzOTksMTE3ICszMzk5LDE4MyBAQCB0ZXN0cy5zaW1wbGVFbnVtID0gZnVuY3Rpb24o
KQogICAgICAgICAgICAgUGVzdGlsZW5jZSwKICAgICAgICAgICAgIERlYXRoCiAgICAgICAgIH0K
LSAgICAgICAgRm9vIHdhcigpCisgICAgICAgIEZvbyBfd2FyKCkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIEZvby5XYXI7CiAgICAgICAgIH0KLSAgICAgICAgRm9vIGZhbWluZSgpCisg
ICAgICAgIAorICAgICAgICB0ZXN0IEZvbyB3YXIoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gX3dhcigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBGb28gX2ZhbWluZSgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBGb28uRmFtaW5lOwogICAgICAgICB9Ci0g
ICAgICAgIEZvbyBwZXN0aWxlbmNlKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgRm9vIGZhbWlu
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZmFtaW5lKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIEZvbyBfcGVzdGlsZW5jZSgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBGb28uUGVzdGlsZW5jZTsKICAgICAgICAgfQotICAgICAgICBGb28gZGVhdGgo
KQorICAgICAgICAKKyAgICAgICAgdGVzdCBGb28gcGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBfcGVzdGlsZW5jZSgpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBGb28gX2RlYXRoKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEZvby5EZWF0
aDsKICAgICAgICAgfQotICAgICAgICBib29sIGVxdWFscyhGb28gYSwgRm9vIGIpCisgICAgICAg
IAorICAgICAgICB0ZXN0IEZvbyBkZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBfZGVhdGgoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBfZXF1YWxzKEZv
byBhLCBGb28gYikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICAg
ICAgfQotICAgICAgICBib29sIG5vdEVxdWFscyhGb28gYSwgRm9vIGIpCisgICAgICAgIGJvb2wg
X25vdEVxdWFscyhGb28gYSwgRm9vIGIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBh
ICE9IGI7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCB0ZXN0U2ltcGxlRXF1YWwoKQorICAgICAg
ICAKKyAgICAgICAgdGVzdCBib29sIHRlc3RTaW1wbGVFcXVhbCgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcXVhbHMoRm9vLldhciwgRm9vLldhcik7CisgICAgICAgICAgICByZXR1
cm4gX2VxdWFscyhGb28uV2FyLCBGb28uV2FyKTsKICAgICAgICAgfQotICAgICAgICBib29sIHRl
c3RBbm90aGVyRXF1YWwoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBib29sIHRlc3RBbm90aGVy
RXF1YWwoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXF1YWxzKEZvby5QZXN0aWxl
bmNlLCBGb28uUGVzdGlsZW5jZSk7CisgICAgICAgICAgICByZXR1cm4gX2VxdWFscyhGb28uUGVz
dGlsZW5jZSwgRm9vLlBlc3RpbGVuY2UpOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgdGVzdE5v
dEVxdWFsKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgYm9vbCB0ZXN0Tm90RXF1YWwoKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXF1YWxzKEZvby5GYW1pbmUsIEZvby5EZWF0aCk7
CisgICAgICAgICAgICByZXR1cm4gX2VxdWFscyhGb28uRmFtaW5lLCBGb28uRGVhdGgpOwogICAg
ICAgICB9Ci0gICAgICAgIGJvb2wgdGVzdFNpbXBsZU5vdEVxdWFsKCkKKyAgICAgICAgCisgICAg
ICAgIHRlc3QgYm9vbCB0ZXN0U2ltcGxlTm90RXF1YWwoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbm90RXF1YWxzKEZvby5XYXIsIEZvby5XYXIpOworICAgICAgICAgICAgcmV0dXJu
IF9ub3RFcXVhbHMoRm9vLldhciwgRm9vLldhcik7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCB0
ZXN0QW5vdGhlck5vdEVxdWFsKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgYm9vbCB0ZXN0QW5v
dGhlck5vdEVxdWFsKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5vdEVxdWFscyhG
b28uUGVzdGlsZW5jZSwgRm9vLlBlc3RpbGVuY2UpOworICAgICAgICAgICAgcmV0dXJuIF9ub3RF
cXVhbHMoRm9vLlBlc3RpbGVuY2UsIEZvby5QZXN0aWxlbmNlKTsKICAgICAgICAgfQotICAgICAg
ICBib29sIHRlc3ROb3ROb3RFcXVhbCgpCisgICAgICAgIAorICAgICAgICB0ZXN0IGJvb2wgdGVz
dE5vdE5vdEVxdWFsKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5vdEVxdWFscyhG
b28uRmFtaW5lLCBGb28uRGVhdGgpOworICAgICAgICAgICAgcmV0dXJuIF9ub3RFcXVhbHMoRm9v
LkZhbWluZSwgRm9vLkRlYXRoKTsKICAgICAgICAgfQotICAgICAgICBpbnQgaW50V2FyKCkKKyAg
ICAgICAgCisgICAgICAgIGludCBfaW50V2FyKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGludCh3YXIoKSk7CisgICAgICAgICAgICByZXR1cm4gaW50KF93YXIoKSk7CiAgICAgICAg
IH0KLSAgICAgICAgaW50IGludEZhbWluZSgpCisgICAgICAgIAorICAgICAgICB0ZXN0IGludCBp
bnRXYXIoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaW50KGZhbWluZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBfaW50V2FyKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGludFBl
c3RpbGVuY2UoKQorICAgICAgICAKKyAgICAgICAgaW50IF9pbnRGYW1pbmUoKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gaW50KHBlc3RpbGVuY2UoKSk7CisgICAgICAgICAgICByZXR1
cm4gaW50KF9mYW1pbmUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGludERlYXRoKCkKKyAg
ICAgICAgCisgICAgICAgIHRlc3QgaW50IGludEZhbWluZSgpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBpbnQoZGVhdGgoKSk7CisgICAgICAgICAgICByZXR1cm4gX2ludEZhbWluZSgp
OwogICAgICAgICB9Ci0gICAgICAgIGludCB3YXJWYWx1ZSgpCisgICAgICAgIAorICAgICAgICBp
bnQgX2ludFBlc3RpbGVuY2UoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gd2FyKCku
dmFsdWU7CisgICAgICAgICAgICByZXR1cm4gaW50KF9wZXN0aWxlbmNlKCkpOwogICAgICAgICB9
Ci0gICAgICAgIGludCBmYW1pbmVWYWx1ZSgpCisgICAgICAgIAorICAgICAgICB0ZXN0IGludCBp
bnRQZXN0aWxlbmNlKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbWluZSgpLnZh
bHVlOworICAgICAgICAgICAgcmV0dXJuIF9pbnRQZXN0aWxlbmNlKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgaW50IHBlc3RpbGVuY2VWYWx1ZSgpCisgICAgICAgIAorICAgICAgICBpbnQgX2ludERl
YXRoKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHBlc3RpbGVuY2UoKS52YWx1ZTsK
KyAgICAgICAgICAgIHJldHVybiBpbnQoX2RlYXRoKCkpOwogICAgICAgICB9Ci0gICAgICAgIGlu
dCBkZWF0aFZhbHVlKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgaW50IGludERlYXRoKCkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlYXRoKCkudmFsdWU7CisgICAgICAgICAgICBy
ZXR1cm4gX2ludERlYXRoKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW50IHdhclZhbHVlTGl0ZXJh
bCgpCisgICAgICAgIAorICAgICAgICB0ZXN0IGludCB3YXJWYWx1ZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBfd2FyKCkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHRlc3QgaW50IGZhbWluZVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IF9mYW1pbmUoKS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGVzdCBpbnQg
cGVzdGlsZW5jZVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9wZXN0aWxl
bmNlKCkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlc3QgaW50IGRlYXRo
VmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2RlYXRoKCkudmFsdWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlc3QgaW50IHdhclZhbHVlTGl0ZXJhbCgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBGb28uV2FyLnZhbHVlOwogICAgICAgICB9Ci0g
ICAgICAgIGludCBmYW1pbmVWYWx1ZUxpdGVyYWwoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBp
bnQgZmFtaW5lVmFsdWVMaXRlcmFsKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEZv
by5GYW1pbmUudmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAgaW50IHBlc3RpbGVuY2VWYWx1ZUxp
dGVyYWwoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBpbnQgcGVzdGlsZW5jZVZhbHVlTGl0ZXJh
bCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5jZS52YWx1ZTsK
ICAgICAgICAgfQotICAgICAgICBpbnQgZGVhdGhWYWx1ZUxpdGVyYWwoKQorICAgICAgICAKKyAg
ICAgICAgdGVzdCBpbnQgZGVhdGhWYWx1ZUxpdGVyYWwoKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gRm9vLkRlYXRoLnZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIEZvbyBpbnRXYXJC
YWNrd2FyZHMoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBGb28gaW50V2FyQmFja3dhcmRzKCkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZvbyhpbnRXYXIoKSk7CisgICAgICAgICAg
ICByZXR1cm4gRm9vKF9pbnRXYXIoKSk7CiAgICAgICAgIH0KLSAgICAgICAgRm9vIGludEZhbWlu
ZUJhY2t3YXJkcygpCisKKyAgICAgICAgdGVzdCBGb28gaW50RmFtaW5lQmFja3dhcmRzKCkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZvbyhpbnRGYW1pbmUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gRm9vKF9pbnRGYW1pbmUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgRm9vIGludFBl
c3RpbGVuY2VCYWNrd2FyZHMoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBGb28gaW50UGVzdGls
ZW5jZUJhY2t3YXJkcygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBGb28oaW50UGVz
dGlsZW5jZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBGb28oX2ludFBlc3RpbGVuY2UoKSk7CiAg
ICAgICAgIH0KLSAgICAgICAgRm9vIGludERlYXRoQmFja3dhcmRzKCkKKyAgICAgICAgCisgICAg
ICAgIHRlc3QgRm9vIGludERlYXRoQmFja3dhcmRzKCkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEZvbyhpbnREZWF0aCgpKTsKKyAgICAgICAgICAgIHJldHVybiBGb28oX2ludERlYXRo
KCkpOwogICAgICAgICB9CiAgICAgYCk7CiAgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAid2FyIiwgW10pLCAwKTsKQEAgLTM1NDksMTkgKzM2MTUsMTkgQEAgdGVz
dHMuZW51bVdpdGhNYW51YWxWYWx1ZXMgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICBQZXN0aWxl
bmNlID0gMjMsCiAgICAgICAgICAgICBEZWF0aCA9IC00MgogICAgICAgICB9Ci0gICAgICAgIEZv
byB3YXIoKQorICAgICAgICB0ZXN0IEZvbyB3YXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gRm9vLldhcjsKICAgICAgICAgfQotICAgICAgICBGb28gZmFtaW5lKCkKKyAgICAgICAg
dGVzdCBGb28gZmFtaW5lKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEZvby5GYW1p
bmU7CiAgICAgICAgIH0KLSAgICAgICAgRm9vIHBlc3RpbGVuY2UoKQorICAgICAgICB0ZXN0IEZv
byBwZXN0aWxlbmNlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEZvby5QZXN0aWxl
bmNlOwogICAgICAgICB9Ci0gICAgICAgIEZvbyBkZWF0aCgpCisgICAgICAgIHRlc3QgRm9vIGRl
YXRoKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEZvby5EZWF0aDsKICAgICAgICAg
fQpAQCAtMzYwOSwxOSArMzY3NSwxOSBAQCB0ZXN0cy5lbnVtV2l0aFNvbWVNYW51YWxWYWx1ZXMg
PSBmdW5jdGlvbigpCiAgICAgICAgICAgICBQZXN0aWxlbmNlID0gMCwKICAgICAgICAgICAgIERl
YXRoCiAgICAgICAgIH0KLSAgICAgICAgRm9vIHdhcigpCisgICAgICAgIHRlc3QgRm9vIHdhcigp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBGb28uV2FyOwogICAgICAgICB9Ci0gICAg
ICAgIEZvbyBmYW1pbmUoKQorICAgICAgICB0ZXN0IEZvbyBmYW1pbmUoKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gRm9vLkZhbWluZTsKICAgICAgICAgfQotICAgICAgICBGb28gcGVz
dGlsZW5jZSgpCisgICAgICAgIHRlc3QgRm9vIHBlc3RpbGVuY2UoKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gRm9vLlBlc3RpbGVuY2U7CiAgICAgICAgIH0KLSAgICAgICAgRm9vIGRl
YXRoKCkKKyAgICAgICAgdGVzdCBGb28gZGVhdGgoKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gRm9vLkRlYXRoOwogICAgICAgICB9CkBAIC0zNjM1LDExICszNzAxLDExIEBAIHRlc3Rz
LmVudW1XaXRoU29tZU1hbnVhbFZhbHVlcyA9IGZ1bmN0aW9uKCkKIHRlc3RzLnRyYXAgPSBmdW5j
dGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKCkK
KyAgICAgICAgdGVzdCBpbnQgZm9vKCkKICAgICAgICAgewogICAgICAgICAgICAgdHJhcDsKICAg
ICAgICAgfQotICAgICAgICBpbnQgZm9vMihpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vMihp
bnQgeCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHggPT0gMykKICAgICAgICAgICAgICAg
ICB0cmFwOwpAQCAtMzY0OSw3ICszNzE1LDcgQEAgdGVzdHMudHJhcCA9IGZ1bmN0aW9uKCkKICAg
ICAgICAgICAgIGludDMgeDsKICAgICAgICAgICAgIGZsb2F0IHk7CiAgICAgICAgIH0KLSAgICAg
ICAgQmFyIGZvbzMoKQorICAgICAgICB0ZXN0IEJhciBmb28zKCkKICAgICAgICAgewogICAgICAg
ICAgICAgdHJhcDsKICAgICAgICAgfQpAQCAtMzcwMiwxMTcgKzM3NjgsMTgzIEBAIHRlc3RzLmVu
dW1XaXRoRXhwbGljaXRJbnRCYXNlID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgUGVzdGlsZW5j
ZSwKICAgICAgICAgICAgIERlYXRoCiAgICAgICAgIH0KLSAgICAgICAgRm9vIHdhcigpCisgICAg
ICAgIEZvbyBfd2FyKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEZvby5XYXI7CiAg
ICAgICAgIH0KLSAgICAgICAgRm9vIGZhbWluZSgpCisgICAgICAgIAorICAgICAgICB0ZXN0IEZv
byB3YXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3dhcigpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBGb28gX2ZhbWluZSgpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBGb28uRmFtaW5lOwogICAgICAgICB9Ci0gICAgICAgIEZvbyBwZXN0aWxlbmNlKCkK
KyAgICAgICAgCisgICAgICAgIHRlc3QgRm9vIGZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBfZmFtaW5lKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEZvbyBf
cGVzdGlsZW5jZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5j
ZTsKICAgICAgICAgfQotICAgICAgICBGb28gZGVhdGgoKQorICAgICAgICAKKyAgICAgICAgdGVz
dCBGb28gcGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfcGVzdGls
ZW5jZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBGb28gX2RlYXRoKCkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIEZvby5EZWF0aDsKICAgICAgICAgfQotICAgICAgICBi
b29sIGVxdWFscyhGb28gYSwgRm9vIGIpCisgICAgICAgIAorICAgICAgICB0ZXN0IEZvbyBkZWF0
aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZGVhdGgoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBfZXF1YWxzKEZvbyBhLCBGb28gYikKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICAgICAgfQotICAgICAgICBib29sIG5vdEVx
dWFscyhGb28gYSwgRm9vIGIpCisgICAgICAgIGJvb2wgX25vdEVxdWFscyhGb28gYSwgRm9vIGIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhICE9IGI7CiAgICAgICAgIH0KLSAgICAg
ICAgYm9vbCB0ZXN0U2ltcGxlRXF1YWwoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBib29sIHRl
c3RTaW1wbGVFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZXF1YWxzKEZv
by5XYXIsIEZvby5XYXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZXN0IGJvb2wg
dGVzdEFub3RoZXJFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZXF1YWxz
KEZvby5QZXN0aWxlbmNlLCBGb28uUGVzdGlsZW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHRlc3QgYm9vbCB0ZXN0Tm90RXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gX2VxdWFscyhGb28uRmFtaW5lLCBGb28uRGVhdGgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB0ZXN0IGJvb2wgdGVzdFNpbXBsZU5vdEVxdWFsKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIF9ub3RFcXVhbHMoRm9vLldhciwgRm9vLldhcik7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHRlc3QgYm9vbCB0ZXN0QW5vdGhlck5vdEVxdWFsKCkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVxdWFscyhGb28uV2FyLCBGb28uV2FyKTsKKyAgICAg
ICAgICAgIHJldHVybiBfbm90RXF1YWxzKEZvby5QZXN0aWxlbmNlLCBGb28uUGVzdGlsZW5jZSk7
CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCB0ZXN0QW5vdGhlckVxdWFsKCkKKyAgICAgICAgCisg
ICAgICAgIHRlc3QgYm9vbCB0ZXN0Tm90Tm90RXF1YWwoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXF1YWxzKEZvby5QZXN0aWxlbmNlLCBGb28uUGVzdGlsZW5jZSk7CisgICAgICAg
ICAgICByZXR1cm4gX25vdEVxdWFscyhGb28uRmFtaW5lLCBGb28uRGVhdGgpOwogICAgICAgICB9
Ci0gICAgICAgIGJvb2wgdGVzdE5vdEVxdWFsKCkKKyAgICAgICAgCisgICAgICAgIGludCBfaW50
V2FyKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVxdWFscyhGb28uRmFtaW5lLCBG
b28uRGVhdGgpOworICAgICAgICAgICAgcmV0dXJuIGludChfd2FyKCkpOwogICAgICAgICB9Ci0g
ICAgICAgIGJvb2wgdGVzdFNpbXBsZU5vdEVxdWFsKCkKKyAgICAgICAgCisgICAgICAgIHRlc3Qg
aW50IGludFdhcigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBub3RFcXVhbHMoRm9v
LldhciwgRm9vLldhcik7CisgICAgICAgICAgICByZXR1cm4gX2ludFdhcigpOwogICAgICAgICB9
Ci0gICAgICAgIGJvb2wgdGVzdEFub3RoZXJOb3RFcXVhbCgpCisgICAgICAgIAorICAgICAgICBp
bnQgX2ludEZhbWluZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBub3RFcXVhbHMo
Rm9vLlBlc3RpbGVuY2UsIEZvby5QZXN0aWxlbmNlKTsKKyAgICAgICAgICAgIHJldHVybiBpbnQo
X2ZhbWluZSgpKTsKICAgICAgICAgfQotICAgICAgICBib29sIHRlc3ROb3ROb3RFcXVhbCgpCisg
ICAgICAgIAorICAgICAgICB0ZXN0IGludCBpbnRGYW1pbmUoKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbm90RXF1YWxzKEZvby5GYW1pbmUsIEZvby5EZWF0aCk7CisgICAgICAgICAg
ICByZXR1cm4gX2ludEZhbWluZSgpOwogICAgICAgICB9Ci0gICAgICAgIGludCBpbnRXYXIoKQor
ICAgICAgICAKKyAgICAgICAgaW50IF9pbnRQZXN0aWxlbmNlKCkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGludCh3YXIoKSk7CisgICAgICAgICAgICByZXR1cm4gaW50KF9wZXN0aWxl
bmNlKCkpOwogICAgICAgICB9Ci0gICAgICAgIGludCBpbnRGYW1pbmUoKQorICAgICAgICAKKyAg
ICAgICAgdGVzdCBpbnQgaW50UGVzdGlsZW5jZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpbnQoZmFtaW5lKCkpOworICAgICAgICAgICAgcmV0dXJuIF9pbnRQZXN0aWxlbmNlKCk7
CiAgICAgICAgIH0KLSAgICAgICAgaW50IGludFBlc3RpbGVuY2UoKQorICAgICAgICAKKyAgICAg
ICAgaW50IF9pbnREZWF0aCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpbnQocGVz
dGlsZW5jZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBpbnQoX2RlYXRoKCkpOwogICAgICAgICB9
Ci0gICAgICAgIGludCBpbnREZWF0aCgpCisgICAgICAgIAorICAgICAgICB0ZXN0IGludCBpbnRE
ZWF0aCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpbnQoZGVhdGgoKSk7CisgICAg
ICAgICAgICByZXR1cm4gX2ludERlYXRoKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW50IHdhclZh
bHVlKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgaW50IHdhclZhbHVlKCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIHdhcigpLnZhbHVlOworICAgICAgICAgICAgcmV0dXJuIF93YXIo
KS52YWx1ZTsKICAgICAgICAgfQotICAgICAgICBpbnQgZmFtaW5lVmFsdWUoKQorICAgICAgICAK
KyAgICAgICAgdGVzdCBpbnQgZmFtaW5lVmFsdWUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFtaW5lKCkudmFsdWU7CisgICAgICAgICAgICByZXR1cm4gX2ZhbWluZSgpLnZhbHVl
OwogICAgICAgICB9Ci0gICAgICAgIGludCBwZXN0aWxlbmNlVmFsdWUoKQorICAgICAgICAKKyAg
ICAgICAgdGVzdCBpbnQgcGVzdGlsZW5jZVZhbHVlKCkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIHBlc3RpbGVuY2UoKS52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBfcGVzdGlsZW5j
ZSgpLnZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIGludCBkZWF0aFZhbHVlKCkKKyAgICAgICAg
CisgICAgICAgIHRlc3QgaW50IGRlYXRoVmFsdWUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZGVhdGgoKS52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBfZGVhdGgoKS52YWx1ZTsK
ICAgICAgICAgfQotICAgICAgICBpbnQgd2FyVmFsdWVMaXRlcmFsKCkKKyAgICAgICAgCisgICAg
ICAgIHRlc3QgaW50IHdhclZhbHVlTGl0ZXJhbCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBGb28uV2FyLnZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIGludCBmYW1pbmVWYWx1ZUxp
dGVyYWwoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBpbnQgZmFtaW5lVmFsdWVMaXRlcmFsKCkK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEZvby5GYW1pbmUudmFsdWU7CiAgICAgICAg
IH0KLSAgICAgICAgaW50IHBlc3RpbGVuY2VWYWx1ZUxpdGVyYWwoKQorICAgICAgICAKKyAgICAg
ICAgdGVzdCBpbnQgcGVzdGlsZW5jZVZhbHVlTGl0ZXJhbCgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBGb28uUGVzdGlsZW5jZS52YWx1ZTsKICAgICAgICAgfQotICAgICAgICBpbnQg
ZGVhdGhWYWx1ZUxpdGVyYWwoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBpbnQgZGVhdGhWYWx1
ZUxpdGVyYWwoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gRm9vLkRlYXRoLnZhbHVl
OwogICAgICAgICB9Ci0gICAgICAgIEZvbyBpbnRXYXJCYWNrd2FyZHMoKQorICAgICAgICAKKyAg
ICAgICAgdGVzdCBGb28gaW50V2FyQmFja3dhcmRzKCkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEZvbyhpbnRXYXIoKSk7CisgICAgICAgICAgICByZXR1cm4gRm9vKF9pbnRXYXIoKSk7
CiAgICAgICAgIH0KLSAgICAgICAgRm9vIGludEZhbWluZUJhY2t3YXJkcygpCisKKyAgICAgICAg
dGVzdCBGb28gaW50RmFtaW5lQmFja3dhcmRzKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIEZvbyhpbnRGYW1pbmUoKSk7CisgICAgICAgICAgICByZXR1cm4gRm9vKF9pbnRGYW1pbmUo
KSk7CiAgICAgICAgIH0KLSAgICAgICAgRm9vIGludFBlc3RpbGVuY2VCYWNrd2FyZHMoKQorICAg
ICAgICAKKyAgICAgICAgdGVzdCBGb28gaW50UGVzdGlsZW5jZUJhY2t3YXJkcygpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBGb28oaW50UGVzdGlsZW5jZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBGb28oX2ludFBlc3RpbGVuY2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgRm9vIGlu
dERlYXRoQmFja3dhcmRzKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgRm9vIGludERlYXRoQmFj
a3dhcmRzKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZvbyhpbnREZWF0aCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBGb28oX2ludERlYXRoKCkpOwogICAgICAgICB9CiAgICAgYCk7
CiAgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAid2FyIiwgW10p
LCAwKTsKQEAgLTM4NTIsMTE3ICszOTg0LDE4MyBAQCB0ZXN0cy5lbnVtV2l0aFVpbnRCYXNlID0g
ZnVuY3Rpb24oKQogICAgICAgICAgICAgUGVzdGlsZW5jZSwKICAgICAgICAgICAgIERlYXRoCiAg
ICAgICAgIH0KLSAgICAgICAgRm9vIHdhcigpCisgICAgICAgIEZvbyBfd2FyKCkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIEZvby5XYXI7CiAgICAgICAgIH0KLSAgICAgICAgRm9vIGZh
bWluZSgpCisgICAgICAgIAorICAgICAgICB0ZXN0IEZvbyB3YXIoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gX3dhcigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBGb28g
X2ZhbWluZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBGb28uRmFtaW5lOwogICAg
ICAgICB9Ci0gICAgICAgIEZvbyBwZXN0aWxlbmNlKCkKKyAgICAgICAgCisgICAgICAgIHRlc3Qg
Rm9vIGZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZmFtaW5lKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEZvbyBfcGVzdGlsZW5jZSgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5jZTsKICAgICAgICAgfQotICAgICAgICBG
b28gZGVhdGgoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBGb28gcGVzdGlsZW5jZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfcGVzdGlsZW5jZSgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBGb28gX2RlYXRoKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IEZvby5EZWF0aDsKICAgICAgICAgfQotICAgICAgICBib29sIGVxdWFscyhGb28gYSwgRm9vIGIp
CisgICAgICAgIAorICAgICAgICB0ZXN0IEZvbyBkZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBfZGVhdGgoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBf
ZXF1YWxzKEZvbyBhLCBGb28gYikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGEgPT0g
YjsKICAgICAgICAgfQotICAgICAgICBib29sIG5vdEVxdWFscyhGb28gYSwgRm9vIGIpCisgICAg
ICAgIGJvb2wgX25vdEVxdWFscyhGb28gYSwgRm9vIGIpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBhICE9IGI7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCB0ZXN0U2ltcGxlRXF1YWwo
KQorICAgICAgICAKKyAgICAgICAgdGVzdCBib29sIHRlc3RTaW1wbGVFcXVhbCgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcXVhbHMoRm9vLldhciwgRm9vLldhcik7CisgICAgICAg
ICAgICByZXR1cm4gX2VxdWFscyhGb28uV2FyLCBGb28uV2FyKTsKICAgICAgICAgfQotICAgICAg
ICBib29sIHRlc3RBbm90aGVyRXF1YWwoKQorICAgICAgICAKKyAgICAgICAgdGVzdCBib29sIHRl
c3RBbm90aGVyRXF1YWwoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXF1YWxzKEZv
by5QZXN0aWxlbmNlLCBGb28uUGVzdGlsZW5jZSk7CisgICAgICAgICAgICByZXR1cm4gX2VxdWFs
cyhGb28uUGVzdGlsZW5jZSwgRm9vLlBlc3RpbGVuY2UpOwogICAgICAgICB9Ci0gICAgICAgIGJv
b2wgdGVzdE5vdEVxdWFsKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgYm9vbCB0ZXN0Tm90RXF1
YWwoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXF1YWxzKEZvby5GYW1pbmUsIEZv
by5EZWF0aCk7CisgICAgICAgICAgICByZXR1cm4gX2VxdWFscyhGb28uRmFtaW5lLCBGb28uRGVh
dGgpOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgdGVzdFNpbXBsZU5vdEVxdWFsKCkKKyAgICAg
ICAgCisgICAgICAgIHRlc3QgYm9vbCB0ZXN0U2ltcGxlTm90RXF1YWwoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbm90RXF1YWxzKEZvby5XYXIsIEZvby5XYXIpOworICAgICAgICAg
ICAgcmV0dXJuIF9ub3RFcXVhbHMoRm9vLldhciwgRm9vLldhcik7CiAgICAgICAgIH0KLSAgICAg
ICAgYm9vbCB0ZXN0QW5vdGhlck5vdEVxdWFsKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgYm9v
bCB0ZXN0QW5vdGhlck5vdEVxdWFsKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5v
dEVxdWFscyhGb28uUGVzdGlsZW5jZSwgRm9vLlBlc3RpbGVuY2UpOworICAgICAgICAgICAgcmV0
dXJuIF9ub3RFcXVhbHMoRm9vLlBlc3RpbGVuY2UsIEZvby5QZXN0aWxlbmNlKTsKICAgICAgICAg
fQotICAgICAgICBib29sIHRlc3ROb3ROb3RFcXVhbCgpCisgICAgICAgIAorICAgICAgICB0ZXN0
IGJvb2wgdGVzdE5vdE5vdEVxdWFsKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5v
dEVxdWFscyhGb28uRmFtaW5lLCBGb28uRGVhdGgpOworICAgICAgICAgICAgcmV0dXJuIF9ub3RF
cXVhbHMoRm9vLkZhbWluZSwgRm9vLkRlYXRoKTsKICAgICAgICAgfQotICAgICAgICB1aW50IHVp
bnRXYXIoKQorICAgICAgICAKKyAgICAgICAgdWludCBfdWludFdhcigpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiB1aW50KHdhcigpKTsKKyAgICAgICAgICAgIHJldHVybiB1aW50KF93
YXIoKSk7CiAgICAgICAgIH0KLSAgICAgICAgdWludCB1aW50RmFtaW5lKCkKKyAgICAgICAgCisg
ICAgICAgIHRlc3QgdWludCB1aW50V2FyKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IHVpbnQoZmFtaW5lKCkpOworICAgICAgICAgICAgcmV0dXJuIF91aW50V2FyKCk7CiAgICAgICAg
IH0KLSAgICAgICAgdWludCB1aW50UGVzdGlsZW5jZSgpCisgICAgICAgIAorICAgICAgICB1aW50
IF91aW50RmFtaW5lKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHVpbnQocGVzdGls
ZW5jZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB1aW50KF9mYW1pbmUoKSk7CiAgICAgICAgIH0K
LSAgICAgICAgdWludCB1aW50RGVhdGgoKQorICAgICAgICAKKyAgICAgICAgdGVzdCB1aW50IHVp
bnRGYW1pbmUoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdWludChkZWF0aCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBfdWludEZhbWluZSgpOwogICAgICAgICB9Ci0gICAgICAgIHVp
bnQgd2FyVmFsdWUoKQorICAgICAgICAKKyAgICAgICAgdWludCBfdWludFBlc3RpbGVuY2UoKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gd2FyKCkudmFsdWU7CisgICAgICAgICAgICBy
ZXR1cm4gdWludChfcGVzdGlsZW5jZSgpKTsKICAgICAgICAgfQotICAgICAgICB1aW50IGZhbWlu
ZVZhbHVlKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgdWludCB1aW50UGVzdGlsZW5jZSgpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYW1pbmUoKS52YWx1ZTsKKyAgICAgICAgICAg
IHJldHVybiBfdWludFBlc3RpbGVuY2UoKTsKICAgICAgICAgfQotICAgICAgICB1aW50IHBlc3Rp
bGVuY2VWYWx1ZSgpCisgICAgICAgIAorICAgICAgICB1aW50IF91aW50RGVhdGgoKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gcGVzdGlsZW5jZSgpLnZhbHVlOworICAgICAgICAgICAg
cmV0dXJuIHVpbnQoX2RlYXRoKCkpOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZGVhdGhWYWx1
ZSgpCisgICAgICAgIAorICAgICAgICB0ZXN0IHVpbnQgdWludERlYXRoKCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGRlYXRoKCkudmFsdWU7CisgICAgICAgICAgICByZXR1cm4gX3Vp
bnREZWF0aCgpOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgd2FyVmFsdWVMaXRlcmFsKCkKKyAg
ICAgICAgCisgICAgICAgIHRlc3QgdWludCB3YXJWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBfd2FyKCkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRl
c3QgdWludCBmYW1pbmVWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZmFt
aW5lKCkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlc3QgdWludCBwZXN0
aWxlbmNlVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3Blc3RpbGVuY2Uo
KS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGVzdCB1aW50IGRlYXRoVmFs
dWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2RlYXRoKCkudmFsdWU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlc3QgdWludCB3YXJWYWx1ZUxpdGVyYWwoKQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gRm9vLldhci52YWx1ZTsKICAgICAgICAgfQotICAg
ICAgICB1aW50IGZhbWluZVZhbHVlTGl0ZXJhbCgpCisgICAgICAgIAorICAgICAgICB0ZXN0IHVp
bnQgZmFtaW5lVmFsdWVMaXRlcmFsKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEZv
by5GYW1pbmUudmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBwZXN0aWxlbmNlVmFsdWVM
aXRlcmFsKCkKKyAgICAgICAgCisgICAgICAgIHRlc3QgdWludCBwZXN0aWxlbmNlVmFsdWVMaXRl
cmFsKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEZvby5QZXN0aWxlbmNlLnZhbHVl
OwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZGVhdGhWYWx1ZUxpdGVyYWwoKQorICAgICAgICAK
KyAgICAgICAgdGVzdCB1aW50IGRlYXRoVmFsdWVMaXRlcmFsKCkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIEZvby5EZWF0aC52YWx1ZTsKICAgICAgICAgfQotICAgICAgICBGb28gdWlu
dFdhckJhY2t3YXJkcygpCisgICAgICAgIAorICAgICAgICB0ZXN0IEZvbyB1aW50V2FyQmFja3dh
cmRzKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZvbyh1aW50V2FyKCkpOworICAg
ICAgICAgICAgcmV0dXJuIEZvbyhfdWludFdhcigpKTsKICAgICAgICAgfQotICAgICAgICBGb28g
dWludEZhbWluZUJhY2t3YXJkcygpCisKKyAgICAgICAgdGVzdCBGb28gdWludEZhbWluZUJhY2t3
YXJkcygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBGb28odWludEZhbWluZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBGb28oX3VpbnRGYW1pbmUoKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgRm9vIHVpbnRQZXN0aWxlbmNlQmFja3dhcmRzKCkKKyAgICAgICAgCisgICAgICAgIHRlc3Qg
Rm9vIHVpbnRQZXN0aWxlbmNlQmFja3dhcmRzKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIEZvbyh1aW50UGVzdGlsZW5jZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBGb28oX3VpbnRQ
ZXN0aWxlbmNlKCkpOwogICAgICAgICB9Ci0gICAgICAgIEZvbyB1aW50RGVhdGhCYWNrd2FyZHMo
KQorICAgICAgICAKKyAgICAgICAgdGVzdCBGb28gdWludERlYXRoQmFja3dhcmRzKCkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEZvbyh1aW50RGVhdGgoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gRm9vKF91aW50RGVhdGgoKSk7CiAgICAgICAgIH0KICAgICBgKTsKICAgICBjaGVja0Vu
dW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ3YXIiLCBbXSksIDApOwpAQCAtNDAz
MCw3ICs0MjI4LDcgQEAgdGVzdHMuZW1wdHlTdHJ1Y3QgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0
IHByb2dyYW0gPSBkb1ByZXAoYAogICAgICAgICBzdHJ1Y3QgVGhpbmd5IHsgfQotICAgICAgICBp
bnQgZm9vKCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKICAgICAgICAgewogICAgICAgICAgICAg
VGhpbmd5IHRoaW5neTsKICAgICAgICAgICAgIHJldHVybiA0NjsKQEAgLTQwNjMsNyArNDI2MSw3
IEBAIHRlc3RzLmVudW1Ob01lbWJlcnMgPSBmdW5jdGlvbigpCiB0ZXN0cy5zaW1wbGVTd2l0Y2gg
PSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQg
Zm9vKGludCB4KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoeCkgewogICAgICAgICAgICAgY2FzZSA3Njc6CkBAIC00MDgyLDcgKzQy
ODAsNyBAQCB0ZXN0cy5zaW1wbGVTd2l0Y2ggPSBmdW5jdGlvbigpCiAKIHRlc3RzLmV4aGF1c3Rp
dmVVY2hhclN3aXRjaCA9IGZ1bmN0aW9uKCkKIHsKLSAgICBsZXQgdGV4dCA9ICJmbG9hdCBmb28o
dWNoYXIgeCkgeyBzd2l0Y2ggKHVjaGFyKHgpKSB7IgorICAgIGxldCB0ZXh0ID0gInRlc3QgZmxv
YXQgZm9vKHVjaGFyIHgpIHsgc3dpdGNoICh1Y2hhcih4KSkgeyIKICAgICBmb3IgKGxldCBpID0g
MDsgaSA8PSAweGZmOyArK2kpCiAgICAgICAgIHRleHQgKz0gImNhc2UgIiArIGkgKyAiOiByZXR1
cm4gIiArIGkgKiAxLjUgKyAiOyI7CiAgICAgdGV4dCArPSAifSB9IjsKQEAgLTQwOTMsNyArNDI5
MSw3IEBAIHRlc3RzLmV4aGF1c3RpdmVVY2hhclN3aXRjaCA9IGZ1bmN0aW9uKCkKIAogdGVzdHMu
bm90UXVpdGVFeGhhdXN0aXZlVWNoYXJTd2l0Y2ggPSBmdW5jdGlvbigpCiB7Ci0gICAgbGV0IHRl
eHQgPSAiZmxvYXQgZm9vKHVjaGFyIHgpIHsgc3dpdGNoICh1Y2hhcih4KSkgeyIKKyAgICBsZXQg
dGV4dCA9ICJ0ZXN0IGZsb2F0IGZvbyh1Y2hhciB4KSB7IHN3aXRjaCAodWNoYXIoeCkpIHsiCiAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMHhmZTsgKytpKQogICAgICAgICB0ZXh0ICs9ICJjYXNl
ICIgKyBpICsgIjogcmV0dXJuICIgKyBpICogMS41ICsgIjsiOwogICAgIHRleHQgKz0gIn0gfSI7
CkBAIC00MTAyLDcgKzQzMDAsNyBAQCB0ZXN0cy5ub3RRdWl0ZUV4aGF1c3RpdmVVY2hhclN3aXRj
aCA9IGZ1bmN0aW9uKCkKIAogdGVzdHMubm90UXVpdGVFeGhhdXN0aXZlVWNoYXJTd2l0Y2hXaXRo
RGVmYXVsdCA9IGZ1bmN0aW9uKCkKIHsKLSAgICBsZXQgdGV4dCA9ICJmbG9hdCBmb28odWNoYXIg
eCkgeyBzd2l0Y2ggKHVjaGFyKHgpKSB7IgorICAgIGxldCB0ZXh0ID0gInRlc3QgZmxvYXQgZm9v
KHVjaGFyIHgpIHsgc3dpdGNoICh1Y2hhcih4KSkgeyIKICAgICBmb3IgKGxldCBpID0gMDsgaSA8
PSAweGZlOyArK2kpCiAgICAgICAgIHRleHQgKz0gImNhc2UgIiArIGkgKyAiOiByZXR1cm4gIiAr
IGkgKiAxLjUgKyAiOyI7CiAgICAgdGV4dCArPSAiZGVmYXVsdDogcmV0dXJuICIgKyAweGZmICog
MS41ICsgIjsiOwpAQCAtNDExNyw3ICs0MzE1LDcgQEAgdGVzdHMuc3dpdGNoRmFsbFRocm91Z2gg
PSBmdW5jdGlvbigpCiAgICAgLy8gRklYTUU6IFRoaXMgbWlnaHQgYmVjb21lIGFuIGVycm9yIGlu
IGZ1dHVyZSB2ZXJzaW9ucy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3MTcyCiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQg
Zm9vKGludCB4KQorICAgICAgICB0ZXN0IGludCBmb28oaW50IHgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGludCByZXN1bHQgPSAwOwogICAgICAgICAgICAgc3dpdGNoICh4KSB7CkBAIC00MTM5
LDcgKzQzMzcsNyBAQCB0ZXN0cy5zd2l0Y2hGYWxsVGhyb3VnaCA9IGZ1bmN0aW9uKCkKIHRlc3Rz
LnN3aXRjaEJyZWFrID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
LSAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKGludCB4KQogICAg
ICAgICB7CiAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKICAgICAgICAgICAgIHN3aXRjaCAo
eCkgewpAQCAtNDE2Nyw3ICs0MzY1LDcgQEAgdGVzdHMuZW51bVN3aXRjaEJyZWFrRXhoYXVzdGl2
ZSA9IGZ1bmN0aW9uKCkKICAgICAgICAgZW51bSBGb28gewogICAgICAgICAgICAgQSwgQiwgQwog
ICAgICAgICB9Ci0gICAgICAgIGludCBmb28oRm9vIHgpCisgICAgICAgIHRlc3QgaW50IGZvbyhG
b28geCkKICAgICAgICAgewogICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgICAgICAg
ICBzd2l0Y2ggKHgpIHsKQEAgLTQyMjIsNyArNDQyMCw3IEBAIHRlc3RzLmVudW1Td2l0Y2hCcmVh
a05vdFF1aXRlRXhoYXVzdGl2ZVdpdGhEZWZhdWx0ID0gZnVuY3Rpb24oKQogICAgICAgICBlbnVt
IEZvbyB7CiAgICAgICAgICAgICBBLCBCLCBDCiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbyhG
b28geCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKEZvbyB4KQogICAgICAgICB7CiAgICAgICAgICAg
ICBpbnQgcmVzdWx0ID0gMDsKICAgICAgICAgICAgIHN3aXRjaCAoeCkgewpAQCAtNDI4MCw3ICs0
NDc4LDcgQEAgdGVzdHMubXV0dWFsbHlSZWN1cnNpdmVTdHJ1Y3RXaXRoUG9pbnRlcnNCcm9rZW4g
PSBmdW5jdGlvbigpCiAgICAgICAgICAgICB0aHJlYWQgRm9vKiBmb287CiAgICAgICAgICAgICBp
bnQgYmFyOwogICAgICAgICB9Ci0gICAgICAgIGludCBmb28oKQorICAgICAgICB0ZXN0IGludCBm
b28oKQogICAgICAgICB7CiAgICAgICAgICAgICBGb28gZm9vOwogICAgICAgICAgICAgQmFyIGJh
cjsKQEAgLTQzMDUsNyArNDUwMyw3IEBAIHRlc3RzLm11dHVhbGx5UmVjdXJzaXZlU3RydWN0V2l0
aFBvaW50ZXJzID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgdGhyZWFkIEZvbyogZm9vOwogICAg
ICAgICAgICAgaW50IGJhcjsKICAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAg
dGVzdCBpbnQgZm9vKCkKICAgICAgICAgewogICAgICAgICAgICAgRm9vIGZvbzsKICAgICAgICAg
ICAgIEJhciBiYXI7CkBAIC00MzI2LDcgKzQ1MjQsNyBAQCB0ZXN0cy5saW5rZWRMaXN0ID0gZnVu
Y3Rpb24oKQogICAgICAgICAgICAgdGhyZWFkIE5vZGUqIG5leHQ7CiAgICAgICAgICAgICBpbnQg
dmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCisgICAgICAgIHRlc3QgaW50IGZv
bygpCiAgICAgICAgIHsKICAgICAgICAgICAgIE5vZGUgeCwgeSwgejsKICAgICAgICAgICAgIHgu
bmV4dCA9ICZ5OwpAQCAtNDM0Myw3ICs0NTQxLDcgQEAgdGVzdHMubGlua2VkTGlzdCA9IGZ1bmN0
aW9uKCkKIHRlc3RzLnBvaW50ZXJUb1BvaW50ZXIgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHBy
b2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgdGVzdCBpbnQgZm9v
KCkKICAgICAgICAgewogICAgICAgICAgICAgaW50IHg7CiAgICAgICAgICAgICB0aHJlYWQgaW50
KiBwID0gJng7CkBAIC00MzY2LDcgKzQ1NjQsNyBAQCB0ZXN0cy5wb2ludGVyVG9Qb2ludGVyID0g
ZnVuY3Rpb24oKQogdGVzdHMuYXJyYXlSZWZUb0FycmF5UmVmID0gZnVuY3Rpb24oKQogewogICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbygpCisgICAgICAgIHRlc3Qg
aW50IGZvbygpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICAgdGhy
ZWFkIGludFtdIHAgPSBAeDsKQEAgLTQ0NzYsNyArNDY3NCw3IEBAIHRlc3RzLm9wZXJhdG9yV2l0
aG91dFVuaW5mZXJyYWJsZVR5cGVWYXJpYWJsZSA9IGZ1bmN0aW9uKCkKICAgICAgICAgICAgIHJl
c3VsdC54ID0gYS54ICsgYi54OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
fQotICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKICAgICAgICAgewog
ICAgICAgICAgICAgRm9vIGE7CiAgICAgICAgICAgICBhLnggPSA2NDU7CkBAIC00OTcwLDcgKzUx
NjgsNyBAQCB0ZXN0cy5hbmRlcldpdGhOb3RoaW5nV3JvbmcgPSBmdW5jdGlvbigpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiAmZm9vLT54OwogICAgICAgICB9Ci0gICAgICAgIGludCBm
b28oKQorICAgICAgICB0ZXN0IGludCBmb28oKQogICAgICAgICB7CiAgICAgICAgICAgICBGb28g
eDsKICAgICAgICAgICAgIHgueCA9IDEzOwpAQCAtNTA0NCw3ICs1MjQyLDcgQEAgdGVzdHMuYW5k
ZXJXaXRoQXJyYXlSZWYgPSBmdW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biAmZm9vWzBdLng7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCisgICAgICAgIHRlc3Qg
aW50IGZvbygpCiAgICAgICAgIHsKICAgICAgICAgICAgIEZvbyB4OwogICAgICAgICAgICAgeC54
ID0gMTM7CkBAIC01MjQ5LDcgKzU0NDcsNyBAQCB0ZXN0cy5pbmRleEFuZGVyV2l0aE5vdGhpbmdX
cm9uZyA9IGZ1bmN0aW9uKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZmb28tPng7
CiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbygpCisgICAgICAgIHRlc3QgaW50IGZvbygpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEZvbyB4OwogICAgICAgICAgICAgeC54ID0gMTM7CkBAIC01
MzM0LDcgKzU1MzIsNyBAQCB0ZXN0cy5pbmRleEFuZGVyV2l0aEFycmF5UmVmID0gZnVuY3Rpb24o
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJmFycmF5W3VpbnQoaW5kZXggKyAxKV0u
eDsKICAgICAgICAgfQotICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkK
ICAgICAgICAgewogICAgICAgICAgICAgRm9vIHg7CiAgICAgICAgICAgICB4LnggPSAxMzsKQEAg
LTUzODksNyArNTU4Nyw3IEBAIHRlc3RzLmFuZFJldHVybmVkQXJyYXlSZWYgPSBmdW5jdGlvbigp
CiAgICAgICAgICAgICB4WzVdID0gMzU0OwogICAgICAgICAgICAgcmV0dXJuIEB4OwogICAgICAg
ICB9Ci0gICAgICAgIGludCBmb28oKQorICAgICAgICB0ZXN0IGludCBmb28oKQogICAgICAgICB7
CiAgICAgICAgICAgICB0aHJlYWQgaW50KiBwdHIgPSAmZ2V0QXJyYXkoKVs1XTsKICAgICAgICAg
ICAgIHJldHVybiAqcHRyOwpAQCAtNTQxMiw3ICs1NjEwLDcgQEAgdGVzdHMuY2FzdHMgPSBmdW5j
dGlvbigpCiAgICAgICAgICAgICBiLnkgPSBmb28ueCArIDc7CiAgICAgICAgICAgICByZXR1cm4g
YjsKICAgICAgICAgfQotICAgICAgICBpbnQgYmF6KGludCB6KSB7CisgICAgICAgIHRlc3QgaW50
IGJheihpbnQgeikgewogICAgICAgICAgICAgRm9vIGZvbzsKICAgICAgICAgICAgIGZvby54ID0g
ejsKICAgICAgICAgICAgIEJhciBiID0gQmFyKGZvbyk7CkBAIC01NDMyLDcgKzU2MzAsNyBAQCB0
ZXN0cy5jYXN0cyA9IGZ1bmN0aW9uKCkKICAgICAgICAgICAgIGIueSA9ICgqZm9vKS54ICsgODsK
ICAgICAgICAgICAgIHJldHVybiAmYjsKICAgICAgICAgfQotICAgICAgICBpbnQgYmF6KGludCB6
KSB7CisgICAgICAgIHRlc3QgaW50IGJheihpbnQgeikgewogICAgICAgICAgICAgRm9vIGZvbzsK
ICAgICAgICAgICAgIGZvby54ID0gejsKICAgICAgICAgICAgIHRocmVhZCBCYXIqIGIgPSB0aHJl
YWQgQmFyKigmZm9vKTsKQEAgLTU0NjgsNyArNTY2Niw3IEBAIHRlc3RzLnBvaW50ZXJUb01lbWJl
ciA9IGZ1bmN0aW9uKCkKIHRlc3RzLmJ1aWx0aW5NYXRyaWNlcyA9IGZ1bmN0aW9uKCkKIHsKICAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIGZsb2F0IGZvbygpCisgICAgICAgIHRl
c3QgZmxvYXQgZm9vKCkKICAgICAgICAgewogICAgICAgICAgICAgZmxvYXQyeDIgYTsKICAgICAg
ICAgICAgIGFbMF1bMF0gPSAxOwpAQCAtNTQ3Nyw3ICs1Njc1LDcgQEAgdGVzdHMuYnVpbHRpbk1h
dHJpY2VzID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgYVsxXVsxXSA9IDQ7CiAgICAgICAgICAg
ICByZXR1cm4gYVswXVswXTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28yKCkKKyAgICAg
ICAgdGVzdCBmbG9hdCBmb28yKCkKICAgICAgICAgewogICAgICAgICAgICAgZmxvYXQyeDMgYTsK
ICAgICAgICAgICAgIGFbMF1bMF0gPSAxOwpAQCAtNTQ4OCwxMiArNTY4NiwxMiBAQCB0ZXN0cy5i
dWlsdGluTWF0cmljZXMgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICBhWzFdWzJdID0gNjsKICAg
ICAgICAgICAgIHJldHVybiBhWzFdWzJdOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzMo
KQorICAgICAgICB0ZXN0IGZsb2F0IGZvbzMoKQogICAgICAgICB7CiAgICAgICAgICAgICBmbG9h
dDJ4MiBhOwogICAgICAgICAgICAgcmV0dXJuIGFbMF1bMF07CiAgICAgICAgIH0KLSAgICAgICAg
Ym9vbCBmb280KCkKKyAgICAgICAgdGVzdCBib29sIGZvbzQoKQogICAgICAgICB7CiAgICAgICAg
ICAgICBmbG9hdDJ4MiBhOwogICAgICAgICAgICAgYVswXVswXSA9IDE7CkBAIC01NTEyLDcgKzU3
MTAsNyBAQCB0ZXN0cy5idWlsdGluTWF0cmljZXMgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm4gYSA9PSBiOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgZm9v
NSgpCisgICAgICAgIHRlc3QgYm9vbCBmb281KCkKICAgICAgICAgewogICAgICAgICAgICAgZmxv
YXQyeDIgYTsKICAgICAgICAgICAgIGFbMF0gPSBmbG9hdDIoMSwgMik7CkBAIC01NTI0LDcgKzU3
MjIsNyBAQCB0ZXN0cy5idWlsdGluTWF0cmljZXMgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICBi
WzFdWzFdID0gNDsKICAgICAgICAgICAgIHJldHVybiBhID09IGI7CiAgICAgICAgIH0KLSAgICAg
ICAgYm9vbCBmb282KCkKKyAgICAgICAgdGVzdCBib29sIGZvbzYoKQogICAgICAgICB7CiAgICAg
ICAgICAgICBmbG9hdDJ4MiBhOwogICAgICAgICAgICAgYVswXVswXSA9IDE7CkBAIC01NTQwLDcg
KzU3MzgsNyBAQCB0ZXN0cy5idWlsdGluTWF0cmljZXMgPSBmdW5jdGlvbigpCiAgICAgICAgICAg
ICBhWzFdICo9IDY7CiAgICAgICAgICAgICByZXR1cm4gYSA9PSBiOwogICAgICAgICB9Ci0gICAg
ICAgIGZsb2F0IGZvbzcoKQorICAgICAgICB0ZXN0IGZsb2F0IGZvbzcoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBmbG9hdDJ4MyBhID0gZmxvYXQyeDMoZmxvYXQzKDMsIDQsIDUpLCBmbG9hdDMo
NiwgNywgOCkpOwogICAgICAgICAgICAgcmV0dXJuIGFbMF1bMl07CkBAIC01NTU2LDE1ICs1NzU0
LDE1IEBAIHRlc3RzLmJ1aWx0aW5NYXRyaWNlcyA9IGZ1bmN0aW9uKCkKIH0KIAogdGVzdHMuaGFs
ZlNpbXBsZU1hdGggPSBmdW5jdGlvbigpIHsKLSAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgiaGFs
ZiBmb28oaGFsZiB4LCBoYWxmIHkpIHsgcmV0dXJuIHggKyB5OyB9Iik7CisgICAgbGV0IHByb2dy
YW0gPSBkb1ByZXAoInRlc3QgaGFsZiBmb28oaGFsZiB4LCBoYWxmIHkpIHsgcmV0dXJuIHggKyB5
OyB9Iik7CiAgICAgY2hlY2tIYWxmKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VIYWxmKHByb2dyYW0sIDcpLCBtYWtlSGFsZihwcm9ncmFtLCA1KV0pLCAxMik7Ci0g
ICAgcHJvZ3JhbSA9IGRvUHJlcCgiaGFsZiBmb28oaGFsZiB4LCBoYWxmIHkpIHsgcmV0dXJuIHgg
LSB5OyB9Iik7CisgICAgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCBoYWxmIGZvbyhoYWxmIHgsIGhh
bGYgeSkgeyByZXR1cm4geCAtIHk7IH0iKTsKICAgICBjaGVja0hhbGYocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUhhbGYocHJvZ3JhbSwgNyksIG1ha2VIYWxmKHBy
b2dyYW0sIDUpXSksIDIpOwogICAgIGNoZWNrSGFsZihwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFttYWtlSGFsZihwcm9ncmFtLCA1KSwgbWFrZUhhbGYocHJvZ3JhbSwgNyld
KSwgLTIpOwotICAgIHByb2dyYW0gPSBkb1ByZXAoImhhbGYgZm9vKGhhbGYgeCwgaGFsZiB5KSB7
IHJldHVybiB4ICogeTsgfSIpOworICAgIHByb2dyYW0gPSBkb1ByZXAoInRlc3QgaGFsZiBmb28o
aGFsZiB4LCBoYWxmIHkpIHsgcmV0dXJuIHggKiB5OyB9Iik7CiAgICAgY2hlY2tIYWxmKHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VIYWxmKHByb2dyYW0sIDcpLCBt
YWtlSGFsZihwcm9ncmFtLCA1KV0pLCAzNSk7CiAgICAgY2hlY2tIYWxmKHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VIYWxmKHByb2dyYW0sIDcpLCBtYWtlSGFsZihw
cm9ncmFtLCAtNSldKSwgLTM1KTsKLSAgICBwcm9ncmFtID0gZG9QcmVwKCJoYWxmIGZvbyhoYWxm
IHgsIGhhbGYgeSkgeyByZXR1cm4geCAvIHk7IH0iKTsKKyAgICBwcm9ncmFtID0gZG9QcmVwKCJ0
ZXN0IGhhbGYgZm9vKGhhbGYgeCwgaGFsZiB5KSB7IHJldHVybiB4IC8geTsgfSIpOwogICAgIGNo
ZWNrSGFsZihwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSGFsZihw
cm9ncmFtLCA3KSwgbWFrZUhhbGYocHJvZ3JhbSwgMildKSwgMy41KTsKICAgICBjaGVja0hhbGYo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUhhbGYocHJvZ3JhbSwg
NyksIG1ha2VIYWxmKHByb2dyYW0sIC0yKV0pLCAtMy41KTsKIH0KQEAgLTU2MzQsMjggKzU4MzIs
MjggQEAgdGVzdHMubWF0cml4TXVsdGlwbGljYXRpb24gPSBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgIHlbMl1bM10gPSA2MTsKICAgICAgICAgICAgIHJldHVybiB5OwogICAgICAgICB9Ci0gICAg
ICAgIGZsb2F0IGZvbzAwKCkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzAwKCkgewogICAgICAg
ICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwgbWF0cml4MigpKVswXVswXTsKICAgICAg
ICAgfQotICAgICAgICBmbG9hdCBmb28wMSgpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28wMSgp
IHsKICAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMF1b
MV07CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMDIoKSB7CisgICAgICAgIHRlc3QgZmxv
YXQgZm9vMDIoKSB7CiAgICAgICAgICAgICByZXR1cm4gbXVsdGlwbHkobWF0cml4MSgpLCBtYXRy
aXgyKCkpWzBdWzJdOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzAzKCkgeworICAgICAg
ICB0ZXN0IGZsb2F0IGZvbzAzKCkgewogICAgICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJp
eDEoKSwgbWF0cml4MigpKVswXVszXTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28xMCgp
IHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28xMCgpIHsKICAgICAgICAgICAgIHJldHVybiBtdWx0
aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlbMV1bMF07CiAgICAgICAgIH0KLSAgICAgICAgZmxv
YXQgZm9vMTEoKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMTEoKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gbXVsdGlwbHkobWF0cml4MSgpLCBtYXRyaXgyKCkpWzFdWzFdOwogICAgICAgICB9Ci0g
ICAgICAgIGZsb2F0IGZvbzEyKCkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzEyKCkgewogICAg
ICAgICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeDEoKSwgbWF0cml4MigpKVsxXVsyXTsKICAg
ICAgICAgfQotICAgICAgICBmbG9hdCBmb28xMygpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28x
MygpIHsKICAgICAgICAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgxKCksIG1hdHJpeDIoKSlb
MV1bM107CiAgICAgICAgIH0KICAgICBgKTsKQEAgLTU2NzEsMTcgKzU4NjksMTcgQEAgdGVzdHMu
bWF0cml4TXVsdGlwbGljYXRpb24gPSBmdW5jdGlvbigpIHsKIAogdGVzdHMuYXJyYXlJbmRleCA9
IGZ1bmN0aW9uKCkgewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgdWludCBp
bm5lckFycmF5TGVuZ3RoKCkgeworICAgICAgICB0ZXN0IHVpbnQgaW5uZXJBcnJheUxlbmd0aCgp
IHsKICAgICAgICAgICAgIGludFsyXVszXSBhcnJheTsKICAgICAgICAgICAgIHJldHVybiBhcnJh
eVswXS5sZW5ndGg7CiAgICAgICAgIH0KIAotICAgICAgICB1aW50IG91dGVyQXJyYXlMZW5ndGgo
KSB7CisgICAgICAgIHRlc3QgdWludCBvdXRlckFycmF5TGVuZ3RoKCkgewogICAgICAgICAgICAg
aW50WzJdWzNdIGFycmF5OwogICAgICAgICAgICAgcmV0dXJuIGFycmF5Lmxlbmd0aDsKICAgICAg
ICAgfQogCi0gICAgICAgIGludCBhcnJheUluZGV4aW5nKHVpbnQgaSwgdWludCBqKSB7CisgICAg
ICAgIHRlc3QgaW50IGFycmF5SW5kZXhpbmcodWludCBpLCB1aW50IGopIHsKICAgICAgICAgICAg
IGludFsyXVszXSBhcnJheTsKICAgICAgICAgICAgIGFycmF5WzBdWzBdID0gMTsKICAgICAgICAg
ICAgIGFycmF5WzBdWzFdID0gMjsKQEAgLTU5MDEsNjEgKzYwOTksNjEgQEAgZnVuY3Rpb24gY3Jl
YXRlVGV4dHVyZXNGb3JUZXN0aW5nKHByb2dyYW0pCiAKIHRlc3RzLnRleHR1cmVEaW1lbnNpb25z
ID0gZnVuY3Rpb24oKSB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICB1aW50
IGZvbzEoVGV4dHVyZTFEPGZsb2F0PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb28x
KFRleHR1cmUxRDxmbG9hdD4gdGV4dHVyZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAg
ICAgICAgICAgIHVpbnQgbnVtYmVyT2ZMZXZlbHM7CiAgICAgICAgICAgICBHZXREaW1lbnNpb25z
KHRleHR1cmUsIDAsICZ3aWR0aCwgJm51bWJlck9mTGV2ZWxzKTsKICAgICAgICAgICAgIHJldHVy
biB3aWR0aDsKICAgICAgICAgfQotICAgICAgICB1aW50IGZvbzIoVGV4dHVyZTFEPGZsb2F0PiB0
ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb28yKFRleHR1cmUxRDxmbG9hdD4gdGV4dHVy
ZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAgICAgIHVpbnQgbnVtYmVyT2ZM
ZXZlbHM7CiAgICAgICAgICAgICBHZXREaW1lbnNpb25zKHRleHR1cmUsIDAsICZ3aWR0aCwgJm51
bWJlck9mTGV2ZWxzKTsKICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkxldmVsczsKICAgICAg
ICAgfQotICAgICAgICB1aW50IGZvbzMoVGV4dHVyZTFEQXJyYXk8ZmxvYXQ+IHRleHR1cmUpIHsK
KyAgICAgICAgdGVzdCB1aW50IGZvbzMoVGV4dHVyZTFEQXJyYXk8ZmxvYXQ+IHRleHR1cmUpIHsK
ICAgICAgICAgICAgIHVpbnQgd2lkdGg7CiAgICAgICAgICAgICB1aW50IGVsZW1lbnRzOwogICAg
ICAgICAgICAgdWludCBudW1iZXJPZkxldmVsczsKICAgICAgICAgICAgIEdldERpbWVuc2lvbnMo
dGV4dHVyZSwgMCwgJndpZHRoLCAmZWxlbWVudHMsICZudW1iZXJPZkxldmVscyk7CiAgICAgICAg
ICAgICByZXR1cm4gd2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb280KFRleHR1cmUx
REFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb280KFRleHR1cmUx
REFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAg
ICAgICAgdWludCBlbGVtZW50czsKICAgICAgICAgICAgIHVpbnQgbnVtYmVyT2ZMZXZlbHM7CiAg
ICAgICAgICAgICBHZXREaW1lbnNpb25zKHRleHR1cmUsIDAsICZ3aWR0aCwgJmVsZW1lbnRzLCAm
bnVtYmVyT2ZMZXZlbHMpOwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOwogICAgICAgICB9
Ci0gICAgICAgIHVpbnQgZm9vNShUZXh0dXJlMURBcnJheTxmbG9hdD4gdGV4dHVyZSkgeworICAg
ICAgICB0ZXN0IHVpbnQgZm9vNShUZXh0dXJlMURBcnJheTxmbG9hdD4gdGV4dHVyZSkgewogICAg
ICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAgICAgIHVpbnQgZWxlbWVudHM7CiAgICAgICAg
ICAgICB1aW50IG51bWJlck9mTGV2ZWxzOwogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0
dXJlLCAwLCAmd2lkdGgsICZlbGVtZW50cywgJm51bWJlck9mTGV2ZWxzKTsKICAgICAgICAgICAg
IHJldHVybiBudW1iZXJPZkxldmVsczsKICAgICAgICAgfQotICAgICAgICB1aW50IGZvbzYoVGV4
dHVyZTJEPGZsb2F0PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb282KFRleHR1cmUy
RDxmbG9hdD4gdGV4dHVyZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAgICAg
IHVpbnQgaGVpZ2h0OwogICAgICAgICAgICAgdWludCBudW1iZXJPZkxldmVsczsKICAgICAgICAg
ICAgIEdldERpbWVuc2lvbnModGV4dHVyZSwgMCwgJndpZHRoLCAmaGVpZ2h0LCAmbnVtYmVyT2ZM
ZXZlbHMpOwogICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwogICAgICAgICB9Ci0gICAgICAgIHVp
bnQgZm9vNyhUZXh0dXJlMkQ8ZmxvYXQ+IHRleHR1cmUpIHsKKyAgICAgICAgdGVzdCB1aW50IGZv
bzcoVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwog
ICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAgICB1aW50IG51bWJlck9mTGV2ZWxz
OwogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAwLCAmd2lkdGgsICZoZWlnaHQs
ICZudW1iZXJPZkxldmVscyk7CiAgICAgICAgICAgICByZXR1cm4gaGVpZ2h0OwogICAgICAgICB9
Ci0gICAgICAgIHVpbnQgZm9vOChUZXh0dXJlMkQ8ZmxvYXQ+IHRleHR1cmUpIHsKKyAgICAgICAg
dGVzdCB1aW50IGZvbzgoVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1
aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAgICB1aW50IG51
bWJlck9mTGV2ZWxzOwogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAwLCAmd2lk
dGgsICZoZWlnaHQsICZudW1iZXJPZkxldmVscyk7CiAgICAgICAgICAgICByZXR1cm4gbnVtYmVy
T2ZMZXZlbHM7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb285KFRleHR1cmUyREFycmF5PGZs
b2F0PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb285KFRleHR1cmUyREFycmF5PGZs
b2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWlu
dCBoZWlnaHQ7CiAgICAgICAgICAgICB1aW50IGVsZW1lbnRzOwpAQCAtNTk2Myw3ICs2MTYxLDcg
QEAgdGVzdHMudGV4dHVyZURpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIEdl
dERpbWVuc2lvbnModGV4dHVyZSwgMCwgJndpZHRoLCAmaGVpZ2h0LCAmZWxlbWVudHMsICZudW1i
ZXJPZkxldmVscyk7CiAgICAgICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAgICAgIH0KLSAgICAg
ICAgdWludCBmb28xMChUZXh0dXJlMkRBcnJheTxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0
ZXN0IHVpbnQgZm9vMTAoVGV4dHVyZTJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUpIHsKICAgICAgICAg
ICAgIHVpbnQgd2lkdGg7CiAgICAgICAgICAgICB1aW50IGhlaWdodDsKICAgICAgICAgICAgIHVp
bnQgZWxlbWVudHM7CkBAIC01OTcxLDcgKzYxNjksNyBAQCB0ZXN0cy50ZXh0dXJlRGltZW5zaW9u
cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAwLCAm
d2lkdGgsICZoZWlnaHQsICZlbGVtZW50cywgJm51bWJlck9mTGV2ZWxzKTsKICAgICAgICAgICAg
IHJldHVybiBoZWlnaHQ7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb28xMShUZXh0dXJlMkRB
cnJheTxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vMTEoVGV4dHVyZTJE
QXJyYXk8ZmxvYXQ+IHRleHR1cmUpIHsKICAgICAgICAgICAgIHVpbnQgd2lkdGg7CiAgICAgICAg
ICAgICB1aW50IGhlaWdodDsKICAgICAgICAgICAgIHVpbnQgZWxlbWVudHM7CkBAIC01OTc5LDcg
KzYxNzcsNyBAQCB0ZXN0cy50ZXh0dXJlRGltZW5zaW9ucyA9IGZ1bmN0aW9uKCkgewogICAgICAg
ICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAwLCAmd2lkdGgsICZoZWlnaHQsICZlbGVtZW50
cywgJm51bWJlck9mTGV2ZWxzKTsKICAgICAgICAgICAgIHJldHVybiBlbGVtZW50czsKICAgICAg
ICAgfQotICAgICAgICB1aW50IGZvbzEyKFRleHR1cmUyREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7
CisgICAgICAgIHRlc3QgdWludCBmb28xMihUZXh0dXJlMkRBcnJheTxmbG9hdD4gdGV4dHVyZSkg
ewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAgICAgIHVpbnQgaGVpZ2h0OwogICAg
ICAgICAgICAgdWludCBlbGVtZW50czsKQEAgLTU5ODcsNyArNjE4NSw3IEBAIHRlc3RzLnRleHR1
cmVEaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBHZXREaW1lbnNpb25zKHRl
eHR1cmUsIDAsICZ3aWR0aCwgJmhlaWdodCwgJmVsZW1lbnRzLCAmbnVtYmVyT2ZMZXZlbHMpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mTGV2ZWxzOwogICAgICAgICB9Ci0gICAgICAgIHVp
bnQgZm9vMTMoVGV4dHVyZTNEPGZsb2F0PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBm
b28xMyhUZXh0dXJlM0Q8ZmxvYXQ+IHRleHR1cmUpIHsKICAgICAgICAgICAgIHVpbnQgd2lkdGg7
CiAgICAgICAgICAgICB1aW50IGhlaWdodDsKICAgICAgICAgICAgIHVpbnQgZGVwdGg7CkBAIC01
OTk1LDcgKzYxOTMsNyBAQCB0ZXN0cy50ZXh0dXJlRGltZW5zaW9ucyA9IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAwLCAmd2lkdGgsICZoZWlnaHQsICZk
ZXB0aCwgJm51bWJlck9mTGV2ZWxzKTsKICAgICAgICAgICAgIHJldHVybiB3aWR0aDsKICAgICAg
ICAgfQotICAgICAgICB1aW50IGZvbzE0KFRleHR1cmUzRDxmbG9hdD4gdGV4dHVyZSkgeworICAg
ICAgICB0ZXN0IHVpbnQgZm9vMTQoVGV4dHVyZTNEPGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAg
ICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAgICB1
aW50IGRlcHRoOwpAQCAtNjAwMyw3ICs2MjAxLDcgQEAgdGVzdHMudGV4dHVyZURpbWVuc2lvbnMg
PSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIEdldERpbWVuc2lvbnModGV4dHVyZSwgMCwgJndp
ZHRoLCAmaGVpZ2h0LCAmZGVwdGgsICZudW1iZXJPZkxldmVscyk7CiAgICAgICAgICAgICByZXR1
cm4gaGVpZ2h0OwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vMTUoVGV4dHVyZTNEPGZsb2F0
PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb28xNShUZXh0dXJlM0Q8ZmxvYXQ+IHRl
eHR1cmUpIHsKICAgICAgICAgICAgIHVpbnQgd2lkdGg7CiAgICAgICAgICAgICB1aW50IGhlaWdo
dDsKICAgICAgICAgICAgIHVpbnQgZGVwdGg7CkBAIC02MDExLDcgKzYyMDksNyBAQCB0ZXN0cy50
ZXh0dXJlRGltZW5zaW9ucyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgR2V0RGltZW5zaW9u
cyh0ZXh0dXJlLCAwLCAmd2lkdGgsICZoZWlnaHQsICZkZXB0aCwgJm51bWJlck9mTGV2ZWxzKTsK
ICAgICAgICAgICAgIHJldHVybiBkZXB0aDsKICAgICAgICAgfQotICAgICAgICB1aW50IGZvbzE2
KFRleHR1cmUzRDxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vMTYoVGV4
dHVyZTNEPGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAg
ICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAgICB1aW50IGRlcHRoOwpAQCAtNjAxOSwxMjAg
KzYyMTcsMTIwIEBAIHRlc3RzLnRleHR1cmVEaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICBHZXREaW1lbnNpb25zKHRleHR1cmUsIDAsICZ3aWR0aCwgJmhlaWdodCwgJmRlcHRo
LCAmbnVtYmVyT2ZMZXZlbHMpOwogICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mTGV2ZWxzOwog
ICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vMTcoVGV4dHVyZUN1YmU8ZmxvYXQ+IHRleHR1cmUp
IHsKKyAgICAgICAgdGVzdCB1aW50IGZvbzE3KFRleHR1cmVDdWJlPGZsb2F0PiB0ZXh0dXJlKSB7
CiAgICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAg
ICAgICAgICB1aW50IG51bWJlck9mTGV2ZWxzOwogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0
ZXh0dXJlLCAwLCAmd2lkdGgsICZoZWlnaHQsICZudW1iZXJPZkxldmVscyk7CiAgICAgICAgICAg
ICByZXR1cm4gd2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb28xOChUZXh0dXJlQ3Vi
ZTxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vMTgoVGV4dHVyZUN1YmU8
ZmxvYXQ+IHRleHR1cmUpIHsKICAgICAgICAgICAgIHVpbnQgd2lkdGg7CiAgICAgICAgICAgICB1
aW50IGhlaWdodDsKICAgICAgICAgICAgIHVpbnQgbnVtYmVyT2ZMZXZlbHM7CiAgICAgICAgICAg
ICBHZXREaW1lbnNpb25zKHRleHR1cmUsIDAsICZ3aWR0aCwgJmhlaWdodCwgJm51bWJlck9mTGV2
ZWxzKTsKICAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7CiAgICAgICAgIH0KLSAgICAgICAgdWlu
dCBmb28xOShUZXh0dXJlQ3ViZTxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQg
Zm9vMTkoVGV4dHVyZUN1YmU8ZmxvYXQ+IHRleHR1cmUpIHsKICAgICAgICAgICAgIHVpbnQgd2lk
dGg7CiAgICAgICAgICAgICB1aW50IGhlaWdodDsKICAgICAgICAgICAgIHVpbnQgbnVtYmVyT2ZM
ZXZlbHM7CiAgICAgICAgICAgICBHZXREaW1lbnNpb25zKHRleHR1cmUsIDAsICZ3aWR0aCwgJmhl
aWdodCwgJm51bWJlck9mTGV2ZWxzKTsKICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkxldmVs
czsKICAgICAgICAgfQotICAgICAgICB1aW50IGZvbzIwKFJXVGV4dHVyZTFEPGZsb2F0PiB0ZXh0
dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb28yMChSV1RleHR1cmUxRDxmbG9hdD4gdGV4dHVy
ZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAgICAgIEdldERpbWVuc2lvbnMo
dGV4dHVyZSwgJndpZHRoKTsKICAgICAgICAgICAgIHJldHVybiB3aWR0aDsKICAgICAgICAgfQot
ICAgICAgICB1aW50IGZvbzIxKFJXVGV4dHVyZTFEQXJyYXk8ZmxvYXQ+IHRleHR1cmUpIHsKKyAg
ICAgICAgdGVzdCB1aW50IGZvbzIxKFJXVGV4dHVyZTFEQXJyYXk8ZmxvYXQ+IHRleHR1cmUpIHsK
ICAgICAgICAgICAgIHVpbnQgd2lkdGg7CiAgICAgICAgICAgICB1aW50IGVsZW1lbnRzOwogICAg
ICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAmd2lkdGgsICZlbGVtZW50cyk7CiAgICAg
ICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb28yMihSV1Rl
eHR1cmUxREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb28yMihS
V1RleHR1cmUxREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50IHdpZHRo
OwogICAgICAgICAgICAgdWludCBlbGVtZW50czsKICAgICAgICAgICAgIEdldERpbWVuc2lvbnMo
dGV4dHVyZSwgJndpZHRoLCAmZWxlbWVudHMpOwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRz
OwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vMjMoUldUZXh0dXJlMkQ8ZmxvYXQ+IHRleHR1
cmUpIHsKKyAgICAgICAgdGVzdCB1aW50IGZvbzIzKFJXVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJl
KSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAg
ICAgICAgICAgICBHZXREaW1lbnNpb25zKHRleHR1cmUsICZ3aWR0aCwgJmhlaWdodCk7CiAgICAg
ICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb28yNChSV1Rl
eHR1cmUyRDxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vMjQoUldUZXh0
dXJlMkQ8ZmxvYXQ+IHRleHR1cmUpIHsKICAgICAgICAgICAgIHVpbnQgd2lkdGg7CiAgICAgICAg
ICAgICB1aW50IGhlaWdodDsKICAgICAgICAgICAgIEdldERpbWVuc2lvbnModGV4dHVyZSwgJndp
ZHRoLCAmaGVpZ2h0KTsKICAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7CiAgICAgICAgIH0KLSAg
ICAgICAgdWludCBmb28yNShSV1RleHR1cmUyREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CisgICAg
ICAgIHRlc3QgdWludCBmb28yNShSV1RleHR1cmUyREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CiAg
ICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAg
ICAgICB1aW50IGVsZW1lbnRzOwogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAm
d2lkdGgsICZoZWlnaHQsICZlbGVtZW50cyk7CiAgICAgICAgICAgICByZXR1cm4gd2lkdGg7CiAg
ICAgICAgIH0KLSAgICAgICAgdWludCBmb28yNihSV1RleHR1cmUyREFycmF5PGZsb2F0PiB0ZXh0
dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb28yNihSV1RleHR1cmUyREFycmF5PGZsb2F0PiB0
ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWln
aHQ7CiAgICAgICAgICAgICB1aW50IGVsZW1lbnRzOwogICAgICAgICAgICAgR2V0RGltZW5zaW9u
cyh0ZXh0dXJlLCAmd2lkdGgsICZoZWlnaHQsICZlbGVtZW50cyk7CiAgICAgICAgICAgICByZXR1
cm4gaGVpZ2h0OwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vMjcoUldUZXh0dXJlMkRBcnJh
eTxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vMjcoUldUZXh0dXJlMkRB
cnJheTxmbG9hdD4gdGV4dHVyZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAg
ICAgIHVpbnQgaGVpZ2h0OwogICAgICAgICAgICAgdWludCBlbGVtZW50czsKICAgICAgICAgICAg
IEdldERpbWVuc2lvbnModGV4dHVyZSwgJndpZHRoLCAmaGVpZ2h0LCAmZWxlbWVudHMpOwogICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vMjgo
UldUZXh0dXJlM0Q8ZmxvYXQ+IHRleHR1cmUpIHsKKyAgICAgICAgdGVzdCB1aW50IGZvbzI4KFJX
VGV4dHVyZTNEPGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwogICAg
ICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAgICB1aW50IGRlcHRoOwogICAgICAgICAg
ICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAmd2lkdGgsICZoZWlnaHQsICZkZXB0aCk7CiAgICAg
ICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb28yOShSV1Rl
eHR1cmUzRDxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vMjkoUldUZXh0
dXJlM0Q8ZmxvYXQ+IHRleHR1cmUpIHsKICAgICAgICAgICAgIHVpbnQgd2lkdGg7CiAgICAgICAg
ICAgICB1aW50IGhlaWdodDsKICAgICAgICAgICAgIHVpbnQgZGVwdGg7CiAgICAgICAgICAgICBH
ZXREaW1lbnNpb25zKHRleHR1cmUsICZ3aWR0aCwgJmhlaWdodCwgJmRlcHRoKTsKICAgICAgICAg
ICAgIHJldHVybiBoZWlnaHQ7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb28zMChSV1RleHR1
cmUzRDxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vMzAoUldUZXh0dXJl
M0Q8ZmxvYXQ+IHRleHR1cmUpIHsKICAgICAgICAgICAgIHVpbnQgd2lkdGg7CiAgICAgICAgICAg
ICB1aW50IGhlaWdodDsKICAgICAgICAgICAgIHVpbnQgZGVwdGg7CiAgICAgICAgICAgICBHZXRE
aW1lbnNpb25zKHRleHR1cmUsICZ3aWR0aCwgJmhlaWdodCwgJmRlcHRoKTsKICAgICAgICAgICAg
IHJldHVybiBkZXB0aDsKICAgICAgICAgfQotICAgICAgICB1aW50IGZvbzMxKFRleHR1cmVEZXB0
aDJEPGZsb2F0PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb28zMShUZXh0dXJlRGVw
dGgyRDxmbG9hdD4gdGV4dHVyZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAg
ICAgIHVpbnQgaGVpZ2h0OwogICAgICAgICAgICAgdWludCBudW1iZXJPZkxldmVsczsKICAgICAg
ICAgICAgIEdldERpbWVuc2lvbnModGV4dHVyZSwgMCwgJndpZHRoLCAmaGVpZ2h0LCAmbnVtYmVy
T2ZMZXZlbHMpOwogICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwogICAgICAgICB9Ci0gICAgICAg
IHVpbnQgZm9vMzIoVGV4dHVyZURlcHRoMkQ8ZmxvYXQ+IHRleHR1cmUpIHsKKyAgICAgICAgdGVz
dCB1aW50IGZvbzMyKFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAg
ICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAgICB1aW50
IG51bWJlck9mTGV2ZWxzOwogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAwLCAm
d2lkdGgsICZoZWlnaHQsICZudW1iZXJPZkxldmVscyk7CiAgICAgICAgICAgICByZXR1cm4gaGVp
Z2h0OwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vMzMoVGV4dHVyZURlcHRoMkQ8ZmxvYXQ+
IHRleHR1cmUpIHsKKyAgICAgICAgdGVzdCB1aW50IGZvbzMzKFRleHR1cmVEZXB0aDJEPGZsb2F0
PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBo
ZWlnaHQ7CiAgICAgICAgICAgICB1aW50IG51bWJlck9mTGV2ZWxzOwogICAgICAgICAgICAgR2V0
RGltZW5zaW9ucyh0ZXh0dXJlLCAwLCAmd2lkdGgsICZoZWlnaHQsICZudW1iZXJPZkxldmVscyk7
CiAgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZMZXZlbHM7CiAgICAgICAgIH0KLSAgICAgICAg
dWludCBmb28zNChUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CisgICAgICAg
IHRlc3QgdWludCBmb28zNChUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CiAg
ICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAg
ICAgICB1aW50IGVsZW1lbnRzOwpAQCAtNjE0MCw3ICs2MzM4LDcgQEAgdGVzdHMudGV4dHVyZURp
bWVuc2lvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIEdldERpbWVuc2lvbnModGV4dHVy
ZSwgMCwgJndpZHRoLCAmaGVpZ2h0LCAmZWxlbWVudHMsICZudW1iZXJPZkxldmVscyk7CiAgICAg
ICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb28zNShUZXh0
dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb28z
NShUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50
IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAgICB1aW50IGVsZW1l
bnRzOwpAQCAtNjE0OCw3ICs2MzQ2LDcgQEAgdGVzdHMudGV4dHVyZURpbWVuc2lvbnMgPSBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgIEdldERpbWVuc2lvbnModGV4dHVyZSwgMCwgJndpZHRoLCAm
aGVpZ2h0LCAmZWxlbWVudHMsICZudW1iZXJPZkxldmVscyk7CiAgICAgICAgICAgICByZXR1cm4g
aGVpZ2h0OwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vMzYoVGV4dHVyZURlcHRoMkRBcnJh
eTxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vMzYoVGV4dHVyZURlcHRo
MkRBcnJheTxmbG9hdD4gdGV4dHVyZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAg
ICAgICAgIHVpbnQgaGVpZ2h0OwogICAgICAgICAgICAgdWludCBlbGVtZW50czsKQEAgLTYxNTYs
NyArNjM1NCw3IEBAIHRlc3RzLnRleHR1cmVEaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICBHZXREaW1lbnNpb25zKHRleHR1cmUsIDAsICZ3aWR0aCwgJmhlaWdodCwgJmVsZW1l
bnRzLCAmbnVtYmVyT2ZMZXZlbHMpOwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOwogICAg
ICAgICB9Ci0gICAgICAgIHVpbnQgZm9vMzcoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4
dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vMzcoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9h
dD4gdGV4dHVyZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAgICAgIHVpbnQg
aGVpZ2h0OwogICAgICAgICAgICAgdWludCBlbGVtZW50czsKQEAgLTYxNjQsNTQgKzYzNjIsNTQg
QEAgdGVzdHMudGV4dHVyZURpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIEdl
dERpbWVuc2lvbnModGV4dHVyZSwgMCwgJndpZHRoLCAmaGVpZ2h0LCAmZWxlbWVudHMsICZudW1i
ZXJPZkxldmVscyk7CiAgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZMZXZlbHM7CiAgICAgICAg
IH0KLSAgICAgICAgdWludCBmb28zOChUZXh0dXJlRGVwdGhDdWJlPGZsb2F0PiB0ZXh0dXJlKSB7
CisgICAgICAgIHRlc3QgdWludCBmb28zOChUZXh0dXJlRGVwdGhDdWJlPGZsb2F0PiB0ZXh0dXJl
KSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAg
ICAgICAgICAgICB1aW50IG51bWJlck9mTGV2ZWxzOwogICAgICAgICAgICAgR2V0RGltZW5zaW9u
cyh0ZXh0dXJlLCAwLCAmd2lkdGgsICZoZWlnaHQsICZudW1iZXJPZkxldmVscyk7CiAgICAgICAg
ICAgICByZXR1cm4gd2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb28zOShUZXh0dXJl
RGVwdGhDdWJlPGZsb2F0PiB0ZXh0dXJlKSB7CisgICAgICAgIHRlc3QgdWludCBmb28zOShUZXh0
dXJlRGVwdGhDdWJlPGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50IHdpZHRoOwog
ICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAgICB1aW50IG51bWJlck9mTGV2ZWxz
OwogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAwLCAmd2lkdGgsICZoZWlnaHQs
ICZudW1iZXJPZkxldmVscyk7CiAgICAgICAgICAgICByZXR1cm4gaGVpZ2h0OwogICAgICAgICB9
Ci0gICAgICAgIHVpbnQgZm9vNDAoVGV4dHVyZURlcHRoQ3ViZTxmbG9hdD4gdGV4dHVyZSkgewor
ICAgICAgICB0ZXN0IHVpbnQgZm9vNDAoVGV4dHVyZURlcHRoQ3ViZTxmbG9hdD4gdGV4dHVyZSkg
ewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAgICAgIHVpbnQgaGVpZ2h0OwogICAg
ICAgICAgICAgdWludCBudW1iZXJPZkxldmVsczsKICAgICAgICAgICAgIEdldERpbWVuc2lvbnMo
dGV4dHVyZSwgMCwgJndpZHRoLCAmaGVpZ2h0LCAmbnVtYmVyT2ZMZXZlbHMpOwogICAgICAgICAg
ICAgcmV0dXJuIG51bWJlck9mTGV2ZWxzOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vNDEo
UldUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9v
NDEoUldUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSkgewogICAgICAgICAgICAgdWludCB3
aWR0aDsKICAgICAgICAgICAgIHVpbnQgaGVpZ2h0OwogICAgICAgICAgICAgR2V0RGltZW5zaW9u
cyh0ZXh0dXJlLCAmd2lkdGgsICZoZWlnaHQpOwogICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwog
ICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vNDIoUldUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4
dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vNDIoUldUZXh0dXJlRGVwdGgyRDxmbG9hdD4g
dGV4dHVyZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAgICAgIHVpbnQgaGVp
Z2h0OwogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAmd2lkdGgsICZoZWlnaHQp
OwogICAgICAgICAgICAgcmV0dXJuIGhlaWdodDsKICAgICAgICAgfQotICAgICAgICB1aW50IGZv
bzQzKFJXVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0
IHVpbnQgZm9vNDMoUldUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAg
ICAgICAgICB1aW50IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAg
ICB1aW50IGVsZW1lbnRzOwogICAgICAgICAgICAgR2V0RGltZW5zaW9ucyh0ZXh0dXJlLCAmd2lk
dGgsICZoZWlnaHQsICZlbGVtZW50cyk7CiAgICAgICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAg
ICAgIH0KLSAgICAgICAgdWludCBmb280NChSV1RleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRl
eHR1cmUpIHsKKyAgICAgICAgdGVzdCB1aW50IGZvbzQ0KFJXVGV4dHVyZURlcHRoMkRBcnJheTxm
bG9hdD4gdGV4dHVyZSkgewogICAgICAgICAgICAgdWludCB3aWR0aDsKICAgICAgICAgICAgIHVp
bnQgaGVpZ2h0OwogICAgICAgICAgICAgdWludCBlbGVtZW50czsKICAgICAgICAgICAgIEdldERp
bWVuc2lvbnModGV4dHVyZSwgJndpZHRoLCAmaGVpZ2h0LCAmZWxlbWVudHMpOwogICAgICAgICAg
ICAgcmV0dXJuIGhlaWdodDsKICAgICAgICAgfQotICAgICAgICB1aW50IGZvbzQ1KFJXVGV4dHVy
ZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVyZSkgeworICAgICAgICB0ZXN0IHVpbnQgZm9vNDUo
UldUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlKSB7CiAgICAgICAgICAgICB1aW50
IHdpZHRoOwogICAgICAgICAgICAgdWludCBoZWlnaHQ7CiAgICAgICAgICAgICB1aW50IGVsZW1l
bnRzOwpAQCAtNjI2OSw2NyArNjQ2Nyw2NyBAQCB0ZXN0cy50ZXh0dXJlRGltZW5zaW9ucyA9IGZ1
bmN0aW9uKCkgewogCiB0ZXN0cy50ZXh0dXJlTG9hZCA9IGZ1bmN0aW9uKCkgewogICAgIGxldCBw
cm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgZmxvYXQgZm9vMShUZXh0dXJlMUQ8ZmxvYXQ+IHRl
eHR1cmUsIGludCBsb2NhdGlvbiwgaW50IG1pcG1hcCkgeworICAgICAgICB0ZXN0IGZsb2F0IGZv
bzEoVGV4dHVyZTFEPGZsb2F0PiB0ZXh0dXJlLCBpbnQgbG9jYXRpb24sIGludCBtaXBtYXApIHsK
ICAgICAgICAgICAgIHJldHVybiBMb2FkKHRleHR1cmUsIGludDIobG9jYXRpb24sIG1pcG1hcCkp
OwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzIoVGV4dHVyZTFEPGZsb2F0PiB0ZXh0dXJl
LCBpbnQgbG9jYXRpb24sIGludCBtaXBtYXAsIGludCBvZmZzZXQpIHsKKyAgICAgICAgdGVzdCBm
bG9hdCBmb28yKFRleHR1cmUxRDxmbG9hdD4gdGV4dHVyZSwgaW50IGxvY2F0aW9uLCBpbnQgbWlw
bWFwLCBpbnQgb2Zmc2V0KSB7CiAgICAgICAgICAgICByZXR1cm4gTG9hZCh0ZXh0dXJlLCBpbnQy
KGxvY2F0aW9uLCBtaXBtYXApLCBvZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZv
bzMoVGV4dHVyZTFEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIGludCBsb2NhdGlvbiwgaW50IG1pcG1h
cCwgaW50IGxheWVyKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMyhUZXh0dXJlMURBcnJheTxm
bG9hdD4gdGV4dHVyZSwgaW50IGxvY2F0aW9uLCBpbnQgbWlwbWFwLCBpbnQgbGF5ZXIpIHsKICAg
ICAgICAgICAgIHJldHVybiBMb2FkKHRleHR1cmUsIGludDMobG9jYXRpb24sIG1pcG1hcCwgbGF5
ZXIpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb280KFRleHR1cmUxREFycmF5PGZsb2F0
PiB0ZXh0dXJlLCBpbnQgbG9jYXRpb24sIGludCBtaXBtYXAsIGludCBsYXllciwgaW50IG9mZnNl
dCkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzQoVGV4dHVyZTFEQXJyYXk8ZmxvYXQ+IHRleHR1
cmUsIGludCBsb2NhdGlvbiwgaW50IG1pcG1hcCwgaW50IGxheWVyLCBpbnQgb2Zmc2V0KSB7CiAg
ICAgICAgICAgICByZXR1cm4gTG9hZCh0ZXh0dXJlLCBpbnQzKGxvY2F0aW9uLCBtaXBtYXAsIGxh
eWVyKSwgb2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb281KFRleHR1cmUyRDxm
bG9hdD4gdGV4dHVyZSwgaW50IHgsIGludCB5LCBpbnQgbWlwbWFwKSB7CisgICAgICAgIHRlc3Qg
ZmxvYXQgZm9vNShUZXh0dXJlMkQ8ZmxvYXQ+IHRleHR1cmUsIGludCB4LCBpbnQgeSwgaW50IG1p
cG1hcCkgewogICAgICAgICAgICAgcmV0dXJuIExvYWQodGV4dHVyZSwgaW50Myh4LCB5LCBtaXBt
YXApKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb282KFRleHR1cmUyRDxmbG9hdD4gdGV4
dHVyZSwgaW50IHgsIGludCB5LCBpbnQgbWlwbWFwLCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFkp
IHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb282KFRleHR1cmUyRDxmbG9hdD4gdGV4dHVyZSwgaW50
IHgsIGludCB5LCBpbnQgbWlwbWFwLCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFkpIHsKICAgICAg
ICAgICAgIHJldHVybiBMb2FkKHRleHR1cmUsIGludDMoeCwgeSwgbWlwbWFwKSwgaW50MihvZmZz
ZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNyhUZXh0dXJlMkRB
cnJheTxmbG9hdD4gdGV4dHVyZSwgaW50IHgsIGludCB5LCBpbnQgbWlwbWFwLCBpbnQgbGF5ZXIp
IHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb283KFRleHR1cmUyREFycmF5PGZsb2F0PiB0ZXh0dXJl
LCBpbnQgeCwgaW50IHksIGludCBtaXBtYXAsIGludCBsYXllcikgewogICAgICAgICAgICAgcmV0
dXJuIExvYWQodGV4dHVyZSwgaW50NCh4LCB5LCBtaXBtYXAsIGxheWVyKSk7CiAgICAgICAgIH0K
LSAgICAgICAgZmxvYXQgZm9vOChUZXh0dXJlMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgaW50IHgs
IGludCB5LCBpbnQgbWlwbWFwLCBpbnQgbGF5ZXIsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkg
eworICAgICAgICB0ZXN0IGZsb2F0IGZvbzgoVGV4dHVyZTJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUs
IGludCB4LCBpbnQgeSwgaW50IG1pcG1hcCwgaW50IGxheWVyLCBpbnQgb2Zmc2V0WCwgaW50IG9m
ZnNldFkpIHsKICAgICAgICAgICAgIHJldHVybiBMb2FkKHRleHR1cmUsIGludDQoeCwgeSwgbWlw
bWFwLCBsYXllciksIGludDIob2Zmc2V0WCwgb2Zmc2V0WSkpOwogICAgICAgICB9Ci0gICAgICAg
IGZsb2F0IGZvbzkoVGV4dHVyZTNEPGZsb2F0PiB0ZXh0dXJlLCBpbnQgeCwgaW50IHksIGludCB6
LCBpbnQgbWlwbWFwKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vOShUZXh0dXJlM0Q8ZmxvYXQ+
IHRleHR1cmUsIGludCB4LCBpbnQgeSwgaW50IHosIGludCBtaXBtYXApIHsKICAgICAgICAgICAg
IHJldHVybiBMb2FkKHRleHR1cmUsIGludDQoeCwgeSwgeiwgbWlwbWFwKSk7CiAgICAgICAgIH0K
LSAgICAgICAgZmxvYXQgZm9vMTAoVGV4dHVyZTNEPGZsb2F0PiB0ZXh0dXJlLCBpbnQgeCwgaW50
IHksIGludCB6LCBpbnQgbWlwbWFwLCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFksIGludCBvZmZz
ZXRaKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMTAoVGV4dHVyZTNEPGZsb2F0PiB0ZXh0dXJl
LCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgbWlwbWFwLCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNl
dFksIGludCBvZmZzZXRaKSB7CiAgICAgICAgICAgICByZXR1cm4gTG9hZCh0ZXh0dXJlLCBpbnQ0
KHgsIHksIHosIG1pcG1hcCksIGludDMob2Zmc2V0WCwgb2Zmc2V0WSwgb2Zmc2V0WikpOwogICAg
ICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzExKFJXVGV4dHVyZTFEPGZsb2F0PiB0ZXh0dXJlLCBp
bnQgbG9jYXRpb24pIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28xMShSV1RleHR1cmUxRDxmbG9h
dD4gdGV4dHVyZSwgaW50IGxvY2F0aW9uKSB7CiAgICAgICAgICAgICByZXR1cm4gTG9hZCh0ZXh0
dXJlLCBsb2NhdGlvbik7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMTIoUldUZXh0dXJl
MURBcnJheTxmbG9hdD4gdGV4dHVyZSwgaW50IGxvY2F0aW9uLCBpbnQgbGF5ZXIpIHsKKyAgICAg
ICAgdGVzdCBmbG9hdCBmb28xMihSV1RleHR1cmUxREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBpbnQg
bG9jYXRpb24sIGludCBsYXllcikgewogICAgICAgICAgICAgcmV0dXJuIExvYWQodGV4dHVyZSwg
aW50Mihsb2NhdGlvbiwgbGF5ZXIpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28xMyhS
V1RleHR1cmUyRDxmbG9hdD4gdGV4dHVyZSwgaW50IHgsIGludCB5KSB7CisgICAgICAgIHRlc3Qg
ZmxvYXQgZm9vMTMoUldUZXh0dXJlMkQ8ZmxvYXQ+IHRleHR1cmUsIGludCB4LCBpbnQgeSkgewog
ICAgICAgICAgICAgcmV0dXJuIExvYWQodGV4dHVyZSwgaW50Mih4LCB5KSk7CiAgICAgICAgIH0K
LSAgICAgICAgZmxvYXQgZm9vMTQoUldUZXh0dXJlMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgaW50
IHgsIGludCB5LCBpbnQgbGF5ZXIpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28xNChSV1RleHR1
cmUyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBpbnQgeCwgaW50IHksIGludCBsYXllcikgewogICAg
ICAgICAgICAgcmV0dXJuIExvYWQodGV4dHVyZSwgaW50Myh4LCB5LCBsYXllcikpOwogICAgICAg
ICB9Ci0gICAgICAgIGZsb2F0IGZvbzE1KFJXVGV4dHVyZTNEPGZsb2F0PiB0ZXh0dXJlLCBpbnQg
eCwgaW50IHksIGludCB6KSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMTUoUldUZXh0dXJlM0Q8
ZmxvYXQ+IHRleHR1cmUsIGludCB4LCBpbnQgeSwgaW50IHopIHsKICAgICAgICAgICAgIHJldHVy
biBMb2FkKHRleHR1cmUsIGludDMoeCwgeSwgeikpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0
IGZvbzE2KFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0dXJlLCBpbnQgeCwgaW50IHksIGludCBt
aXBtYXApIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28xNihUZXh0dXJlRGVwdGgyRDxmbG9hdD4g
dGV4dHVyZSwgaW50IHgsIGludCB5LCBpbnQgbWlwbWFwKSB7CiAgICAgICAgICAgICByZXR1cm4g
TG9hZCh0ZXh0dXJlLCBpbnQzKHgsIHksIG1pcG1hcCkpOwogICAgICAgICB9Ci0gICAgICAgIGZs
b2F0IGZvbzE3KFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0dXJlLCBpbnQgeCwgaW50IHksIGlu
dCBtaXBtYXAsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgeworICAgICAgICB0ZXN0IGZsb2F0
IGZvbzE3KFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0dXJlLCBpbnQgeCwgaW50IHksIGludCBt
aXBtYXAsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIExv
YWQodGV4dHVyZSwgaW50Myh4LCB5LCBtaXBtYXApLCBpbnQyKG9mZnNldFgsIG9mZnNldFkpKTsK
ICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28xOChUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0
PiB0ZXh0dXJlLCBpbnQgeCwgaW50IHksIGludCBtaXBtYXAsIGludCBsYXllcikgeworICAgICAg
ICB0ZXN0IGZsb2F0IGZvbzE4KFRleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIGlu
dCB4LCBpbnQgeSwgaW50IG1pcG1hcCwgaW50IGxheWVyKSB7CiAgICAgICAgICAgICByZXR1cm4g
TG9hZCh0ZXh0dXJlLCBpbnQ0KHgsIHksIG1pcG1hcCwgbGF5ZXIpKTsKICAgICAgICAgfQotICAg
ICAgICBmbG9hdCBmb28xOShUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBpbnQg
eCwgaW50IHksIGludCBtaXBtYXAsIGludCBsYXllciwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZ
KSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMTkoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4g
dGV4dHVyZSwgaW50IHgsIGludCB5LCBpbnQgbWlwbWFwLCBpbnQgbGF5ZXIsIGludCBvZmZzZXRY
LCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIExvYWQodGV4dHVyZSwgaW50NCh4
LCB5LCBtaXBtYXAsIGxheWVyKSwgaW50MihvZmZzZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0K
LSAgICAgICAgZmxvYXQgZm9vMjAoUldUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgaW50
IHgsIGludCB5KSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMjAoUldUZXh0dXJlRGVwdGgyRDxm
bG9hdD4gdGV4dHVyZSwgaW50IHgsIGludCB5KSB7CiAgICAgICAgICAgICByZXR1cm4gTG9hZCh0
ZXh0dXJlLCBpbnQyKHgsIHkpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28yMShSV1Rl
eHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIGludCB4LCBpbnQgeSwgaW50IGxheWVy
KSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMjEoUldUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0
PiB0ZXh0dXJlLCBpbnQgeCwgaW50IHksIGludCBsYXllcikgewogICAgICAgICAgICAgcmV0dXJu
IExvYWQodGV4dHVyZSwgaW50Myh4LCB5LCBsYXllcikpOwogICAgICAgICB9CiAgICAgYCk7CkBA
IC02NjcwLDMxICs2ODY4LDMxIEBAIHRlc3RzLnRleHR1cmVMb2FkID0gZnVuY3Rpb24oKSB7CiAK
IHRlc3RzLnRleHR1cmVTdG9yZSA9IGZ1bmN0aW9uKCkgewogICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKLSAgICAgICAgZmxvYXQgZm9vMShSV1RleHR1cmUxRDxmbG9hdD4gdGV4dHVyZSwgdWlu
dCBsb2NhdGlvbiwgZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28xKFJXVGV4
dHVyZTFEPGZsb2F0PiB0ZXh0dXJlLCB1aW50IGxvY2F0aW9uLCBmbG9hdCB2YWx1ZSkgewogICAg
ICAgICAgICAgU3RvcmUodGV4dHVyZSwgdmFsdWUsIGxvY2F0aW9uKTsKICAgICAgICAgICAgIHJl
dHVybiBMb2FkKHRleHR1cmUsIGludChsb2NhdGlvbikpOwogICAgICAgICB9Ci0gICAgICAgIGZs
b2F0IGZvbzIoUldUZXh0dXJlMURBcnJheTxmbG9hdD4gdGV4dHVyZSwgdWludCBsb2NhdGlvbiwg
dWludCBsYXllciwgZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28yKFJXVGV4
dHVyZTFEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHVpbnQgbG9jYXRpb24sIHVpbnQgbGF5ZXIsIGZs
b2F0IHZhbHVlKSB7CiAgICAgICAgICAgICBTdG9yZSh0ZXh0dXJlLCB2YWx1ZSwgdWludDIobG9j
YXRpb24sIGxheWVyKSk7CiAgICAgICAgICAgICByZXR1cm4gTG9hZCh0ZXh0dXJlLCBpbnQyKGlu
dChsb2NhdGlvbiksIGludChsYXllcikpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28z
KFJXVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJlLCB1aW50IHgsIHVpbnQgeSwgZmxvYXQgdmFsdWUp
IHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28zKFJXVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJlLCB1
aW50IHgsIHVpbnQgeSwgZmxvYXQgdmFsdWUpIHsKICAgICAgICAgICAgIFN0b3JlKHRleHR1cmUs
IHZhbHVlLCB1aW50Mih4LCB5KSk7CiAgICAgICAgICAgICByZXR1cm4gTG9hZCh0ZXh0dXJlLCBp
bnQyKGludCh4KSwgaW50KHkpKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNChSV1Rl
eHR1cmUyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCB1aW50IHgsIHVpbnQgeSwgdWludCBsYXllciwg
ZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb280KFJXVGV4dHVyZTJEQXJyYXk8
ZmxvYXQ+IHRleHR1cmUsIHVpbnQgeCwgdWludCB5LCB1aW50IGxheWVyLCBmbG9hdCB2YWx1ZSkg
ewogICAgICAgICAgICAgU3RvcmUodGV4dHVyZSwgdmFsdWUsIHVpbnQzKHgsIHksIGxheWVyKSk7
CiAgICAgICAgICAgICByZXR1cm4gTG9hZCh0ZXh0dXJlLCBpbnQzKGludCh4KSwgaW50KHkpLCBp
bnQobGF5ZXIpKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNShSV1RleHR1cmUzRDxm
bG9hdD4gdGV4dHVyZSwgdWludCB4LCB1aW50IHksIHVpbnQgeiwgZmxvYXQgdmFsdWUpIHsKKyAg
ICAgICAgdGVzdCBmbG9hdCBmb281KFJXVGV4dHVyZTNEPGZsb2F0PiB0ZXh0dXJlLCB1aW50IHgs
IHVpbnQgeSwgdWludCB6LCBmbG9hdCB2YWx1ZSkgewogICAgICAgICAgICAgU3RvcmUodGV4dHVy
ZSwgdmFsdWUsIHVpbnQzKHgsIHksIHopKTsKICAgICAgICAgICAgIHJldHVybiBMb2FkKHRleHR1
cmUsIGludDMoaW50KHgpLCBpbnQoeSksIGludCh6KSkpOwogICAgICAgICB9Ci0gICAgICAgIGZs
b2F0IGZvbzYoUldUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgdWludCB4LCB1aW50IHks
IGZsb2F0IHZhbHVlKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vNihSV1RleHR1cmVEZXB0aDJE
PGZsb2F0PiB0ZXh0dXJlLCB1aW50IHgsIHVpbnQgeSwgZmxvYXQgdmFsdWUpIHsKICAgICAgICAg
ICAgIFN0b3JlKHRleHR1cmUsIHZhbHVlLCB1aW50Mih4LCB5KSk7CiAgICAgICAgICAgICByZXR1
cm4gTG9hZCh0ZXh0dXJlLCBpbnQyKGludCh4KSwgaW50KHkpKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgZmxvYXQgZm9vNyhSV1RleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHVpbnQg
eCwgdWludCB5LCB1aW50IGxheWVyLCBmbG9hdCB2YWx1ZSkgeworICAgICAgICB0ZXN0IGZsb2F0
IGZvbzcoUldUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCB1aW50IHgsIHVpbnQg
eSwgdWludCBsYXllciwgZmxvYXQgdmFsdWUpIHsKICAgICAgICAgICAgIFN0b3JlKHRleHR1cmUs
IHZhbHVlLCB1aW50Myh4LCB5LCBsYXllcikpOwogICAgICAgICAgICAgcmV0dXJuIExvYWQodGV4
dHVyZSwgaW50MyhpbnQoeCksIGludCh5KSwgaW50KGxheWVyKSkpOwogICAgICAgICB9CkBAIC02
ODI0LDE4NCArNzAyMiwxODQgQEAgdGVzdHMudGV4dHVyZVN0b3JlID0gZnVuY3Rpb24oKSB7CiAK
IHRlc3RzLnRleHR1cmVTYW1wbGUgPSBmdW5jdGlvbigpIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRv
UHJlcChgCi0gICAgICAgIGZsb2F0IGZvbzEoVGV4dHVyZTFEPGZsb2F0PiB0ZXh0dXJlLCBzYW1w
bGVyIHMsIGZsb2F0IGxvY2F0aW9uKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMShUZXh0dXJl
MUQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgbG9jYXRpb24pIHsKICAgICAgICAg
ICAgIHJldHVybiBTYW1wbGUodGV4dHVyZSwgcywgbG9jYXRpb24pOwogICAgICAgICB9Ci0gICAg
ICAgIGZsb2F0IGZvbzIoVGV4dHVyZTFEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
IGxvY2F0aW9uLCBpbnQgb2Zmc2V0KSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMihUZXh0dXJl
MUQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgbG9jYXRpb24sIGludCBvZmZzZXQp
IHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGUodGV4dHVyZSwgcywgbG9jYXRpb24sIG9mZnNl
dCk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMyhUZXh0dXJlMURBcnJheTxmbG9hdD4g
dGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCBsYXllcikgeworICAgICAgICB0ZXN0
IGZsb2F0IGZvbzMoVGV4dHVyZTFEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxv
YXQgeCwgZmxvYXQgbGF5ZXIpIHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGUodGV4dHVyZSwg
cywgZmxvYXQyKHgsIGxheWVyKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNChUZXh0
dXJlMURBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCBsYXll
ciwgaW50IG9mZnNldCkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzQoVGV4dHVyZTFEQXJyYXk8
ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgbGF5ZXIsIGludCBvZmZz
ZXQpIHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGUodGV4dHVyZSwgcywgZmxvYXQyKHgsIGxh
eWVyKSwgb2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb281KFRleHR1cmUyRDxm
bG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgICAgIHRl
c3QgZmxvYXQgZm9vNShUZXh0dXJlMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQg
eCwgZmxvYXQgeSkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZSh0ZXh0dXJlLCBzLCBmbG9h
dDIoeCwgeSkpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzYoVGV4dHVyZTJEPGZsb2F0
PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGludCBvZmZzZXRYLCBpbnQg
b2Zmc2V0WSkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzYoVGV4dHVyZTJEPGZsb2F0PiB0ZXh0
dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0
WSkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZSh0ZXh0dXJlLCBzLCBmbG9hdDIoeCwgeSks
IGludDIob2Zmc2V0WCwgb2Zmc2V0WSkpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzco
VGV4dHVyZTJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgbGF5ZXIpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb283KFRleHR1cmUyREFycmF5
PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGxheWVy
KSB7CiAgICAgICAgICAgICByZXR1cm4gU2FtcGxlKHRleHR1cmUsIHMsIGZsb2F0Myh4LCB5LCBs
YXllcikpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzgoVGV4dHVyZTJEQXJyYXk8Zmxv
YXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGlu
dCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzgoVGV4dHVy
ZTJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgbGF5ZXIsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJu
IFNhbXBsZSh0ZXh0dXJlLCBzLCBmbG9hdDMoeCwgeSwgbGF5ZXIpLCBpbnQyKG9mZnNldFgsIG9m
ZnNldFkpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb285KFRleHR1cmUzRDxmbG9hdD4g
dGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7CisgICAgICAg
IHRlc3QgZmxvYXQgZm9vOShUZXh0dXJlM0Q8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZSh0ZXh0
dXJlLCBzLCBmbG9hdDMoeCwgeSwgeikpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzEw
KFRleHR1cmUzRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB6LCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFksIGludCBvZmZzZXRaKSB7CisgICAgICAg
IHRlc3QgZmxvYXQgZm9vMTAoVGV4dHVyZTNEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSwgaW50IG9m
ZnNldFopIHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGUodGV4dHVyZSwgcywgZmxvYXQzKHgs
IHksIHopLCBpbnQzKG9mZnNldFgsIG9mZnNldFksIG9mZnNldFopKTsKICAgICAgICAgfQotICAg
ICAgICBmbG9hdCBmb28xMShUZXh0dXJlQ3ViZTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMTEoVGV4
dHVyZUN1YmU8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeikgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZSh0ZXh0dXJlLCBzLCBmbG9hdDMoeCwg
eSwgeikpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzEyKFRleHR1cmUyRDxmbG9hdD4g
dGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBCaWFzKSB7CisgICAg
ICAgIHRlc3QgZmxvYXQgZm9vMTIoVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMs
IGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IEJpYXMpIHsKICAgICAgICAgICAgIHJldHVybiBTYW1w
bGVCaWFzKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5KSwgQmlhcyk7CiAgICAgICAgIH0KLSAgICAg
ICAgZmxvYXQgZm9vMTMoVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IEJpYXMsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgeworICAg
ICAgICB0ZXN0IGZsb2F0IGZvbzEzKFRleHR1cmUyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBCaWFzLCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFkp
IHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGVCaWFzKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5
KSwgQmlhcywgaW50MihvZmZzZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxv
YXQgZm9vMTQoVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IGRkeDAsIGZsb2F0IGRkeDEsIGZsb2F0IGRkeTAsIGZsb2F0IGRkeTEpIHsK
KyAgICAgICAgdGVzdCBmbG9hdCBmb28xNChUZXh0dXJlMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBs
ZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgZGR4MCwgZmxvYXQgZGR4MSwgZmxvYXQgZGR5
MCwgZmxvYXQgZGR5MSkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUdyYWQodGV4dHVyZSwg
cywgZmxvYXQyKHgsIHkpLCBmbG9hdDIoZGR4MCwgZGR4MSksIGZsb2F0MihkZHkwLCBkZHkxKSk7
CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMTUoVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJl
LCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGRkeDAsIGZsb2F0IGRkeDEsIGZs
b2F0IGRkeTAsIGZsb2F0IGRkeTEsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgeworICAgICAg
ICB0ZXN0IGZsb2F0IGZvbzE1KFRleHR1cmUyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBkZHgwLCBmbG9hdCBkZHgxLCBmbG9hdCBkZHkwLCBmbG9h
dCBkZHkxLCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFkpIHsKICAgICAgICAgICAgIHJldHVybiBT
YW1wbGVHcmFkKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5KSwgZmxvYXQyKGRkeDAsIGRkeDEpLCBm
bG9hdDIoZGR5MCwgZGR5MSksIGludDIob2Zmc2V0WCwgb2Zmc2V0WSkpOwogICAgICAgICB9Ci0g
ICAgICAgIGZsb2F0IGZvbzE2KFRleHR1cmUyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBMT0QpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28xNihU
ZXh0dXJlMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgTE9EKSB7CiAgICAgICAgICAgICByZXR1cm4gU2FtcGxlTGV2ZWwodGV4dHVyZSwgcywgZmxv
YXQyKHgsIHkpLCBMT0QpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzE3KFRleHR1cmUy
RDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBMT0Qs
IGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzE3KFRl
eHR1cmUyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCBMT0QsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIFNh
bXBsZUxldmVsKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5KSwgTE9ELCBpbnQyKG9mZnNldFgsIG9m
ZnNldFkpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28xOChUZXh0dXJlMkRBcnJheTxm
bG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwg
ZmxvYXQgQmlhcykgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzE4KFRleHR1cmUyREFycmF5PGZs
b2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGxheWVyLCBm
bG9hdCBCaWFzKSB7CiAgICAgICAgICAgICByZXR1cm4gU2FtcGxlQmlhcyh0ZXh0dXJlLCBzLCBm
bG9hdDMoeCwgeSwgbGF5ZXIpLCBCaWFzKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28x
OShUZXh0dXJlMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCBsYXllciwgZmxvYXQgQmlhcywgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7
CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMTkoVGV4dHVyZTJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUs
IHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGZsb2F0IEJpYXMsIGlu
dCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUJpYXMo
dGV4dHVyZSwgcywgZmxvYXQzKHgsIHksIGxheWVyKSwgQmlhcywgaW50MihvZmZzZXRYLCBvZmZz
ZXRZKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMjAoVGV4dHVyZTJEQXJyYXk8Zmxv
YXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGZs
b2F0IGRkeDAsIGZsb2F0IGRkeDEsIGZsb2F0IGRkeTAsIGZsb2F0IGRkeTEpIHsKKyAgICAgICAg
dGVzdCBmbG9hdCBmb28yMChUZXh0dXJlMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgZmxvYXQgZGR4MCwgZmxvYXQgZGR4MSwg
ZmxvYXQgZGR5MCwgZmxvYXQgZGR5MSkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUdyYWQo
dGV4dHVyZSwgcywgZmxvYXQzKHgsIHksIGxheWVyKSwgZmxvYXQyKGRkeDAsIGRkeDEpLCBmbG9h
dDIoZGR5MCwgZGR5MSkpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzIxKFRleHR1cmUy
REFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IGxheWVyLCBmbG9hdCBkZHgwLCBmbG9hdCBkZHgxLCBmbG9hdCBkZHkwLCBmbG9hdCBkZHkxLCBp
bnQgb2Zmc2V0WCwgaW50IG9mZnNldFkpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28yMShUZXh0
dXJlMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCBsYXllciwgZmxvYXQgZGR4MCwgZmxvYXQgZGR4MSwgZmxvYXQgZGR5MCwgZmxvYXQgZGR5
MSwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CiAgICAgICAgICAgICByZXR1cm4gU2FtcGxl
R3JhZCh0ZXh0dXJlLCBzLCBmbG9hdDMoeCwgeSwgbGF5ZXIpLCBmbG9hdDIoZGR4MCwgZGR4MSks
IGZsb2F0MihkZHkwLCBkZHkxKSwgaW50MihvZmZzZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0K
LSAgICAgICAgZmxvYXQgZm9vMjIoVGV4dHVyZTJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNhbXBs
ZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGZsb2F0IExPRCkgeworICAgICAg
ICB0ZXN0IGZsb2F0IGZvbzIyKFRleHR1cmUyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVy
IHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGxheWVyLCBmbG9hdCBMT0QpIHsKICAgICAgICAg
ICAgIHJldHVybiBTYW1wbGVMZXZlbCh0ZXh0dXJlLCBzLCBmbG9hdDMoeCwgeSwgbGF5ZXIpLCBM
T0QpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzIzKFRleHR1cmUyREFycmF5PGZsb2F0
PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGxheWVyLCBmbG9h
dCBMT0QsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgeworICAgICAgICB0ZXN0IGZsb2F0IGZv
bzIzKFRleHR1cmUyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IGxheWVyLCBmbG9hdCBMT0QsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkg
ewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUxldmVsKHRleHR1cmUsIHMsIGZsb2F0Myh4LCB5
LCBsYXllciksIExPRCwgaW50MihvZmZzZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgaW50IGZvbzI0KFRleHR1cmUxRDxpbnQ0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IGxv
Y2F0aW9uKSB7CisgICAgICAgIHRlc3QgaW50IGZvbzI0KFRleHR1cmUxRDxpbnQ0PiB0ZXh0dXJl
LCBzYW1wbGVyIHMsIGZsb2F0IGxvY2F0aW9uKSB7CiAgICAgICAgICAgICByZXR1cm4gU2FtcGxl
KHRleHR1cmUsIHMsIGxvY2F0aW9uKS54OwogICAgICAgICB9Ci0gICAgICAgIGludCBmb28yNShU
ZXh0dXJlMUQ8aW50ND4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCBsb2NhdGlvbikgeworICAg
ICAgICB0ZXN0IGludCBmb28yNShUZXh0dXJlMUQ8aW50ND4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdCBsb2NhdGlvbikgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZSh0ZXh0dXJlLCBzLCBs
b2NhdGlvbikueTsKICAgICAgICAgfQotICAgICAgICBpbnQgZm9vMjYoVGV4dHVyZTFEPGludDQ+
IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgbG9jYXRpb24pIHsKKyAgICAgICAgdGVzdCBpbnQg
Zm9vMjYoVGV4dHVyZTFEPGludDQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgbG9jYXRpb24p
IHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGUodGV4dHVyZSwgcywgbG9jYXRpb24pLno7CiAg
ICAgICAgIH0KLSAgICAgICAgaW50IGZvbzI3KFRleHR1cmUxRDxpbnQ0PiB0ZXh0dXJlLCBzYW1w
bGVyIHMsIGZsb2F0IGxvY2F0aW9uKSB7CisgICAgICAgIHRlc3QgaW50IGZvbzI3KFRleHR1cmUx
RDxpbnQ0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IGxvY2F0aW9uKSB7CiAgICAgICAgICAg
ICByZXR1cm4gU2FtcGxlKHRleHR1cmUsIHMsIGxvY2F0aW9uKS53OwogICAgICAgICB9Ci0gICAg
ICAgIGZsb2F0IGZvbzI4KFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMs
IGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28yOChUZXh0dXJlRGVw
dGgyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5KSB7CiAgICAg
ICAgICAgICByZXR1cm4gU2FtcGxlKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5KSk7CiAgICAgICAg
IH0KLSAgICAgICAgZmxvYXQgZm9vMjkoVGV4dHVyZURlcHRoMkQ8ZmxvYXQ+IHRleHR1cmUsIHNh
bXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7Cisg
ICAgICAgIHRlc3QgZmxvYXQgZm9vMjkoVGV4dHVyZURlcHRoMkQ8ZmxvYXQ+IHRleHR1cmUsIHNh
bXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CiAg
ICAgICAgICAgICByZXR1cm4gU2FtcGxlKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5KSwgaW50Mihv
ZmZzZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMzAoVGV4dHVy
ZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCBsYXllcikgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzMwKFRleHR1cmVEZXB0aDJE
QXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
bGF5ZXIpIHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGUodGV4dHVyZSwgcywgZmxvYXQzKHgs
IHksIGxheWVyKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMzEoVGV4dHVyZURlcHRo
MkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCBsYXllciwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CisgICAgICAgIHRlc3QgZmxvYXQg
Zm9vMzEoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CiAg
ICAgICAgICAgICByZXR1cm4gU2FtcGxlKHRleHR1cmUsIHMsIGZsb2F0Myh4LCB5LCBsYXllciks
IGludDIob2Zmc2V0WCwgb2Zmc2V0WSkpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzMy
KFRleHR1cmVEZXB0aEN1YmU8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeikgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzMyKFRleHR1cmVEZXB0aEN1
YmU8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikg
ewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZSh0ZXh0dXJlLCBzLCBmbG9hdDMoeCwgeSwgeikp
OwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzMzKFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0
ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IEJpYXMpIHsKKyAgICAg
ICAgdGVzdCBmbG9hdCBmb28zMyhUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxl
ciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBCaWFzKSB7CiAgICAgICAgICAgICByZXR1cm4g
U2FtcGxlQmlhcyh0ZXh0dXJlLCBzLCBmbG9hdDIoeCwgeSksIEJpYXMpOwogICAgICAgICB9Ci0g
ICAgICAgIGZsb2F0IGZvbzM0KFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVy
IHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IEJpYXMsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0
WSkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzM0KFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0
dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IEJpYXMsIGludCBvZmZzZXRY
LCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUJpYXModGV4dHVyZSwg
cywgZmxvYXQyKHgsIHkpLCBCaWFzLCBpbnQyKG9mZnNldFgsIG9mZnNldFkpKTsKICAgICAgICAg
fQotICAgICAgICBmbG9hdCBmb28zNShUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgc2Ft
cGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBkZHgwLCBmbG9hdCBkZHgxLCBmbG9hdCBk
ZHkwLCBmbG9hdCBkZHkxKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMzUoVGV4dHVyZURlcHRo
MkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgZGR4
MCwgZmxvYXQgZGR4MSwgZmxvYXQgZGR5MCwgZmxvYXQgZGR5MSkgewogICAgICAgICAgICAgcmV0
dXJuIFNhbXBsZUdyYWQodGV4dHVyZSwgcywgZmxvYXQyKHgsIHkpLCBmbG9hdDIoZGR4MCwgZGR4
MSksIGZsb2F0MihkZHkwLCBkZHkxKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMzYo
VGV4dHVyZURlcHRoMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgZGR4MCwgZmxvYXQgZGR4MSwgZmxvYXQgZGR5MCwgZmxvYXQgZGR5MSwgaW50IG9m
ZnNldFgsIGludCBvZmZzZXRZKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMzYoVGV4dHVyZURl
cHRoMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
ZGR4MCwgZmxvYXQgZGR4MSwgZmxvYXQgZGR5MCwgZmxvYXQgZGR5MSwgaW50IG9mZnNldFgsIGlu
dCBvZmZzZXRZKSB7CiAgICAgICAgICAgICByZXR1cm4gU2FtcGxlR3JhZCh0ZXh0dXJlLCBzLCBm
bG9hdDIoeCwgeSksIGZsb2F0MihkZHgwLCBkZHgxKSwgZmxvYXQyKGRkeTAsIGRkeTEpLCBpbnQy
KG9mZnNldFgsIG9mZnNldFkpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28zNyhUZXh0
dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCBMT0QpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28zNyhUZXh0dXJlRGVwdGgyRDxmbG9h
dD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBMT0QpIHsKICAg
ICAgICAgICAgIHJldHVybiBTYW1wbGVMZXZlbCh0ZXh0dXJlLCBzLCBmbG9hdDIoeCwgeSksIExP
RCk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vMzgoVGV4dHVyZURlcHRoMkQ8ZmxvYXQ+
IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgTE9ELCBpbnQgb2Zm
c2V0WCwgaW50IG9mZnNldFkpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb28zOChUZXh0dXJlRGVw
dGgyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBM
T0QsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBs
ZUxldmVsKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5KSwgTE9ELCBpbnQyKG9mZnNldFgsIG9mZnNl
dFkpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb28zOShUZXh0dXJlRGVwdGgyREFycmF5
PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGxheWVy
LCBmbG9hdCBCaWFzKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vMzkoVGV4dHVyZURlcHRoMkRB
cnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBs
YXllciwgZmxvYXQgQmlhcykgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUJpYXModGV4dHVy
ZSwgcywgZmxvYXQzKHgsIHksIGxheWVyKSwgQmlhcyk7CiAgICAgICAgIH0KLSAgICAgICAgZmxv
YXQgZm9vNDAoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgZmxvYXQgQmlhcywgaW50IG9mZnNldFgsIGlu
dCBvZmZzZXRZKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vNDAoVGV4dHVyZURlcHRoMkRBcnJh
eTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXll
ciwgZmxvYXQgQmlhcywgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gU2FtcGxlQmlhcyh0ZXh0dXJlLCBzLCBmbG9hdDMoeCwgeSwgbGF5ZXIpLCBCaWFzLCBp
bnQyKG9mZnNldFgsIG9mZnNldFkpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb280MShU
ZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IGxheWVyLCBmbG9hdCBkZHgwLCBmbG9hdCBkZHgxLCBmbG9hdCBkZHkwLCBm
bG9hdCBkZHkxKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vNDEoVGV4dHVyZURlcHRoMkRBcnJh
eTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXll
ciwgZmxvYXQgZGR4MCwgZmxvYXQgZGR4MSwgZmxvYXQgZGR5MCwgZmxvYXQgZGR5MSkgewogICAg
ICAgICAgICAgcmV0dXJuIFNhbXBsZUdyYWQodGV4dHVyZSwgcywgZmxvYXQzKHgsIHksIGxheWVy
KSwgZmxvYXQyKGRkeDAsIGRkeDEpLCBmbG9hdDIoZGR5MCwgZGR5MSkpOwogICAgICAgICB9Ci0g
ICAgICAgIGZsb2F0IGZvbzQyKFRleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNh
bXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGZsb2F0IGRkeDAsIGZsb2F0
IGRkeDEsIGZsb2F0IGRkeTAsIGZsb2F0IGRkeTEsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkg
eworICAgICAgICB0ZXN0IGZsb2F0IGZvbzQyKFRleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRl
eHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGZsb2F0IGRk
eDAsIGZsb2F0IGRkeDEsIGZsb2F0IGRkeTAsIGZsb2F0IGRkeTEsIGludCBvZmZzZXRYLCBpbnQg
b2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUdyYWQodGV4dHVyZSwgcywgZmxv
YXQzKHgsIHksIGxheWVyKSwgZmxvYXQyKGRkeDAsIGRkeDEpLCBmbG9hdDIoZGR5MCwgZGR5MSks
IGludDIob2Zmc2V0WCwgb2Zmc2V0WSkpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzQz
KFRleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGZsb2F0IExPRCkgeworICAgICAgICB0ZXN0IGZsb2F0IGZv
bzQzKFRleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGZsb2F0IExPRCkgewogICAgICAgICAgICAgcmV0dXJu
IFNhbXBsZUxldmVsKHRleHR1cmUsIHMsIGZsb2F0Myh4LCB5LCBsYXllciksIExPRCk7CiAgICAg
ICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNDQoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4
dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgZmxvYXQgTE9E
LCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFkpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb280NChU
ZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IGxheWVyLCBmbG9hdCBMT0QsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkg
ewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUxldmVsKHRleHR1cmUsIHMsIGZsb2F0Myh4LCB5
LCBsYXllciksIExPRCwgaW50MihvZmZzZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgZmxvYXQgZm9vNDUoVGV4dHVyZURlcHRoMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywg
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgY29tcGFyZVZhbHVlKSB7CisgICAgICAgIHRlc3QgZmxv
YXQgZm9vNDUoVGV4dHVyZURlcHRoMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgY29tcGFyZVZhbHVlKSB7CiAgICAgICAgICAgICByZXR1cm4gU2Ft
cGxlQ21wKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5KSwgY29tcGFyZVZhbHVlKTsKICAgICAgICAg
fQotICAgICAgICBmbG9hdCBmb280NihUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgc2Ft
cGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBjb21wYXJlVmFsdWUsIGludCBvZmZzZXRY
LCBpbnQgb2Zmc2V0WSkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzQ2KFRleHR1cmVEZXB0aDJE
PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGNvbXBh
cmVWYWx1ZSwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CiAgICAgICAgICAgICByZXR1cm4g
U2FtcGxlQ21wKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5KSwgY29tcGFyZVZhbHVlLCBpbnQyKG9m
ZnNldFgsIG9mZnNldFkpKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb280NyhUZXh0dXJl
RGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0IGxheWVyLCBmbG9hdCBjb21wYXJlVmFsdWUpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBm
b280NyhUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IGxheWVyLCBmbG9hdCBjb21wYXJlVmFsdWUpIHsKICAgICAgICAg
ICAgIHJldHVybiBTYW1wbGVDbXAodGV4dHVyZSwgcywgZmxvYXQzKHgsIHksIGxheWVyKSwgY29t
cGFyZVZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb280OChUZXh0dXJlRGVwdGgy
REFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IGxheWVyLCBmbG9hdCBjb21wYXJlVmFsdWUsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgewor
ICAgICAgICB0ZXN0IGZsb2F0IGZvbzQ4KFRleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRleHR1
cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGZsb2F0IGNvbXBh
cmVWYWx1ZSwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CiAgICAgICAgICAgICByZXR1cm4g
U2FtcGxlQ21wKHRleHR1cmUsIHMsIGZsb2F0Myh4LCB5LCBsYXllciksIGNvbXBhcmVWYWx1ZSwg
aW50MihvZmZzZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNDko
VGV4dHVyZUN1YmU8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgeiwgZmxvYXQgYmlhcykgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzQ5KFRleHR1cmVD
dWJlPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHos
IGZsb2F0IGJpYXMpIHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGVCaWFzKHRleHR1cmUsIHMs
IGZsb2F0Myh4LCB5LCB6KSwgYmlhcyk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNTAo
VGV4dHVyZUN1YmU8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgeiwgZmxvYXQgZGR4MCwgZmxvYXQgZGR4MSwgZmxvYXQgZGR4MiwgZmxvYXQgZGR5MCwg
ZmxvYXQgZGR5MSwgZmxvYXQgZGR5MikgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzUwKFRleHR1
cmVDdWJlPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosIGZsb2F0IGRkeDAsIGZsb2F0IGRkeDEsIGZsb2F0IGRkeDIsIGZsb2F0IGRkeTAsIGZsb2F0
IGRkeTEsIGZsb2F0IGRkeTIpIHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGVHcmFkKHRleHR1
cmUsIHMsIGZsb2F0Myh4LCB5LCB6KSwgZmxvYXQzKGRkeDAsIGRkeDEsIGRkeDIpLCBmbG9hdDMo
ZGR5MCwgZGR5MSwgZGR5MikpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzUxKFRleHR1
cmVDdWJlPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosIGZsb2F0IGxvZCkgeworICAgICAgICB0ZXN0IGZsb2F0IGZvbzUxKFRleHR1cmVDdWJlPGZs
b2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0
IGxvZCkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUxldmVsKHRleHR1cmUsIHMsIGZsb2F0
Myh4LCB5LCB6KSwgbG9kKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBmb281MihUZXh0dXJl
RGVwdGhDdWJlPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHosIGZsb2F0IGJpYXMpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb281MihUZXh0dXJlRGVw
dGhDdWJlPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosIGZsb2F0IGJpYXMpIHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGVCaWFzKHRleHR1cmUs
IHMsIGZsb2F0Myh4LCB5LCB6KSwgYmlhcyk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9v
NTMoVGV4dHVyZURlcHRoQ3ViZTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB6LCBmbG9hdCBkZHgwLCBmbG9hdCBkZHgxLCBmbG9hdCBkZHgyLCBmbG9h
dCBkZHkwLCBmbG9hdCBkZHkxLCBmbG9hdCBkZHkyKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9v
NTMoVGV4dHVyZURlcHRoQ3ViZTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB6LCBmbG9hdCBkZHgwLCBmbG9hdCBkZHgxLCBmbG9hdCBkZHgyLCBmbG9h
dCBkZHkwLCBmbG9hdCBkZHkxLCBmbG9hdCBkZHkyKSB7CiAgICAgICAgICAgICByZXR1cm4gU2Ft
cGxlR3JhZCh0ZXh0dXJlLCBzLCBmbG9hdDMoeCwgeSwgeiksIGZsb2F0MyhkZHgwLCBkZHgxLCBk
ZHgyKSwgZmxvYXQzKGRkeTAsIGRkeTEsIGRkeTIpKTsKICAgICAgICAgfQotICAgICAgICBmbG9h
dCBmb281NChUZXh0dXJlRGVwdGhDdWJlPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IGxvZCkgeworICAgICAgICB0ZXN0IGZsb2F0IGZv
bzU0KFRleHR1cmVEZXB0aEN1YmU8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgbG9kKSB7CiAgICAgICAgICAgICByZXR1cm4gU2FtcGxl
TGV2ZWwodGV4dHVyZSwgcywgZmxvYXQzKHgsIHksIHopLCBsb2QpOwogICAgICAgICB9Ci0gICAg
ICAgIGZsb2F0IGZvbzU1KFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMs
IGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGNvbXBhcmVWYWx1ZSkgeworICAgICAgICB0ZXN0IGZs
b2F0IGZvbzU1KFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IGNvbXBhcmVWYWx1ZSkgewogICAgICAgICAgICAgcmV0dXJuIFNh
bXBsZUNtcExldmVsWmVybyh0ZXh0dXJlLCBzLCBmbG9hdDIoeCwgeSksIGNvbXBhcmVWYWx1ZSk7
CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQgZm9vNTYoVGV4dHVyZURlcHRoMkQ8ZmxvYXQ+IHRl
eHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgY29tcGFyZVZhbHVlLCBp
bnQgb2Zmc2V0WCwgaW50IG9mZnNldFkpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb281NihUZXh0
dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCBjb21wYXJlVmFsdWUsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAg
ICAgcmV0dXJuIFNhbXBsZUNtcExldmVsWmVybyh0ZXh0dXJlLCBzLCBmbG9hdDIoeCwgeSksIGNv
bXBhcmVWYWx1ZSwgaW50MihvZmZzZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0KLSAgICAgICAg
ZmxvYXQgZm9vNTcoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgZmxvYXQgY29tcGFyZVZhbHVlKSB7Cisg
ICAgICAgIHRlc3QgZmxvYXQgZm9vNTcoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVy
ZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgZmxvYXQgY29tcGFy
ZVZhbHVlKSB7CiAgICAgICAgICAgICByZXR1cm4gU2FtcGxlQ21wTGV2ZWxaZXJvKHRleHR1cmUs
IHMsIGZsb2F0Myh4LCB5LCBsYXllciksIGNvbXBhcmVWYWx1ZSk7CiAgICAgICAgIH0KLSAgICAg
ICAgZmxvYXQgZm9vNTgoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxl
ciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgZmxvYXQgY29tcGFyZVZhbHVlLCBp
bnQgb2Zmc2V0WCwgaW50IG9mZnNldFkpIHsKKyAgICAgICAgdGVzdCBmbG9hdCBmb281OChUZXh0
dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IGxheWVyLCBmbG9hdCBjb21wYXJlVmFsdWUsIGludCBvZmZzZXRYLCBpbnQgb2Zm
c2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIFNhbXBsZUNtcExldmVsWmVybyh0ZXh0dXJlLCBz
LCBmbG9hdDMoeCwgeSwgbGF5ZXIpLCBjb21wYXJlVmFsdWUsIGludDIob2Zmc2V0WCwgb2Zmc2V0
WSkpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IGZvbzU5KFRleHR1cmVEZXB0aEN1YmU8Zmxv
YXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQg
Y29tcGFyZVZhbHVlKSB7CisgICAgICAgIHRlc3QgZmxvYXQgZm9vNTkoVGV4dHVyZURlcHRoQ3Vi
ZTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBm
bG9hdCBjb21wYXJlVmFsdWUpIHsKICAgICAgICAgICAgIHJldHVybiBTYW1wbGVDbXAodGV4dHVy
ZSwgcywgZmxvYXQzKHgsIHksIHopLCBjb21wYXJlVmFsdWUpOwogICAgICAgICB9Ci0gICAgICAg
IGZsb2F0IGZvbzYwKFRleHR1cmVEZXB0aEN1YmU8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywg
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgY29tcGFyZVZhbHVlKSB7CisgICAgICAg
IHRlc3QgZmxvYXQgZm9vNjAoVGV4dHVyZURlcHRoQ3ViZTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxl
ciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCBjb21wYXJlVmFsdWUpIHsKICAg
ICAgICAgICAgIHJldHVybiBTYW1wbGVDbXBMZXZlbFplcm8odGV4dHVyZSwgcywgZmxvYXQzKHgs
IHksIHopLCBjb21wYXJlVmFsdWUpOwogICAgICAgICB9CiAgICAgYCk7CkBAIC03NDk2LDQ2ICs3
Njk0LDQ2IEBAIHRlc3RzLnRleHR1cmVTYW1wbGUgPSBmdW5jdGlvbigpIHsKIAogdGVzdHMudGV4
dHVyZUdhdGhlciA9IGZ1bmN0aW9uKCkgewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAg
ICAgICAgZmxvYXQ0IGZvbzEoVGV4dHVyZTJEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZs
b2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgdGVzdCBmbG9hdDQgZm9vMShUZXh0dXJlMkQ8Zmxv
YXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSkgewogICAgICAgICAgICAg
cmV0dXJuIEdhdGhlcih0ZXh0dXJlLCBzLCBmbG9hdDIoeCwgeSkpOwogICAgICAgICB9Ci0gICAg
ICAgIGZsb2F0NCBmb28yKFRleHR1cmUyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9h
dCB4LCBmbG9hdCB5LCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFkpIHsKKyAgICAgICAgdGVzdCBm
bG9hdDQgZm9vMihUZXh0dXJlMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwg
ZmxvYXQgeSwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CiAgICAgICAgICAgICByZXR1cm4g
R2F0aGVyKHRleHR1cmUsIHMsIGZsb2F0Mih4LCB5KSwgaW50MihvZmZzZXRYLCBvZmZzZXRZKSk7
CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQ0IGZvbzMoVGV4dHVyZTJEQXJyYXk8ZmxvYXQ+IHRl
eHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIpIHsKKyAgICAg
ICAgdGVzdCBmbG9hdDQgZm9vMyhUZXh0dXJlMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxl
ciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllcikgewogICAgICAgICAgICAgcmV0dXJu
IEdhdGhlcih0ZXh0dXJlLCBzLCBmbG9hdDMoeCwgeSwgbGF5ZXIpKTsKICAgICAgICAgfQotICAg
ICAgICBmbG9hdDQgZm9vNChUZXh0dXJlMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZ
KSB7CisgICAgICAgIHRlc3QgZmxvYXQ0IGZvbzQoVGV4dHVyZTJEQXJyYXk8ZmxvYXQ+IHRleHR1
cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIsIGludCBvZmZzZXRY
LCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIEdhdGhlcih0ZXh0dXJlLCBzLCBm
bG9hdDMoeCwgeSwgbGF5ZXIpLCBpbnQyKG9mZnNldFgsIG9mZnNldFkpKTsKICAgICAgICAgfQot
ICAgICAgICBmbG9hdDQgZm9vNShUZXh0dXJlQ3ViZTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7CisgICAgICAgIHRlc3QgZmxvYXQ0IGZvbzUo
VGV4dHVyZUN1YmU8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgeikgewogICAgICAgICAgICAgcmV0dXJuIEdhdGhlcih0ZXh0dXJlLCBzLCBmbG9hdDMo
eCwgeSwgeikpOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0NCBmb282KFRleHR1cmVEZXB0aDJE
PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAg
dGVzdCBmbG9hdDQgZm9vNihUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdCB4LCBmbG9hdCB5KSB7CiAgICAgICAgICAgICByZXR1cm4gR2F0aGVyKHRleHR1cmUs
IHMsIGZsb2F0Mih4LCB5KSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQ0IGZvbzcoVGV4dHVy
ZURlcHRoMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgaW50
IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CisgICAgICAgIHRlc3QgZmxvYXQ0IGZvbzcoVGV4dHVy
ZURlcHRoMkQ8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgaW50
IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CiAgICAgICAgICAgICByZXR1cm4gR2F0aGVyKHRleHR1
cmUsIHMsIGZsb2F0Mih4LCB5KSwgaW50MihvZmZzZXRYLCBvZmZzZXRZKSk7CiAgICAgICAgIH0K
LSAgICAgICAgZmxvYXQ0IGZvbzgoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwg
c2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllcikgeworICAgICAgICB0ZXN0
IGZsb2F0NCBmb284KFRleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIg
cywgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbGF5ZXIpIHsKICAgICAgICAgICAgIHJldHVybiBH
YXRoZXIodGV4dHVyZSwgcywgZmxvYXQzKHgsIHksIGxheWVyKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgZmxvYXQ0IGZvbzkoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxl
ciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgaW50IG9mZnNldFgsIGludCBvZmZz
ZXRZKSB7CisgICAgICAgIHRlc3QgZmxvYXQ0IGZvbzkoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9h
dD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgaW50
IG9mZnNldFgsIGludCBvZmZzZXRZKSB7CiAgICAgICAgICAgICByZXR1cm4gR2F0aGVyKHRleHR1
cmUsIHMsIGZsb2F0Myh4LCB5LCBsYXllciksIGludDIob2Zmc2V0WCwgb2Zmc2V0WSkpOwogICAg
ICAgICB9Ci0gICAgICAgIGZsb2F0NCBmb28xMChUZXh0dXJlRGVwdGhDdWJlPGZsb2F0PiB0ZXh0
dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKKyAgICAgICAgdGVz
dCBmbG9hdDQgZm9vMTAoVGV4dHVyZURlcHRoQ3ViZTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7CiAgICAgICAgICAgICByZXR1cm4gR2F0aGVy
KHRleHR1cmUsIHMsIGZsb2F0Myh4LCB5LCB6KSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQ0
IGZvbzExKFRleHR1cmVEZXB0aDJEPGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IGNvbXBhcmVWYWx1ZSkgeworICAgICAgICB0ZXN0IGZsb2F0NCBmb28x
MShUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCBjb21wYXJlVmFsdWUpIHsKICAgICAgICAgICAgIHJldHVybiBHYXRoZXJDbXAo
dGV4dHVyZSwgcywgZmxvYXQyKHgsIHkpLCBjb21wYXJlVmFsdWUpOwogICAgICAgICB9Ci0gICAg
ICAgIGZsb2F0NCBmb28xMihUZXh0dXJlRGVwdGgyRDxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBjb21wYXJlVmFsdWUsIGludCBvZmZzZXRYLCBpbnQg
b2Zmc2V0WSkgeworICAgICAgICB0ZXN0IGZsb2F0NCBmb28xMihUZXh0dXJlRGVwdGgyRDxmbG9h
dD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBjb21wYXJlVmFs
dWUsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSkgewogICAgICAgICAgICAgcmV0dXJuIEdhdGhl
ckNtcCh0ZXh0dXJlLCBzLCBmbG9hdDIoeCwgeSksIGNvbXBhcmVWYWx1ZSwgaW50MihvZmZzZXRY
LCBvZmZzZXRZKSk7CiAgICAgICAgIH0KLSAgICAgICAgZmxvYXQ0IGZvbzEzKFRleHR1cmVEZXB0
aDJEQXJyYXk8ZmxvYXQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgbGF5ZXIsIGZsb2F0IGNvbXBhcmVWYWx1ZSkgeworICAgICAgICB0ZXN0IGZsb2F0NCBmb28x
MyhUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IGxheWVyLCBmbG9hdCBjb21wYXJlVmFsdWUpIHsKICAgICAgICAgICAg
IHJldHVybiBHYXRoZXJDbXAodGV4dHVyZSwgcywgZmxvYXQzKHgsIHksIGxheWVyKSwgY29tcGFy
ZVZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBmbG9hdDQgZm9vMTQoVGV4dHVyZURlcHRoMkRB
cnJheTxmbG9hdD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBs
YXllciwgZmxvYXQgY29tcGFyZVZhbHVlLCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFkpIHsKKyAg
ICAgICAgdGVzdCBmbG9hdDQgZm9vMTQoVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD4gdGV4dHVy
ZSwgc2FtcGxlciBzLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBsYXllciwgZmxvYXQgY29tcGFy
ZVZhbHVlLCBpbnQgb2Zmc2V0WCwgaW50IG9mZnNldFkpIHsKICAgICAgICAgICAgIHJldHVybiBH
YXRoZXJDbXAodGV4dHVyZSwgcywgZmxvYXQzKHgsIHksIGxheWVyKSwgY29tcGFyZVZhbHVlLCBp
bnQyKG9mZnNldFgsIG9mZnNldFkpKTsKICAgICAgICAgfQogICAgIGApOwpAQCAtNzYwOSwxMSAr
NzgwNywxMiBAQCB0ZXN0cy50ZXh0dXJlR2F0aGVyID0gZnVuY3Rpb24oKSB7CiAgICAgLy8gRklY
TUU6IEdhdGhlciBvdGhlciBjb21wb25lbnRzCiB9CiAKKwogdGVzdHMuY29tbWVudFBhcnNpbmcg
PSBmdW5jdGlvbigpIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCiAgICAgICAgIC8qIHRo
aXMgY29tbWVudAogICAgICAgICBydW5zIG92ZXIgbXVsdGlwbGUgbGluZXMgKi8KLSAgICAgICAg
Ym9vbCBmb28oKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHRlc3QgYm9vbCBmb28oKSB7IHJl
dHVybiB0cnVlOyB9CiAgICAgYCk7CiAgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10pLCB0cnVlKTsKIApAQCAtNzYyOCw3ICs3ODI3LDcgQEAgdGVz
dHMuY29tbWVudFBhcnNpbmcgPSBmdW5jdGlvbigpIHsKIAogdGVzdHMuY2FsbEFyZ3VtZW50c0Fy
ZUNvcGllZEltbWVkaWF0ZWx5QWZ0ZXJFdmFsdWF0aW9uID0gKCkgPT4gewogICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKLSAgICAgICAgaW50IGZvbygpCisgICAgICAgIHRlc3QgaW50IGZvbygp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqYmFyKDUpICsgKmJhcig3KTsKICAgICAg
ICAgfQpAQCAtNzY0MywxNSArNzg0MiwxODMgQEAgdGVzdHMuY2FsbEFyZ3VtZW50c0FyZUNvcGll
ZEltbWVkaWF0ZWx5QWZ0ZXJFdmFsdWF0aW9uID0gKCkgPT4gewogICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxMik7CiB9OwogCit0ZXN0cy5l
dmFsdWF0aW9uT3JkZXJGb3JBcmd1bWVudHMgPSAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZvbygpIHsgcmV0dXJuICpiYXIoMTApICsgKmJh
cigyMCk7IH0KKyAgICAgICAgCisgICAgICAgIHRocmVhZCBpbnQqIGJhcihpbnQgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGludCB4ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4g
Jng7CisgICAgICAgIH0KKworICAgICAgICB0ZXN0IGludCBiYXooKSB7IHJldHVybiBwbHVzKGJh
cigxMCksIGJhcigyMCkpOyB9CisKKyAgICAgICAgaW50IHBsdXModGhyZWFkIGludCogeCwgdGhy
ZWFkIGludCogeSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICp4ICsgKnk7CisgICAg
ICAgIH0KKyAgICBgKTsKKworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCAzMCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJiYXoiLCBbXSksIDIwKTsKK30KKwordGVzdHMuTkVXX3JldHVyblJlZmVyZW5j
ZVRvUGFyYW1ldGVyID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAg
ICAgdGVzdCBpbnQgZm9vKGJvb2wgY29uZGl0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKmJhcihjb25kaXRpb24sIDEsIDIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB0aHJlYWQgaW50KiBiYXIoYm9vbCBjb25kaXRpb24sIGludCBhLCBpbnQgYikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/ICZhIDogJmI7CisgICAgICAgIH0KKyAg
ICBgKTsKKyAgICAKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFsgbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSkgXSksIDEpOworICAgIGNoZWNrSW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgWyBtYWtlQm9vbChwcm9ncmFtLCBm
YWxzZSkgXSksIDIpOworfQorCit0ZXN0cy5ORVdfcmV0dXJuUmVmZXJlbmNlVG9QYXJhbWV0ZXJX
aXRoRGlmZmVyZW50RnVuY3Rpb25zID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVw
KGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkgCisgICAgICAgIHsgCisgICAgICAgICAgICByZXR1
cm4gKmJhcigxMCkgKyAqYmF6KDIwKTsgCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRo
cmVhZCBpbnQqIGJhcihpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZ4Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aHJlYWQgaW50KiBiYXooaW50IHkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmeTsKKyAgICAgICAgfSAKKyAgICBgKTsKKyAgICAK
KyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwg
MzApOworfQorCit0ZXN0cy5ORVdfcmV0dXJuUmVmZXJlbmNlVG9TYW1lUGFyYW1ldGVyID0gKCkg
PT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBsdXMoYmFyKDUpLCBiYXIoNykpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgcGx1cyh0aHJlYWQgaW50KiB4LCB0aHJlYWQg
aW50KiB5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnggKyAqeTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICAKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMTApOworfQor
Cit0ZXN0cy5ORVdfcmV0dXJuUmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlID0gKCkgPT4geworICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICpiYXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdGhyZWFkIGludCogYmFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGEgPSA0MjsK
KyAgICAgICAgICAgIHJldHVybiAmYTsKKyAgICAgICAgfSAgICAgICAgCisgICAgYCk7CisgICAg
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSks
IDQyKTsKK30KKwordGVzdHMuTkVXX3JldHVyblJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZVdpdGhO
ZXN0aW5nID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVz
dCBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpiYXIoKSArICpiYXoo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhyZWFkIGludCogYmFyKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IGEgPSAyMDsKKyAgICAgICAgICAgIHJldHVybiAmYTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhyZWFkIGludCogYmF6KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IGEgPSAyMjsKKyAgICAgICAgICAgIHJldHVybiAmYTsKKyAgICAgICAg
fQorICAgIGApOworICAgIAorICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9CisKK3Rlc3RzLk5FV19jb252ZXJ0UHRyVG9BcnJheVJl
ZiA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50
IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIoKVswXTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdGhyZWFkIGludFtdIGJhcigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludCB4ID0gNDI7CisgICAgICAgICAgICByZXR1cm4gQCgmeCk7CisgICAgICAgIH0K
KyAgICBgKTsKKyAgICAgICAgCisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSksIDQyKTsKK30KKwordGVzdHMuTkVXX2NvbnZlcnRMb2NhbFZhcmlh
YmxlVG9BcnJheVJlZiA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAg
ICAgIHRlc3QgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIoKVsw
XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhyZWFkIGludFtdIGJhcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCB4ID0gNDI7CisgICAgICAgICAgICByZXR1cm4gQHg7Cisg
ICAgICAgIH0KKyAgICBgKTsKKyAgICAgICAgCisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKK30KKwordGVzdHMuTkVXX3JlZmVyZW5j
ZVRha2VuVG9Mb2NhbFZhcmlhYmxlSW5FbnRyeVBvaW50U2hvdWxkbnRNb3ZlQW55dGhpbmcgPSAo
KSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0IGludCBmb28o
KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDQyOworICAgICAgICAgICAgdGhyZWFk
IGludCogYiA9ICZhOworICAgICAgICAgICAgcmV0dXJuICpiOworICAgICAgICB9CisgICAgYCk7
CisgICAgCisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSksIDQyKTsKK307CisKIG9rVG9UZXN0ID0gdHJ1ZTsKIAotbGV0IHRlc3RGaWx0ZXIgPSAv
LiovOyAvLyBydW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CitsZXQgZ2xvYmFsVGVzdEZpbHRlciA9
IC8uKi87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1bHQKIGxldCB0ZXN0RXhjbHVzaW9uRmls
dGVyID0gL15ESVNBQkxFRF8vOwogaWYgKHRoaXNbImFyZ3VtZW50cyJdKSB7CiAgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgc3dpdGNoIChh
cmd1bWVudHNbMF0pIHsKICAgICAgICAgY2FzZSAiLS1maWx0ZXIiOgotICAgICAgICAgICAgdGVz
dEZpbHRlciA9IG5ldyBSZWdFeHAoYXJndW1lbnRzWysraV0pOworICAgICAgICAgICAgZ2xvYmFs
VGVzdEZpbHRlciA9IG5ldyBSZWdFeHAoYXJndW1lbnRzWysraV0pOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25v
d24gYXJndW1lbnQ6ICIsIGFyZ3VtZW50c1tpXSk7CkBAIC03NjY5LDggKzgwMzYsNyBAQCBmdW5j
dGlvbiogZG9UZXN0KHRlc3RGaWx0ZXIpCiAgICAgY29uc3QgY29tcGlsZUJlZm9yZSA9IHByZWNp
c2VUaW1lKCk7CiAgICAgeWllbGQ7CiAgICAgcHJlcGFyZSgpOwotICAgIGNvbnN0IGNvbXBpbGVB
ZnRlciA9IHByZWNpc2VUaW1lKCk7Ci0gICAgcHJpbnQoYCAgICBPSywgdG9vayAke01hdGgucm91
bmQoKGNvbXBpbGVBZnRlciAtIGNvbXBpbGVCZWZvcmUpICogMTAwMCl9IG1zYCk7CisgICAgcHJp
bnQoIiAgICBPSyEiKTsKIAogICAgIGxldCBuYW1lcyA9IFtdOwogICAgIGZvciAobGV0IHMgaW4g
dGVzdHMpCkBAIC03Njk5LDYgKzgwNjUsNiBAQCBmdW5jdGlvbiogZG9UZXN0KHRlc3RGaWx0ZXIp
CiAKIGlmICghdGhpcy53aW5kb3cpIHsKICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBJbmZp
bml0eTsKLSAgICBmb3IgKGxldCBfIG9mIGRvVGVzdCh0ZXN0RmlsdGVyKSkgeyB9CisgICAgZm9y
IChsZXQgXyBvZiBkb1Rlc3QoKSkgeyB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlRGVjbC5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1ZhcmlhYmxlRGVjbC5qcwppbmRleCA3NjhmOGJhYWFkM2I4MmQ0YzM1MTdlYjcxYjJi
ZWE0OWE3ZWVkODFkLi4zZDIxNzQ2MjQ4MTYyNmJmNWJlYmYwMTUyMjM4MDYzYTk2YzI5MWY2IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZURlY2wuanMK
KysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVEZWNsLmpzCkBAIC0z
Miw2ICszMiw3IEBAIGNsYXNzIFZhcmlhYmxlRGVjbCBleHRlbmRzIFZhbHVlIHsKICAgICAgICAg
dGhpcy5fbmFtZSA9IG5hbWU7CiAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlOwogICAgICAgICB0
aGlzLl9pbml0aWFsaXplciA9IGluaXRpYWxpemVyOworICAgICAgICB0aGlzLl9pc0FkZHJlc3NU
YWtlbiA9IGZhbHNlOwogICAgIH0KICAgICAKICAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhp
cy5fb3JpZ2luOyB9CkBAIC00MCw2ICs0MSwxNiBAQCBjbGFzcyBWYXJpYWJsZURlY2wgZXh0ZW5k
cyBWYWx1ZSB7CiAgICAgZ2V0IGluaXRpYWxpemVyKCkgeyByZXR1cm4gdGhpcy5faW5pdGlhbGl6
ZXI7IH0KICAgICBnZXQgdmFySXNMVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgCisgICAg
Z2V0IGlzQWRkcmVzc1Rha2VuKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pc0FkZHJl
c3NUYWtlbjsKKyAgICB9CisgICAgCisgICAgc2V0IGlzQWRkcmVzc1Rha2VuKG5ld1ZhbHVlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5faXNBZGRyZXNzVGFrZW4gPSBuZXdWYWx1ZTsKKyAgICB9Cisg
ICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMudHlwZSArICIg
IiArIHRoaXMubmFtZSArICh0aGlzLmluaXRpYWxpemVyID8gIiA9ICIgKyB0aGlzLmluaXRpYWxp
emVyIDogIiIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5k
ZXguaHRtbCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKaW5kZXgg
ZGZjOTBjNGMyMzk0Mzk1NDU4ODY1YzRhOGQ2NTQ4Njg3MGMyNjIzNC4uMjQ0MTVmMzNhMTcwOWIy
ZTBlNmQ1YmVjZTY3YWE4OTUzMDZiODliZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvaW5kZXguaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9pbmRleC5odG1sCkBAIC03OSw2ICs3OSw3IEBACiA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbC5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkludHJpbnNpY3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkxhdGVD
aGVja0FuZExheW91dEJ1ZmZlcnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxhdGVDaGVj
a2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMZXhlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iTGV4ZXJUb2tlbi5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>349372</attachid>
            <date>2018-09-10 20:16:11 -0700</date>
            <delta_ts>2018-09-19 00:24:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188402-20180910201610.patch</filename>
            <type>text/plain</type>
            <size>28973</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NzUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmFiM2RhYzk3NDY5OTExNjAxNzY5ZTA3ZTBjOGVlMzU5
YjYyN2NhOC4uNTljZjZiMmI4NjAyZThjNWEyZTI2YWE4Njg3ZWI1MTI1Mjg4YzBiYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDE4LTA5LTEwICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dITFNMXSBMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2Nh
dGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBh
ZGRpdGlvbmFsIHByZXBhcmF0aW9uIHN0YWdlIGlzIG5vdyBwZXJmb3JtZWQgc28gdGhhdCBhbGwg
bG9jYWwKKyAgICAgICAgdmFyaWFibGVzIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZSBhbGxv
Y2F0ZWQgaW4gYSBzaW5nbGUgc3RydWN0IGF0CisgICAgICAgIGVudHJ5IHBvaW50cy4gQSBwb2lu
dGVyIHRvIHRoaXMgc3RydWN0IGlzIHRoZW4gcGFzc2VkIGZvciBmdW5jdGlvbgorICAgICAgICBj
YWxscy4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qczogVXBkYXRl
IGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGxvY2F0
ZUF0RW50cnlQb2ludHMuanM6IEFkZGVkIG5ldyBzdGFnZS4KKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9u
LnByb3RvdHlwZS5zZXQgYXJndW1lbnRMaXN0KTogQWRkIHNldHRlciBiZWNhdXNlCisgICAgICAg
IGFsbG9jYXRlQXRFbnRyeVBvaW50cyBuZWVkcyB0byBjaGFuZ2UgdGhpcy4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qczogUmVtb3ZlIGEgcmVkdW5k
YW50CisgICAgICAgIGNvbnN0cnVjdG9yIHRoYXQgd2Fzbid0IHVzZWQgYW55d2hlcmUuCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMucHJv
dG90eXBlLnNldCBwYXJhbWV0ZXJzKTogQWRkIHNldHRlci4KKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzOgorICAgICAgICAoRnVuY0RlZi5wcm90b3R5cGUuc2V0
IGJvZHkpOiBEaXR0by4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJl
LmpzOgorICAgICAgICAobGV0LnByZXBhcmUpOiBBZGQgY2FsbCB0byBhbGxvY2F0ZUF0RW50cnlQ
b2ludHMuIFRoaXMgY2FsbCBjYW5ub3QKKyAgICAgICAgaGFwcGVuIGFueSBlYXJsaWVyIGJlY2F1
c2UgaXQgZGVwZW5kcyBvbiBoYXZpbmcgdHlwZXMgZm9yIGNhbGwKKyAgICAgICAgYXJndW1lbnRz
LiBJdCBjb3VsZCBoYXBwZW4gYXQgYW55IGxhdGVyIHBvaW50LCBidXQgaXQgaXMgdXNlZnVsIHRv
CisgICAgICAgIGFwcGx5IHRoZSByZW1haW5pbmcgY2hlY2tzIChwYXJ0aWN1bGFybHkgdGhvc2Ug
aW4gQ2hlY2tlcikgdG8gdGhlCisgICAgICAgIHRyYW5zZm9ybWVkIHByb2dyYW0uCisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdyaXRl
ci5wcm90b3R5cGUudmlzaXRSZXR1cm4pOiBSZXNvbHZlIGlzc3VlIHdoZXJlIHRoZSByZXR1cm4K
KyAgICAgICAgc3RhdGVtZW50J3MgZnVuY3Rpb24gd2Fzbid0IGNvcGllZC4gQSBudWxsIGNoZWNr
IGlzIHJlcXVpcmVkIGFzIHRoZQorICAgICAgICBSZXdyaXRlciBtaWdodCBiZSB1c2VkIGJlZm9y
ZSB0aGlzIHByb3BlcnR5IGlzIHNldC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TUElSVi5odG1sOiBVcGRhdGUgZGVwZW5kZW5jaWVzLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanM6IEFic3RyYWN0ZWQgbG9n
aWMKKyAgICAgICAgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoYXQgYWxsb2NhdGVBdEVu
dHJ5UG9pbnRzIGNhbiBjcmVhdGUgdGhlCisgICAgICAgIGFjY2Vzc29ycyBmb3IgdGhlIHN0cnVj
dCB0eXBlIGl0IGludHJvZHVjZXMuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VGVzdC5odG1sOiBVcGRhdGUgZGVwZW5kZW5jaWVzLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuanM6IEFkZCBuZXcgdGVzdHMgdG8gdmVyaWZ5IHRoZSBzdGF0aWMKKyAg
ICAgICAgYWxsb2NhdGlvbiB0cmFuc2Zvcm0gd29ya3Mgc2FmZWx5LgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWw6IFVwZGF0ZSBkZXBlbmRlbmNpZXMuCisKIDIw
MTgtMDktMTAgIFRob21hcyBEZW5uZXkgIDx0ZGVubmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBb
V0hMU0xdIElubGluaW5nIHNob3VsZCBiZSBvcHRpb25hbApkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQWxsLmpzCmluZGV4IDNjMmM0ODc0MjAwMTExNWExNzEzNDgzYTFmMjNjZTI4NjY4YmI5YzYu
LmUyOTEwZDc5ZDZjMjM1OWI3NjMxNjE5ODAzMTZhZmYwOTQyMjcwZjMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9BbGwuanMKQEAgLTM3LDYgKzM3LDcgQEAgbG9hZCgiUHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlLmpzIik7CiAKIGxvYWQoIkFkZHJl
c3NTcGFjZS5qcyIpOworbG9hZCgiQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzIik7CiBsb2FkKCJB
bm9ueW1vdXNWYXJpYWJsZS5qcyIpOwogbG9hZCgiQXJyYXlSZWZUeXBlLmpzIik7CiBsb2FkKCJB
cnJheVR5cGUuanMiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNTVmMDg2NTI2MTNiNjU0Y2Mw
M2EzMGNmZjViYzY3NWE1NmIxYjUyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzCkBAIC0wLDAgKzEsMjE3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKworICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisidXNlIHN0cmljdCI7
CisKK2Z1bmN0aW9uIGFsbG9jYXRlQXRFbnRyeVBvaW50cyhwcm9ncmFtKQoreworICAgIGNvbnN0
IGVudHJ5UG9pbnRzID0gW107CisgICAgY2xhc3MgT25seVZpc2l0RnVuY0RlZnNUaGF0QXJlRW50
cnlQb2ludHMgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgdmlzaXRGdW5jRGVmKG5vZGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzRW50cnlQb2ludCkKKyAgICAgICAgICAg
ICAgICBlbnRyeVBvaW50cy5wdXNoKG5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIHByb2dy
YW0udmlzaXQobmV3IE9ubHlWaXNpdEZ1bmNEZWZzVGhhdEFyZUVudHJ5UG9pbnRzKCkpOworCisg
ICAgY29uc3QgYWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJhbWV0ZXJzID0gbmV3IFNldCgpOwor
ICAgIGNsYXNzIEZpbmRBbGxWYXJpYWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMgZXh0ZW5kcyBW
aXNpdG9yIHsKKyAgICAgICAgY29uc3RydWN0b3IoY3VycmVudEZ1bmMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN1cGVyKCk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50RnVuYyA9IGN1cnJl
bnRGdW5jOworICAgICAgICB9CisKKyAgICAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQor
ICAgICAgICB7CisgICAgICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOwor
ICAgICAgICAgICAgaWYgKG5vZGUuZnVuYyBpbnN0YW5jZW9mIEZ1bmNEZWYpCisgICAgICAgICAg
ICAgICAgbm9kZS5mdW5jLnZpc2l0KG5ldyBGaW5kQWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJh
bWV0ZXJzKG5vZGUuZnVuYykpOworICAgICAgICB9CisKKyAgICAgICAgdmlzaXRWYXJpYWJsZURl
Y2wobm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgbm9kZS5fZnVuYyA9IHRoaXMuX2N1cnJl
bnRGdW5jOworICAgICAgICAgICAgYWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJhbWV0ZXJzLmFk
ZChub2RlKTsKKyAgICAgICAgICAgIHN1cGVyLnZpc2l0VmFyaWFibGVEZWNsKG5vZGUpOworICAg
ICAgICB9CisKKyAgICAgICAgdmlzaXRGdW5jUGFyYW1ldGVyKG5vZGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG5vZGUuX2Z1bmMgPSB0aGlzLl9jdXJyZW50RnVuYzsKKyAgICAgICAgICAgIGlm
ICghdGhpcy5fY3VycmVudEZ1bmMuaXNFbnRyeVBvaW50KQorICAgICAgICAgICAgICAgIGFsbFZh
cmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycy5hZGQobm9kZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKGxldCBlbnRyeVBvaW50IG9mIGVudHJ5UG9pbnRzKQorICAgICAgICBlbnRy
eVBvaW50LnZpc2l0KG5ldyBGaW5kQWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJhbWV0ZXJzKGVu
dHJ5UG9pbnQpKTsKKworICAgIGlmICghYWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJhbWV0ZXJz
LnNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGdsb2JhbFN0cnVjdFR5cGUgPSBu
ZXcgU3RydWN0VHlwZShlbnRyeVBvaW50c1swXS5vcmlnaW4sIG51bGwpOworICAgIHByb2dyYW0u
YWRkKGdsb2JhbFN0cnVjdFR5cGUpOworICAgIC8vIENoZWNrZXIgcmVxdWlyZXMgdGhhdCB0eXBl
cyB0aGF0IGFwcGVhciBpbiB0aGUgcHJvZ3JhbSBhcmUgd3JhcHBlZCBpbiBUeXBlUmVmcy4KKyAg
ICBjb25zdCBnbG9iYWxTdHJ1Y3RUeXBlUmVmID0gVHlwZVJlZi53cmFwKGdsb2JhbFN0cnVjdFR5
cGUpOworICAgIGNvbnN0IHB0clRvR2xvYmFsU3RydWN0VHlwZSA9IG5ldyBQdHJUeXBlKGVudHJ5
UG9pbnRzWzBdLm9yaWdpbiwgInRocmVhZCIsIGdsb2JhbFN0cnVjdFR5cGVSZWYpOworICAgIHBy
b2dyYW0uYWRkKHB0clRvR2xvYmFsU3RydWN0VHlwZSk7CisgICAgY29uc3QgcHRyVG9HbG9iYWxT
dHJ1Y3RUeXBlUmVmID0gVHlwZVJlZi53cmFwKHB0clRvR2xvYmFsU3RydWN0VHlwZSk7CisKKyAg
ICBsZXQgY291bnRlciA9IDA7CisgICAgY29uc3QgdmFyVG9GaWVsZE1hcCA9IG5ldyBNYXAoKTsK
KyAgICBmb3IgKGxldCB2YXJPclBhcmFtIG9mIGFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1l
dGVycykgeworICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBgZmllbGQke2NvdW50ZXIrK31fJHt2
YXJPclBhcmFtLl9mdW5jLm5hbWV9XyR7dmFyT3JQYXJhbS5uYW1lfWA7CisgICAgICAgIGdsb2Jh
bFN0cnVjdFR5cGUuYWRkKG5ldyBGaWVsZCh2YXJPclBhcmFtLm9yaWdpbiwgZmllbGROYW1lLCB2
YXJPclBhcmFtLnR5cGUpKTsKKyAgICAgICAgdmFyVG9GaWVsZE1hcC5zZXQodmFyT3JQYXJhbSwg
ZmllbGROYW1lKTsKKyAgICB9CisKKyAgICAvLyBBbGwgb3RoZXIgc3RydWN0IGFjY2Vzc29ycyB3
aWxsIGhhdmUgYmVlbiBzeW50aGVzaXplZCBhdCB0aGlzIHBvaW50ICh0aGV5IGhhdmUgdG8gYmUg
c3ludGhlc2l6ZWQgZWFybGllciBmb3IgY2FsbCByZXNvbHV0aW9uKS4KKyAgICBzeW50aGVzaXpl
U3RydWN0QWNjZXNzb3JzRm9yU3RydWN0VHlwZShwcm9ncmFtLCBnbG9iYWxTdHJ1Y3RUeXBlKTsK
KworICAgIGNvbnN0IHZpc2l0ZWRGdW5jdGlvblNldCA9IG5ldyBTZXQoKTsKKworICAgIGZ1bmN0
aW9uIHVwZGF0ZUZ1bmN0aW9uKGZ1bmMpCisgICAgeworICAgICAgICBjbGFzcyBVcGRhdGVGdW5j
dGlvbnMgZXh0ZW5kcyBSZXdyaXRlciB7CisgICAgICAgICAgICBjb25zdHJ1Y3RvcihmdW5jKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAgICAgICAgICAg
dGhpcy5fZnVuYyA9IGZ1bmM7CisgICAgICAgICAgICAgICAgdmlzaXRlZEZ1bmN0aW9uU2V0LmFk
ZCh0aGlzLmZ1bmMpOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmZ1bmMuaXNFbnRyeVBvaW50
KQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRWYXJpYWJsZURlY2xhcmF0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWNvbmZpZ3Vy
ZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgICAgICB0aGlzLmZ1bmMuYm9keSA9IHRoaXMuZnVu
Yy5fYm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgX2FkZFZh
cmlhYmxlRGVjbGFyYXRpb24oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMu
X3ZhcmlhYmxlRGVjbCA9IG5ldyBWYXJpYWJsZURlY2wodGhpcy5mdW5jLm9yaWdpbiwgbnVsbCwg
Z2xvYmFsU3RydWN0VHlwZVJlZiwgbnVsbCk7CisgICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFi
bGVSZWYgPSBuZXcgTWFrZVB0ckV4cHJlc3Npb24odGhpcy5mdW5jLm9yaWdpbiwgVmFyaWFibGVS
ZWYud3JhcCh0aGlzLnZhcmlhYmxlRGVjbCkpOworICAgICAgICAgICAgICAgIHRoaXMuZnVuYy5i
b2R5LnN0YXRlbWVudHMudW5zaGlmdCh0aGlzLnZhcmlhYmxlRGVjbCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIF9yZWNvbmZpZ3VyZVBhcmFtZXRlcnMoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNQYXJhbSA9IG5ldyBGdW5jUGFyYW1ldGVyKHRoaXMu
ZnVuYy5vcmlnaW4sIG51bGwsIHB0clRvR2xvYmFsU3RydWN0VHlwZVJlZik7CisgICAgICAgICAg
ICAgICAgdGhpcy5fdmFyaWFibGVSZWYgPSBWYXJpYWJsZVJlZi53cmFwKGZ1bmNQYXJhbSk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5mdW5jLl9uZXdQYXJhbWV0ZXJzID0gWyBmdW5jUGFyYW0gXTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2V0IGZ1bmMoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mdW5jOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnZXQgdmFyaWFibGVEZWNsKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fdmFyaWFibGVEZWNsOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnZXQgZ2xvYmFsU3RydWN0VmFyaWFibGVSZWYoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl92YXJpYWJsZVJlZjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgX2NhbGxFeHByZXNzaW9uRm9yVmFyaWFibGUobm9kZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSB2YXJUb0ZpZWxkTWFwLmdldChub2RlKTsK
KyAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgb3BlcmF0b3ImLiR7ZmllbGRO
YW1lfWA7CisgICAgICAgICAgICAgICAgY29uc3QgcG9zc2libGVBbmRPdmVybG9hZHMgPSBwcm9n
cmFtLmdsb2JhbE5hbWVDb250ZXh0LmdldChGdW5jLCBmdW5jdGlvbk5hbWUpOworICAgICAgICAg
ICAgICAgIGNvbnN0IGNhbGxFeHByZXNzaW9uUmVzb2x1dGlvbiA9IENhbGxFeHByZXNzaW9uLnJl
c29sdmUobm9kZS5vcmlnaW4sIHBvc3NpYmxlQW5kT3ZlcmxvYWRzLCBmdW5jdGlvbk5hbWUsIFsg
dGhpcy5nbG9iYWxTdHJ1Y3RWYXJpYWJsZVJlZiBdLCBbIHB0clRvR2xvYmFsU3RydWN0VHlwZVJl
ZiBdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FsbEV4cHJlc3Npb25SZXNvbHV0aW9uLmNh
bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIF9kZXJlZmVyZW5jZWRDYWxsRXhwcmVz
c2lvbkZvclZhcmlhYmxlKG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIHRoaXMuX2NhbGxFeHBy
ZXNzaW9uRm9yVmFyaWFibGUobm9kZSksIG5vZGUudHlwZSwgInRocmVhZCIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKCF2YXJUb0ZpZWxkTWFwLmhhcyhub2RlLnZhcmlhYmxlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0VmFyaWFibGVSZWYobm9kZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlcmVmZXJlbmNlZENhbGxFeHByZXNzaW9u
Rm9yVmFyaWFibGUobm9kZS52YXJpYWJsZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZpc2l0VmFyaWFibGVEZWNsKG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUuaW5pdGlhbGl6ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXNz
aWdubWVudChub2RlLm9yaWdpbiwgdGhpcy5fZGVyZWZlcmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JW
YXJpYWJsZShub2RlKSwgbm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKSwgbm9kZS50eXBlKTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlID09IHRoaXMudmFyaWFibGVEZWNsKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IEJsb2NrKG5vZGUub3JpZ2luKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlzaXRN
YWtlUHRyRXhwcmVzc2lvbihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChub2RlLmxWYWx1ZSBpbnN0YW5jZW9mIFZhcmlhYmxlUmVmICYmIHZhclRvRmllbGRNYXAuaGFz
KG5vZGUubFZhbHVlLnZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2NhbGxFeHByZXNzaW9uRm9yVmFyaWFibGUobm9kZS5sVmFsdWUudmFyaWFibGUpOworICAgICAg
ICAgICAgICAgIHJldHVybiBzdXBlci52aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZSA9IHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Np
b24obm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZnVuYyBpbnN0YW5jZW9mIEZ1bmNE
ZWYpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlRnVuY3Rpb24obm9kZS5mdW5jKTsKKwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBhbm9ueW1vdXNWYXJpYWJsZXMgPSBbXTsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZXZhbHVhdGlvbkV4cHJlc3Npb25zID0gW107CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNvcHlFeHByZXNzaW9ucyA9IFtdOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKGxldCBpID0gbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoOyBpLS07KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gbm9kZS5mdW5jLnBhcmFtZXRlcnNbaV0u
dHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFub255bW91c1ZhcmlhYmxlID0g
bmV3IEFub255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCB0eXBlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFub255bW91c1ZhcmlhYmxlcy5wdXNoKGFub255bW91c1ZhcmlhYmxlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb25FeHByZXNzaW9ucy5wdXNoKG5ldyBBc3Np
Z25tZW50KG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKGFub255bW91c1ZhcmlhYmxlKSwg
bm9kZS5hcmd1bWVudExpc3RbaV0sIHR5cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
cHlFeHByZXNzaW9ucy5wdXNoKG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCB0aGlzLl9kZXJl
ZmVyZW5jZWRDYWxsRXhwcmVzc2lvbkZvclZhcmlhYmxlKG5vZGUuZnVuYy5wYXJhbWV0ZXJzW2ld
KSwgVmFyaWFibGVSZWYud3JhcChhbm9ueW1vdXNWYXJpYWJsZSksIHR5cGUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0ID0g
WyB0aGlzLmdsb2JhbFN0cnVjdFZhcmlhYmxlUmVmIF07CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBhbm9ueW1vdXNWYXJpYWJsZXMu
Y29uY2F0KGV2YWx1YXRpb25FeHByZXNzaW9ucywgY29weUV4cHJlc3Npb25zLCBbIG5vZGUgXSkp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2aXNpdGVkRnVuY3Rpb25TZXQu
aGFzKGZ1bmMpKQorICAgICAgICAgICAgbmV3IFVwZGF0ZUZ1bmN0aW9ucyhmdW5jKTsKKyAgICB9
CisKKyAgICBmb3IgKGxldCBlbnRyeVBvaW50IG9mIGVudHJ5UG9pbnRzKQorICAgICAgICB1cGRh
dGVGdW5jdGlvbihlbnRyeVBvaW50KTsKKworICAgIGNsYXNzIFVwZGF0ZVBhcmFtcyBleHRlbmRz
IFZpc2l0b3IgeworICAgICAgICB2aXNpdEZ1bmNEZWYobm9kZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG5vZGUuX25ld1BhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgbm9kZS5wYXJh
bWV0ZXJzID0gbm9kZS5fbmV3UGFyYW1ldGVyczsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcm9n
cmFtLnZpc2l0KG5ldyBVcGRhdGVQYXJhbXMoKSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCmluZGV4IDVmYmRkNTA1Zjc5ZDRiMzI2ZTA5
M2UwZmI3NmNkMzc1ZDBhMmM1YmEuLjRlNGQ2NWYwOTEzODA0ZjRkMGU3MGMwMDJiZjYzMTQwNjBi
MGVlMmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHBy
ZXNzaW9uLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNz
aW9uLmpzCkBAIC0zNiw3ICszNiwxNCBAQCBjbGFzcyBDYWxsRXhwcmVzc2lvbiBleHRlbmRzIEV4
cHJlc3Npb24gewogICAgIH0KICAgICAKICAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25h
bWU7IH0KKwogICAgIGdldCBhcmd1bWVudExpc3QoKSB7IHJldHVybiB0aGlzLl9hcmd1bWVudExp
c3Q7IH0KKworICAgIHNldCBhcmd1bWVudExpc3QobmV3VmFsdWUpCisgICAgeworICAgICAgICB0
aGlzLl9hcmd1bWVudExpc3QgPSBuZXdWYWx1ZTsKKyAgICB9CisKICAgICBnZXQgaXNDYXN0KCkg
eyByZXR1cm4gdGhpcy5faXNDYXN0OyB9CiAgICAgZ2V0IHJldHVyblR5cGUoKSB7IHJldHVybiB0
aGlzLl9yZXR1cm5UeXBlOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0VCdWZmZXJCdWlsZGVyLmpzCmluZGV4IGEzYmVlMWZhMjQ3NWQxZjU2YjMwNWY1NmQ4ZGIz
MzZlYThhNGE3MTcuLmE3ZjM2MTZkOWExZjVjMTcwNjRjNjFiNzY4NGYyNDI4ZmIxMTY3NWIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpz
CisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCkBA
IC0yNSwxMiArMjUsNiBAQAogInVzZSBzdHJpY3QiOwogCiBjbGFzcyBFQnVmZmVyQnVpbGRlciBl
eHRlbmRzIFZpc2l0b3IgewotICAgIGNvbnN0cnVjdG9yKHByb2dyYW0pCi0gICAgewotICAgICAg
ICBzdXBlcigpOwotICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTsKLSAgICB9Ci0gICAg
CiAgICAgX2NyZWF0ZUVQdHIodHlwZSkKICAgICB7CiAgICAgICAgIGlmICh0eXBlLnNpemUgPT0g
bnVsbCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCmluZGV4IGNiYzJjMzMzZjY2
NmY2ODdjMDdkMzNkYzAxODhjYzk4NDZhM2Y2ZDIuLjRmNTg5MDYwN2IxYTI5MTcxODIzNGFmYTNk
NmUwNjZmMWQ5OTA1ZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Z1bmMuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwpAQCAt
NTQsNiArNTQsMTEgQEAgY2xhc3MgRnVuYyBleHRlbmRzIE5vZGUgewogICAgIGdldCBpc0VudHJ5
UG9pbnQoKSB7IHJldHVybiB0aGlzLnNoYWRlclR5cGUgIT0gbnVsbDsgfQogICAgIGdldCByZXR1
cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKCkgeyByZXR1cm4gdGhpcy5pc0Nhc3QgPyB0aGlz
LnJldHVyblR5cGUgOiBudWxsOyB9CiAgICAgCisgICAgc2V0IHBhcmFtZXRlcnMobmV3VmFsdWUp
CisgICAgeworICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gbmV3VmFsdWU7CisgICAgfQorCiAg
ICAgZ2V0IGtpbmQoKSB7IHJldHVybiBGdW5jOyB9CiAgICAgCiAgICAgdG9EZWNsU3RyaW5nKCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCmluZGV4IGQ2OGU0MDMwZTU5
YTU3MTE4MmM2MDRiM2UyYmQzN2E3MDQ5NTgzMjMuLjMwMTZiMTMyNTkxN2RkNzJlYWE3ZGVkODVh
NmViMjdlNTgwMjk4YWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Z1bmNEZWYuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5q
cwpAQCAtMzMsNyArMzMsMTIgQEAgY2xhc3MgRnVuY0RlZiBleHRlbmRzIEZ1bmMgewogICAgIH0K
IAogICAgIGdldCBib2R5KCkgeyByZXR1cm4gdGhpcy5fYm9keTsgfQotICAgIAorCisgICAgc2V0
IGJvZHkobmV3Qm9keSkKKyAgICB7CisgICAgICAgIHRoaXMuX2JvZHkgPSBuZXdCb2R5OworICAg
IH0KKwogICAgIHJld3JpdGUocmV3cml0ZXIpCiAgICAgewogICAgICAgICB0aGlzLl9yZXR1cm5U
eXBlID0gdGhpcy5fcmV0dXJuVHlwZS52aXNpdChyZXdyaXRlcik7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUHJlcGFyZS5qcwppbmRleCAxM2ViZGU4MGJkOTFjY2I2NTQ2ODY4MTI5MjUy
NjMzNGRkMzg4N2U4Li44MzA0ZDZkNTg0OWI3NDE5YTAxZWRlMTgyYTNjNmQzODk4YTQ3OTJlIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCisrKyBi
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKQEAgLTUzLDcgKzUzLDgg
QEAgbGV0IHByZXBhcmUgPSAoKCkgPT4gewogICAgICAgICByZXNvbHZlTmFtZXNJbkZ1bmN0aW9u
cyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOwogICAgICAgICByZXNvbHZlVHlwZURlZnNJbkZ1bmN0
aW9ucyhwcm9ncmFtKTsKICAgICAgICAgY2hlY2tUeXBlc1dpdGhBcmd1bWVudHMocHJvZ3JhbSk7
Ci0gICAgICAgIAorICAgICAgICBhbGxvY2F0ZUF0RW50cnlQb2ludHMocHJvZ3JhbSk7CisKICAg
ICAgICAgY2hlY2socHJvZ3JhbSk7CiAgICAgICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0p
OwogICAgICAgICByZXNvbHZlUHJvcGVydGllcyhwcm9ncmFtKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKaW5kZXggMzAyNTg5M2EwNmEzZjU5MDMyYjlmNmNkNDNm
MTI0NjUxZjAyNmNiOS4uMjY3ZTdhMzMyMzRhZjM3MmYxZTEzNGVlNjNmOTZjYjFjN2Y3ODE2MyAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKKysr
IGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKQEAgLTIzMyw3ICsy
MzMsMTAgQEAgY2xhc3MgUmV3cml0ZXIgewogICAgIAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgTm9kZS52aXNpdChu
b2RlLnZhbHVlLCB0aGlzKSk7CisgICAgICAgIGNvbnN0IHJldHVyblN0YXRlbWVudCA9IG5ldyBS
ZXR1cm4obm9kZS5vcmlnaW4sIE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcykpOworICAgICAg
ICBpZiAobm9kZS5mdW5jKQorICAgICAgICAgICAgcmV0dXJuU3RhdGVtZW50LmZ1bmMgPSBub2Rl
LmZ1bmM7CisgICAgICAgIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7CiAgICAgfQogICAgIAogICAg
IHZpc2l0Q29udGludWUobm9kZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1NQSVJWLmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5o
dG1sCmluZGV4IDBkMjM3MTAwNWU3MTBjZGM2MGYwMzNkYTVhNTExYzQ5YWUwMDVjMzYuLjg5MTg2
NzExZmY1YzAxMGY1NzIwZTE2ODhmZjNjYTVkZmRlZTI0ZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU1BJUlYuaHRtbApAQCAtMjAsNiArMjAsNyBAQCB0ZCB7CiAgICAgPHNjcmlw
dCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkFkZHJl
c3NTcGFjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkFsbG9jYXRlQXRFbnRyeVBv
aW50cy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iQXJyYXlUeXBlLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3Jz
LmpzCmluZGV4IGEwMTgxNDY4YTI1ZWQ0YzA5MDUwZDdiZjFkNjFmNDRlZDNhMGFhNjYuLjJmNmRk
Mjg1YzgyMWVlYTBlOTQ4OWE4NTA4MTdiZjU1MGQzYWY2NzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMKKysrIGIv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5q
cwpAQCAtMjAsOTUgKzIwLDEwMCBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogInVzZSBzdHJpY3Qi
OwogCi1mdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pCitmdW5jdGlv
biBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzRm9yU3RydWN0VHlwZShwcm9ncmFtLCB0eXBlKQog
ewotICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkgewotICAgICAg
ICBpZiAoISh0eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5cGUuZmllbGRzKSB7Ci0g
ICAgICAgICAgICBmdW5jdGlvbiBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCBp
bXBsZW1lbnRhdGlvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYXRpdmVGdW5j
LnZpc2l0SW1wbGVtZW50YXRpb25EYXRhID0gKGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikg
PT4gewotICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdGluZyB0aGUgdHlwZSBmaXJzdCBlbnN1
cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQgYnVpbGRlciBmaWd1cmVzIG91dCB0aGUgZmllbGQn
cwotICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQuCi0gICAgICAgICAgICAgICAgICAgIGlt
cGxlbWVudGF0aW9uRGF0YS50eXBlLnZpc2l0KHZpc2l0b3IpOwotICAgICAgICAgICAgICAgIH07
CisgICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHsKKyAgICAgICAgZnVuY3Rpb24g
c2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgaW1wbGVtZW50YXRpb24pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAo
aW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7CisgICAgICAgICAgICAgICAgLy8gVmlz
aXRpbmcgdGhlIHR5cGUgZmlyc3QgZW5zdXJlcyB0aGF0IHRoZSBzdHJ1Y3QgbGF5b3V0IGJ1aWxk
ZXIgZmlndXJlcyBvdXQgdGhlIGZpZWxkJ3MKKyAgICAgICAgICAgICAgICAvLyBvZmZzZXQuCisg
ICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnR5cGUudmlzaXQodmlzaXRvcik7Cisg
ICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlv
biA9IChhcmd1bWVudExpc3QsIG5vZGUpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGltcGxlbWVudGF0aW9uKGFyZ3VtZW50TGlzdCwgZmllbGQub2Zmc2V0LCB0eXBlLnNpemUsIGZp
ZWxkLnR5cGUuc2l6ZSk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmllbGRUeXBlKCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQudHlwZS52aXNpdChuZXcgUmV3cml0
ZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZ1bmN0aW9u
IGNyZWF0ZVR5cGVSZWYoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBU
eXBlUmVmLndyYXAodHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGxldCBpc0Nhc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIGxldCBzaGFkZXJUeXBlOwotICAg
ICAgICAgICAgbGV0IG5hdGl2ZUZ1bmM7CisgICAgICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVu
dGF0aW9uID0gKGFyZ3VtZW50TGlzdCwgbm9kZSkgPT4geworICAgICAgICAgICAgICAgIHJldHVy
biBpbXBsZW1lbnRhdGlvbihhcmd1bWVudExpc3QsIGZpZWxkLm9mZnNldCwgdHlwZS5zaXplLCBm
aWVsZC50eXBlLnNpemUpOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQogCi0gICAgICAgICAg
ICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAotICAgICAgICAgICAgbmF0aXZlRnVuYyA9
IG5ldyBOYXRpdmVGdW5jKAotICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9y
LiIgKyBmaWVsZC5uYW1lLCBjcmVhdGVGaWVsZFR5cGUoKSwKLSAgICAgICAgICAgICAgICBbbmV3
IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkpXSwgaXND
YXN0LCBzaGFkZXJUeXBlKTsKLSAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5h
dGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7Ci0g
ICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKGZpZWxkU2l6
ZSksIDApOwotICAgICAgICAgICAgICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLnBsdXMob2Zmc2V0
KSwgZmllbGRTaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9CisgICAgICAgIGZ1
bmN0aW9uIGNyZWF0ZUZpZWxkVHlwZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
aWVsZC50eXBlLnZpc2l0KG5ldyBSZXdyaXRlcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIGNyZWF0ZVR5cGVSZWYoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVHlw
ZVJlZi53cmFwKHR5cGUpOworICAgICAgICB9CisKKyAgICAgICAgbGV0IGlzQ2FzdCA9IGZhbHNl
OworICAgICAgICBsZXQgc2hhZGVyVHlwZTsKKyAgICAgICAgbGV0IG5hdGl2ZUZ1bmM7CisKKyAg
ICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKKyAgICAgICAgbmF0aXZlRnVuYyA9
IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3IuIiAr
IGZpZWxkLm5hbWUsIGNyZWF0ZUZpZWxkVHlwZSgpLAorICAgICAgICAgICAgW25ldyBGdW5jUGFy
YW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKV0sIGlzQ2FzdCwgc2hh
ZGVyVHlwZSk7CisgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChb
YmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoZmllbGRTaXplKSwgMCk7CisgICAgICAg
ICAgICByZXN1bHQuY29weUZyb20oYmFzZS5wbHVzKG9mZnNldCksIGZpZWxkU2l6ZSk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9KTsKKyAgICAgICAgcHJvZ3JhbS5hZGQo
bmF0aXZlRnVuYyk7CisKKyAgICAgICAgLy8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9Cisg
ICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgIGZpZWxkLm9y
aWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lICsgIj0iLCBjcmVhdGVUeXBlUmVmKCksCisg
ICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3Jp
Z2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkpLAorICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFy
YW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlRmllbGRUeXBlKCkpCisgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgaXNDYXN0LCBzaGFkZXJUeXBlKTsKKyAgICAgICAgc2V0dXBJbXBs
ZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlLCB2YWx1ZV0sIG9mZnNldCwgc3RydWN0
U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEVQdHIo
bmV3IEVCdWZmZXIoc3RydWN0U2l6ZSksIDApOworICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9t
KGJhc2UsIHN0cnVjdFNpemUpOworICAgICAgICAgICAgcmVzdWx0LnBsdXMob2Zmc2V0KS5jb3B5
RnJvbSh2YWx1ZSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0pOworICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKworICAgICAgICAvLyBU
aGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICBmdW5jdGlvbiBzZXR1cEFuZGVyKGFk
ZHJlc3NTcGFjZSkKKyAgICAgICAgewogICAgICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRp
dmVGdW5jKAotICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVs
ZC5uYW1lICsgIj0iLCBjcmVhdGVUeXBlUmVmKCksCisgICAgICAgICAgICAgICAgZmllbGQub3Jp
Z2luLCAib3BlcmF0b3ImLiIgKyBmaWVsZC5uYW1lLCBuZXcgUHRyVHlwZShmaWVsZC5vcmlnaW4s
IGFkZHJlc3NTcGFjZSwgY3JlYXRlRmllbGRUeXBlKCkpLAogICAgICAgICAgICAgICAgIFsKLSAg
ICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBj
cmVhdGVUeXBlUmVmKCkpLAotICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihm
aWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZUZpZWxkVHlwZSgpKQorICAgICAgICAgICAgICAgICAg
ICBuZXcgRnVuY1BhcmFtZXRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdp
biwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdp
biwgYWRkcmVzc1NwYWNlLCBjcmVhdGVUeXBlUmVmKCkpKQogICAgICAgICAgICAgICAgIF0sCiAg
ICAgICAgICAgICAgICAgaXNDYXN0LCBzaGFkZXJUeXBlKTsKLSAgICAgICAgICAgIHNldHVwSW1w
bGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZSwgdmFsdWVdLCBvZmZzZXQsIHN0cnVj
dFNpemUsIGZpZWxkU2l6ZSkgPT4gewotICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcg
RVB0cihuZXcgRUJ1ZmZlcihzdHJ1Y3RTaXplKSwgMCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LmNvcHlGcm9tKGJhc2UsIHN0cnVjdFNpemUpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5wbHVz
KG9mZnNldCkuY29weUZyb20odmFsdWUsIGZpZWxkU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1
bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAg
ICAgICAgICAgYmFzZSA9IGJhc2UubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFi
YXNlKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihmaWVsZC5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5jZSIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBFUHRyLmJveChiYXNlLnBsdXMob2Zmc2V0KSk7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAotICAgICAgICAgICAgZnVuY3Rpb24gc2V0
dXBBbmRlcihhZGRyZXNzU3BhY2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmF0
aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAotICAgICAgICAgICAgICAgICAgICBmaWVsZC5vcmln
aW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUsIG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwg
YWRkcmVzc1NwYWNlLCBjcmVhdGVGaWVsZFR5cGUoKSksCi0gICAgICAgICAgICAgICAgICAgIFsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXcgUHRyVHlwZShmaWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgY3JlYXRlVHlw
ZVJlZigpKSkKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgaXND
YXN0LCBzaGFkZXJUeXBlKTsKLSAgICAgICAgICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0
YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4g
ewotICAgICAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5sb2FkVmFsdWUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFiYXNlKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5jZSIp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVB0ci5ib3goYmFzZS5wbHVzKG9mZnNldCkp
OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2
ZUZ1bmMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBzZXR1cEFu
ZGVyKCJ0aHJlYWQiKTsKLSAgICAgICAgICAgIHNldHVwQW5kZXIoInRocmVhZGdyb3VwIik7Ci0g
ICAgICAgICAgICBzZXR1cEFuZGVyKCJkZXZpY2UiKTsKLSAgICAgICAgICAgIHNldHVwQW5kZXIo
ImNvbnN0YW50Iik7CiAgICAgICAgIH0KKworICAgICAgICBzZXR1cEFuZGVyKCJ0aHJlYWQiKTsK
KyAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkZ3JvdXAiKTsKKyAgICAgICAgc2V0dXBBbmRlcigi
ZGV2aWNlIik7CisgICAgICAgIHNldHVwQW5kZXIoImNvbnN0YW50Iik7CisgICAgfQorfQorCitm
dW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pCit7CisgICAgZm9yIChs
ZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKSB7CisgICAgICAgIGlmICghKHR5cGUg
aW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnNGb3JTdHJ1Y3RUeXBlKHByb2dyYW0sIHR5cGUpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
aHRtbCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAppbmRleCBjMTJl
NWQ5OWRjNzRhNmYxOTAxYzk1ZGY5MWQzNGEwNWFlODU1ZTFjLi45OGUzODUxZjE2OTlhYTZjZTY4
YmZkNWFiODQ2MWFlOTdkZWVkMWMxIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0Lmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5odG1sCkBAIC0xNCw2ICsxNCw3IEBACiA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZS5qcyI+PC9z
Y3JpcHQ+CiAKIDxzY3JpcHQgc3JjPSJBZGRyZXNzU3BhY2UuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IkFsbG9jYXRlQXRFbnRyeVBvaW50cy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
QW5vbnltb3VzVmFyaWFibGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFycmF5UmVmVHlw
ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQXJyYXlUeXBlLmpzIj48L3NjcmlwdD4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMgYi9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCmluZGV4IDJiY2VhN2Q3ZGEzY2IzODJmMWFh
YmUyMTY3ZWYzYTc4OTEzOTIzMzMuLjRkODUyODRkYTZjNDgzOGE5ZDU5YTg4ZDY1ODljM2JiNTQ3
ZjlkM2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMK
KysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwpAQCAtNzkyNCw2ICs3
OTI0LDE1MiBAQCB0ZXN0cy5pbmxpbmluZ0RvZXNudFByb2R1Y2VBbGlhc2luZ0lzc3VlcyA9ICgp
ID0+IHsKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFtdKSwgMjApOwogfQogCit0ZXN0cy5yZXR1cm5SZWZlcmVuY2VUb1BhcmFtZXRlciA9ICgpID0+
IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZvbyhib29s
IGNvbmRpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpiYXIoY29uZGl0aW9u
LCAxLCAyKTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJhcihib29sIGNvbmRp
dGlvbiwgaW50IGEsIGludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29uZGl0
aW9uID8gJmEgOiAmYjsKKyAgICAgICAgfQorICAgIGApOworCisgICAgY2hlY2tJbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbIG1ha2VCb29sKHByb2dyYW0sIHRydWUp
IF0pLCAxKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFsgbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpIF0pLCAyKTsKK30KKwordGVzdHMucmV0dXJu
UmVmZXJlbmNlVG9QYXJhbWV0ZXJXaXRoRGlmZmVyZW50RnVuY3Rpb25zID0gKCkgPT4geworICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICpiYXIoMTApICsgKmJheigyMCk7CisgICAgICAgIH0KKwor
ICAgICAgICB0aHJlYWQgaW50KiBiYXIoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAmeDsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJheihpbnQgeSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZ5OworICAgICAgICB9CisgICAgYCk7CisKKyAg
ICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgMzAp
OworfQorCit0ZXN0cy5yZXR1cm5SZWZlcmVuY2VUb1NhbWVQYXJhbWV0ZXIgPSAoKSA9PiB7Cisg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0IGludCBmb28oKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gcGx1cyhiYXIoNSksIGJhcig3KSk7CisgICAgICAgIH0K
KworICAgICAgICBpbnQgcGx1cyh0aHJlYWQgaW50KiB4LCB0aHJlYWQgaW50KiB5KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnggKyAqeTsKKyAgICAgICAgfQorCisgICAgICAgIHRo
cmVhZCBpbnQqIGJhcihpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZ4Owor
ICAgICAgICB9CisgICAgYCk7CisKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgMTApOworfQorCit0ZXN0cy5yZXR1cm5SZWZlcmVuY2VUb0xv
Y2FsVmFyaWFibGUgPSAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAg
ICB0ZXN0IGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKmJhcigpOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50IGEgPSA0MjsKKyAgICAgICAgICAgIHJldHVybiAmYTsKKyAgICAgICAgfQorICAg
IGApOworCisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSksIDQyKTsKK30KKwordGVzdHMucmV0dXJuUmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlV2l0
aE5lc3RpbmcgPSAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0
ZXN0IGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKmJhcigpICsgKmJh
eigpOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IGEgPSAyMDsKKyAgICAgICAgICAgIHJldHVybiAmYTsKKyAgICAgICAg
fQorCisgICAgICAgIHRocmVhZCBpbnQqIGJheigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCBhID0gMjI7CisgICAgICAgICAgICByZXR1cm4gJmE7CisgICAgICAgIH0KKyAgICBgKTsKKwor
ICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0
Mik7Cit9CisKK3Rlc3RzLmNvbnZlcnRQdHJUb0FycmF5UmVmID0gKCkgPT4geworICAgIGxldCBw
cm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGJhcigpWzBdOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGlu
dFtdIGJhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB4ID0gNDI7CisgICAgICAgICAg
ICByZXR1cm4gQCgmeCk7CisgICAgICAgIH0KKyAgICBgKTsKKworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9CisKK3Rlc3RzLmNv
bnZlcnRMb2NhbFZhcmlhYmxlVG9BcnJheVJlZiA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBiYXIoKVswXTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnRbXSBiYXIo
KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDQyOworICAgICAgICAgICAgcmV0dXJu
IEB4OworICAgICAgICB9CisgICAgYCk7CisKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOworfQorCit0ZXN0cy5yZWZlcmVuY2VUYWtl
blRvTG9jYWxWYXJpYWJsZUluRW50cnlQb2ludFNob3VsZG50TW92ZUFueXRoaW5nID0gKCkgPT4g
eworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaW50IGEgPSA0MjsKKyAgICAgICAgICAgIHRocmVhZCBpbnQq
IGIgPSAmYTsKKyAgICAgICAgICAgIHJldHVybiAqYjsKKyAgICAgICAgfQorICAgIGApOworCisg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQy
KTsKK307CisKIG9rVG9UZXN0ID0gdHJ1ZTsKIAogbGV0IHRlc3RGaWx0ZXIgPSAvLiovOyAvLyBy
dW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9pbmRleC5odG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5k
ZXguaHRtbAppbmRleCAyNDQxNWYzM2ExNzA5YjJlMGU2ZDViZWNlNjdhYTg5NTMwNmI4OWJlLi4w
OGY0ZWQ1YjA5MzFiNmJmYjNhNDIyODk3ODM3ZWVmOGExYWMzMjkwIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCisrKyBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKQEAgLTE0LDYgKzE0LDcgQEAKIDxzY3JpcHQgc3Jj
PSJOYXRpdmVUeXBlLmpzIj48L3NjcmlwdD4KIAogPHNjcmlwdCBzcmM9IkFkZHJlc3NTcGFjZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJBbm9ueW1vdXNWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iQXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVR5
cGUuanMiPjwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350096</attachid>
            <date>2018-09-19 00:24:12 -0700</date>
            <delta_ts>2018-09-19 23:33:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188402-20180919002408.patch</filename>
            <type>text/plain</type>
            <size>31003</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NzUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjc2N2RiZjgyN2I2ZWI2NDg4YjMyMzljMjQwMzM3MmIy
YjhmNmI0YS4uMTk1MDM4ZmQyYjc2Njg0Y2UxMmIzOTllYzYzNmZmYmNlYzU2MmQ5ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDE4LTA5LTEwICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dITFNMXSBMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2Nh
dGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBh
ZGRpdGlvbmFsIHByZXBhcmF0aW9uIHN0YWdlIGlzIG5vdyBwZXJmb3JtZWQgc28gdGhhdCBhbGwg
bG9jYWwKKyAgICAgICAgdmFyaWFibGVzIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZSBhbGxv
Y2F0ZWQgaW4gYSBzaW5nbGUgc3RydWN0IGF0CisgICAgICAgIGVudHJ5IHBvaW50cy4gQSBwb2lu
dGVyIHRvIHRoaXMgc3RydWN0IGlzIHRoZW4gcGFzc2VkIGZvciBmdW5jdGlvbgorICAgICAgICBj
YWxscy4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qczogVXBkYXRl
IGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGxvY2F0
ZUF0RW50cnlQb2ludHMuanM6IEFkZGVkIG5ldyBzdGFnZS4KKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9u
LnByb3RvdHlwZS5zZXQgYXJndW1lbnRMaXN0KTogQWRkIHNldHRlciBiZWNhdXNlCisgICAgICAg
IGFsbG9jYXRlQXRFbnRyeVBvaW50cyBuZWVkcyB0byBjaGFuZ2UgdGhpcy4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qczogUmVtb3ZlIGEgcmVkdW5k
YW50CisgICAgICAgIGNvbnN0cnVjdG9yIHRoYXQgd2Fzbid0IHVzZWQgYW55d2hlcmUuCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMucHJv
dG90eXBlLnNldCBwYXJhbWV0ZXJzKTogQWRkIHNldHRlci4KKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzOgorICAgICAgICAoRnVuY0RlZi5wcm90b3R5cGUuc2V0
IGJvZHkpOiBEaXR0by4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJl
LmpzOgorICAgICAgICAobGV0LnByZXBhcmUpOiBBZGQgY2FsbCB0byBhbGxvY2F0ZUF0RW50cnlQ
b2ludHMuIFRoaXMgY2FsbCBjYW5ub3QKKyAgICAgICAgaGFwcGVuIGFueSBlYXJsaWVyIGJlY2F1
c2UgaXQgZGVwZW5kcyBvbiBoYXZpbmcgdHlwZXMgZm9yIGNhbGwKKyAgICAgICAgYXJndW1lbnRz
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0UmV0dXJuKTogUmVzb2x2ZSBpc3N1ZSB3aGVyZSB0
aGUgcmV0dXJuCisgICAgICAgIHN0YXRlbWVudCdzIGZ1bmN0aW9uIHdhc24ndCBjb3BpZWQuIEEg
bnVsbCBjaGVjayBpcyByZXF1aXJlZCBhcyB0aGUKKyAgICAgICAgUmV3cml0ZXIgbWlnaHQgYmUg
dXNlZCBiZWZvcmUgdGhpcyBwcm9wZXJ0eSBpcyBzZXQuCisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU1BJUlYuaHRtbDogVXBkYXRlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzOiBBYnN0
cmFjdGVkIGxvZ2ljCisgICAgICAgIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGF0IGFs
bG9jYXRlQXRFbnRyeVBvaW50cyBjYW4gY3JlYXRlIHRoZQorICAgICAgICBhY2Nlc3NvcnMgZm9y
IHRoZSBzdHJ1Y3QgdHlwZSBpdCBpbnRyb2R1Y2VzLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuaHRtbDogVXBkYXRlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzOiBBZGQgbmV3IHRlc3RzIHRvIHZlcmlmeSB0aGUg
c3RhdGljCisgICAgICAgIGFsbG9jYXRpb24gdHJhbnNmb3JtIHdvcmtzIHNhZmVseS4KKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sOiBVcGRhdGUgZGVwZW5kZW5j
aWVzLgorCisKKwogMjAxOC0wOS0xOCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CiAKICAgICAgICAgd2Via2l0cHk6IENsb2JiZXJpbmcgYW5kIGJ1aWxkaW5nIG9jY3VycyBt
dWx0aXBsZSB0aW1lcyBmb3IgaU9TIFNpbXVsYXRvciBwb3J0cwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQWxsLmpzCmluZGV4IDNjMmM0ODc0MjAwMTExNWExNzEzNDgzYTFmMjNjZTI4NjY4YmI5
YzYuLmUyOTEwZDc5ZDZjMjM1OWI3NjMxNjE5ODAzMTZhZmYwOTQyMjcwZjMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcworKysgYi9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKQEAgLTM3LDYgKzM3LDcgQEAgbG9hZCgiUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlLmpzIik7CiAKIGxvYWQoIkFk
ZHJlc3NTcGFjZS5qcyIpOworbG9hZCgiQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzIik7CiBsb2Fk
KCJBbm9ueW1vdXNWYXJpYWJsZS5qcyIpOwogbG9hZCgiQXJyYXlSZWZUeXBlLmpzIik7CiBsb2Fk
KCJBcnJheVR5cGUuanMiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjRhZjU5NDM2YjMxNjBm
NDgyNGYxYTNjZjU5ZTcwNDY0OWViYmMwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzCkBAIC0wLDAgKzEsMjU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKworICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisidXNlIHN0cmlj
dCI7CisKK2Z1bmN0aW9uIGFsbG9jYXRlQXRFbnRyeVBvaW50cyhwcm9ncmFtKQoreworICAgIGNv
bnN0IGVudHJ5UG9pbnRzID0gW107CisgICAgY2xhc3MgT25seVZpc2l0RnVuY0RlZnNUaGF0QXJl
RW50cnlQb2ludHMgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgdmlzaXRGdW5jRGVmKG5vZGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzRW50cnlQb2ludCkKKyAgICAgICAg
ICAgICAgICBlbnRyeVBvaW50cy5wdXNoKG5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIHBy
b2dyYW0udmlzaXQobmV3IE9ubHlWaXNpdEZ1bmNEZWZzVGhhdEFyZUVudHJ5UG9pbnRzKCkpOwor
CisgICAgY29uc3QgYWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJhbWV0ZXJzID0gbmV3IFNldCgp
OworICAgIGNvbnN0IGZ1bmN0aW9uc1RoYXRBcmVDYWxsZWRCeUVudHJ5UG9pbnRzID0gbmV3IFNl
dCgpOworICAgIGNsYXNzIEZpbmRBbGxWYXJpYWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMgZXh0
ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgY29uc3RydWN0b3IoY3VycmVudEZ1bmMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50RnVuYyA9
IGN1cnJlbnRGdW5jOworICAgICAgICB9CisKKyAgICAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihu
b2RlKQorICAgICAgICB7CisgICAgICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5v
ZGUpOworICAgICAgICAgICAgaWYgKG5vZGUuZnVuYyBpbnN0YW5jZW9mIEZ1bmNEZWYpIHsKKyAg
ICAgICAgICAgICAgICBmdW5jdGlvbnNUaGF0QXJlQ2FsbGVkQnlFbnRyeVBvaW50cy5hZGQobm9k
ZS5mdW5jKTsKKyAgICAgICAgICAgICAgICBub2RlLmZ1bmMudmlzaXQobmV3IEZpbmRBbGxWYXJp
YWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMobm9kZS5mdW5jKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBub2RlLl9mdW5jID0gdGhpcy5fY3VycmVudEZ1bmM7CisgICAgICAgICAgICBh
bGxWYXJpYWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMuYWRkKG5vZGUpOworICAgICAgICAgICAg
c3VwZXIudmlzaXRWYXJpYWJsZURlY2wobm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB2aXNp
dEZ1bmNQYXJhbWV0ZXIobm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgbm9kZS5fZnVuYyA9
IHRoaXMuX2N1cnJlbnRGdW5jOworICAgICAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50RnVuYy5p
c0VudHJ5UG9pbnQpCisgICAgICAgICAgICAgICAgYWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJh
bWV0ZXJzLmFkZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAobGV0IGVudHJ5
UG9pbnQgb2YgZW50cnlQb2ludHMpCisgICAgICAgIGVudHJ5UG9pbnQudmlzaXQobmV3IEZpbmRB
bGxWYXJpYWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMoZW50cnlQb2ludCkpOworCisgICAgaWYg
KCFhbGxWYXJpYWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMuc2l6ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29uc3QgZ2xvYmFsU3RydWN0VHlwZSA9IG5ldyBTdHJ1Y3RUeXBlKGVudHJ5UG9p
bnRzWzBdLm9yaWdpbiwgbnVsbCk7CisgICAgcHJvZ3JhbS5hZGQoZ2xvYmFsU3RydWN0VHlwZSk7
CisgICAgLy8gQ2hlY2tlciByZXF1aXJlcyB0aGF0IHR5cGVzIHRoYXQgYXBwZWFyIGluIHRoZSBw
cm9ncmFtIGFyZSB3cmFwcGVkIGluIFR5cGVSZWZzLgorICAgIGNvbnN0IGdsb2JhbFN0cnVjdFR5
cGVSZWYgPSBUeXBlUmVmLndyYXAoZ2xvYmFsU3RydWN0VHlwZSk7CisgICAgY29uc3QgcHRyVG9H
bG9iYWxTdHJ1Y3RUeXBlID0gbmV3IFB0clR5cGUoZW50cnlQb2ludHNbMF0ub3JpZ2luLCAidGhy
ZWFkIiwgZ2xvYmFsU3RydWN0VHlwZVJlZik7CisgICAgcHJvZ3JhbS5hZGQocHRyVG9HbG9iYWxT
dHJ1Y3RUeXBlKTsKKyAgICBjb25zdCBwdHJUb0dsb2JhbFN0cnVjdFR5cGVSZWYgPSBUeXBlUmVm
LndyYXAocHRyVG9HbG9iYWxTdHJ1Y3RUeXBlKTsKKworICAgIGxldCBjb3VudGVyID0gMDsKKyAg
ICBjb25zdCB2YXJUb0ZpZWxkTWFwID0gbmV3IE1hcCgpOworICAgIGZvciAobGV0IHZhck9yUGFy
YW0gb2YgYWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJhbWV0ZXJzKSB7CisgICAgICAgIGNvbnN0
IGZpZWxkTmFtZSA9IGBmaWVsZCR7Y291bnRlcisrfV8ke3Zhck9yUGFyYW0uX2Z1bmMubmFtZX1f
JHt2YXJPclBhcmFtLm5hbWV9YDsKKyAgICAgICAgZ2xvYmFsU3RydWN0VHlwZS5hZGQobmV3IEZp
ZWxkKHZhck9yUGFyYW0ub3JpZ2luLCBmaWVsZE5hbWUsIHZhck9yUGFyYW0udHlwZSkpOworICAg
ICAgICB2YXJUb0ZpZWxkTWFwLnNldCh2YXJPclBhcmFtLCBmaWVsZE5hbWUpOworICAgIH0KKwor
ICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3Rpb25zVGhhdEFyZUNhbGxlZEJ5RW50cnlQb2ludHMp
IHsKKyAgICAgICAgaWYgKGZ1bmMucmV0dXJuVHlwZS5uYW1lICE9PSAidm9pZCIpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGBmaWVsZCR7Y291bnRlcisrfV9yZXR1cm5fJHtmdW5j
Lm5hbWV9YDsKKyAgICAgICAgICAgIGdsb2JhbFN0cnVjdFR5cGUuYWRkKG5ldyBGaWVsZChmdW5j
Lm9yaWdpbiwgZmllbGROYW1lLCBmdW5jLnJldHVyblR5cGUpKTsKKyAgICAgICAgICAgIGZ1bmMu
cmV0dXJuRmllbGROYW1lID0gZmllbGROYW1lOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
QWxsIG90aGVyIHN0cnVjdCBhY2Nlc3NvcnMgd2lsbCBoYXZlIGJlZW4gc3ludGhlc2l6ZWQgYXQg
dGhpcyBwb2ludCAodGhleSBoYXZlIHRvIGJlIHN5bnRoZXNpemVkIGVhcmxpZXIgZm9yIGNhbGwg
cmVzb2x1dGlvbikuCisgICAgc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29yc0ZvclN0cnVjdFR5cGUo
cHJvZ3JhbSwgZ2xvYmFsU3RydWN0VHlwZSk7CisKKyAgICBjb25zdCB2aXNpdGVkRnVuY3Rpb25T
ZXQgPSBuZXcgU2V0KCk7CisKKyAgICBmdW5jdGlvbiB1cGRhdGVGdW5jdGlvbihmdW5jKQorICAg
IHsKKyAgICAgICAgY2xhc3MgVXBkYXRlRnVuY3Rpb25zIGV4dGVuZHMgUmV3cml0ZXIgeworICAg
ICAgICAgICAgY29uc3RydWN0b3IoZnVuYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzdXBlcigpOworICAgICAgICAgICAgICAgIHRoaXMuX2Z1bmMgPSBmdW5jOworICAgICAgICAg
ICAgICAgIHZpc2l0ZWRGdW5jdGlvblNldC5hZGQodGhpcy5mdW5jKTsKKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5mdW5jLmlzRW50cnlQb2ludCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
YWRkVmFyaWFibGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fcmVjb25maWd1cmVQYXJhbWV0ZXJzKCk7CisgICAgICAgICAgICAg
ICAgdGhpcy5mdW5jLmJvZHkgPSB0aGlzLmZ1bmMuX2JvZHkudmlzaXQodGhpcyk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIF9hZGRWYXJpYWJsZURlY2xhcmF0aW9uKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZURlY2wgPSBuZXcgVmFyaWFibGVE
ZWNsKHRoaXMuZnVuYy5vcmlnaW4sIG51bGwsIGdsb2JhbFN0cnVjdFR5cGVSZWYsIG51bGwpOwor
ICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlUmVmID0gbmV3IE1ha2VQdHJFeHByZXNzaW9u
KHRoaXMuZnVuYy5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAodGhpcy52YXJpYWJsZURlY2wpKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmZ1bmMuYm9keS5zdGF0ZW1lbnRzLnVuc2hpZnQodGhpcy52
YXJpYWJsZURlY2wpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfcmVjb25maWd1cmVQ
YXJhbWV0ZXJzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBmdW5jUGFy
YW0gPSBuZXcgRnVuY1BhcmFtZXRlcih0aGlzLmZ1bmMub3JpZ2luLCBudWxsLCBwdHJUb0dsb2Jh
bFN0cnVjdFR5cGVSZWYpOworICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlUmVmID0gVmFy
aWFibGVSZWYud3JhcChmdW5jUGFyYW0pOworICAgICAgICAgICAgICAgIHRoaXMuZnVuYy5fbmV3
UGFyYW1ldGVycyA9IFsgZnVuY1BhcmFtIF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdldCBmdW5jKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZnVuYzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2V0IHZhcmlhYmxlRGVjbCgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlRGVjbDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2V0IGdsb2JhbFN0cnVjdFZhcmlhYmxlUmVm
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWFibGVS
ZWY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIF9jYWxsRXhwcmVzc2lvbkZvckZpZWxk
TmFtZShub2RlLCBmaWVsZE5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KCFmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRmllbGQg
bmFtZSB3YXMgbnVsbCIpOworICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGBv
cGVyYXRvciYuJHtmaWVsZE5hbWV9YDsKKyAgICAgICAgICAgICAgICBjb25zdCBwb3NzaWJsZUFu
ZE92ZXJsb2FkcyA9IHByb2dyYW0uZ2xvYmFsTmFtZUNvbnRleHQuZ2V0KEZ1bmMsIGZ1bmN0aW9u
TmFtZSk7CisgICAgICAgICAgICAgICAgY29uc3QgY2FsbEV4cHJlc3Npb25SZXNvbHV0aW9uID0g
Q2FsbEV4cHJlc3Npb24ucmVzb2x2ZShub2RlLm9yaWdpbiwgcG9zc2libGVBbmRPdmVybG9hZHMs
IGZ1bmN0aW9uTmFtZSwgWyB0aGlzLmdsb2JhbFN0cnVjdFZhcmlhYmxlUmVmIF0sIFsgcHRyVG9H
bG9iYWxTdHJ1Y3RUeXBlUmVmIF0pOworICAgICAgICAgICAgICAgIHJldHVybiBjYWxsRXhwcmVz
c2lvblJlc29sdXRpb24uY2FsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgX2RlcmVm
ZXJlbmNlZENhbGxFeHByZXNzaW9uRm9yRmllbGROYW1lKG5vZGUsIHJlc3VsdFR5cGUsIGZpZWxk
TmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBkZXJlZkV4cHIgPSBu
ZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUub3JpZ2luLCB0aGlzLl9jYWxsRXhwcmVzc2lv
bkZvckZpZWxkTmFtZShub2RlLCBmaWVsZE5hbWUpLCBub2RlLnR5cGUsICJ0aHJlYWQiKTsKKyAg
ICAgICAgICAgICAgICBkZXJlZkV4cHIudHlwZSA9IHJlc3VsdFR5cGU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRlcmVmRXhwcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlzaXRW
YXJpYWJsZVJlZihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghdmFy
VG9GaWVsZE1hcC5oYXMobm9kZS52YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdXBlci52aXNpdFZhcmlhYmxlUmVmKG5vZGUpOworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl9kZXJlZmVyZW5jZWRDYWxsRXhwcmVzc2lvbkZvckZpZWxkTmFtZShub2RlLCBub2RlLnZh
cmlhYmxlLnR5cGUsIHZhclRvRmllbGRNYXAuZ2V0KG5vZGUudmFyaWFibGUpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmlzaXRWYXJpYWJsZURlY2wobm9kZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5pbml0aWFsaXplcikgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUudHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcihgJHtub2RlfSBkb2Vzbid0IGhhdmUgYSB0eXBlYCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgdGhpcy5fZGVyZWZlcmVuY2Vk
Q2FsbEV4cHJlc3Npb25Gb3JGaWVsZE5hbWUobm9kZSwgbm9kZS50eXBlLCB2YXJUb0ZpZWxkTWFw
LmdldChub2RlKSksIG5vZGUuaW5pdGlhbGl6ZXIudmlzaXQodGhpcyksIG5vZGUudHlwZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUgPT0gdGhpcy52
YXJpYWJsZURlY2wpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgQmxvY2sobm9kZS5vcmlnaW4pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbm9kZSA9IHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUuZnVuYyBpbnN0YW5jZW9mIEZ1bmNEZWYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdXBkYXRlRnVuY3Rpb24obm9kZS5mdW5jKTsKKworICAgICAgICAgICAgICAg
ICAgICBsZXQgZXhwcnMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5vbnltb3Vz
VmFyaWFibGVBc3NpZ25tZW50cyA9IFtdOworICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBp
ID0gbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB0eXBlID0gbm9kZS5mdW5jLnBhcmFtZXRlcnNbaV0udHlwZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoYCR7bm9kZS5mdW5jLnBhcmFtZXRlcnNbaV19IGhhcyBubyB0eXBlYCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbm9ueW1vdXNWYXJpYWJsZSA9IG5ldyBB
bm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgdHlwZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBleHBycy5wdXNoKGFub255bW91c1ZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cHJzLnB1c2gobmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndy
YXAoYW5vbnltb3VzVmFyaWFibGUpLCBub2RlLmFyZ3VtZW50TGlzdFtpXSwgdHlwZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYW5vbnltb3VzVmFyaWFibGVBc3NpZ25tZW50cy5wdXNoKG5l
dyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCB0aGlzLl9kZXJlZmVyZW5jZWRDYWxsRXhwcmVzc2lv
bkZvckZpZWxkTmFtZShub2RlLmZ1bmMucGFyYW1ldGVyc1tpXSwgbm9kZS5mdW5jLnBhcmFtZXRl
cnNbaV0udHlwZSwgdmFyVG9GaWVsZE1hcC5nZXQobm9kZS5mdW5jLnBhcmFtZXRlcnNbaV0pKSwg
VmFyaWFibGVSZWYud3JhcChhbm9ueW1vdXNWYXJpYWJsZSksIHR5cGUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBleHBycyA9IGV4cHJzLmNvbmNhdChhbm9u
eW1vdXNWYXJpYWJsZUFzc2lnbm1lbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwcnMucHVz
aChub2RlKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5mdW5jLnJldHVyblR5cGUu
bmFtZSAhPT0gInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwcnMucHVzaCh0aGlz
Ll9kZXJlZmVyZW5jZWRDYWxsRXhwcmVzc2lvbkZvckZpZWxkTmFtZShub2RlLmZ1bmMsIG5vZGUu
ZnVuYy5yZXR1cm5UeXBlLCBub2RlLmZ1bmMucmV0dXJuRmllbGROYW1lKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QgPSBbIHRoaXMuZ2xvYmFsU3RydWN0VmFyaWFi
bGVSZWYgXTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24o
bm9kZS5vcmlnaW4sIGV4cHJzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmlzaXRSZXR1cm4o
bm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub2RlID0gc3VwZXIudmlzaXRS
ZXR1cm4obm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUgJiYgdGhpcy5fZnVu
Yy5yZXR1cm5GaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIFsKKyAgICAgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQo
bm9kZS5vcmlnaW4sIHRoaXMuX2RlcmVmZXJlbmNlZENhbGxFeHByZXNzaW9uRm9yRmllbGROYW1l
KHRoaXMuX2Z1bmMsIHRoaXMuX2Z1bmMucmV0dXJuVHlwZSwgdGhpcy5fZnVuYy5yZXR1cm5GaWVs
ZE5hbWUpLCBub2RlLnZhbHVlLCB0aGlzLl9mdW5jLnJldHVyblR5cGUpLAorICAgICAgICAgICAg
ICAgICAgICBuZXcgUmV0dXJuKG5vZGUub3JpZ2luKSBdKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCF2aXNpdGVkRnVuY3Rpb25TZXQuaGFzKGZ1bmMpKQorICAgICAg
ICAgICAgbmV3IFVwZGF0ZUZ1bmN0aW9ucyhmdW5jKTsKKyAgICB9CisKKyAgICBmb3IgKGxldCBl
bnRyeVBvaW50IG9mIGVudHJ5UG9pbnRzKQorICAgICAgICB1cGRhdGVGdW5jdGlvbihlbnRyeVBv
aW50KTsKKworICAgIGNsYXNzIFVwZGF0ZVBhcmFtcyBleHRlbmRzIFZpc2l0b3IgeworICAgICAg
ICB2aXNpdEZ1bmNEZWYobm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3VwZXIudmlzaXRG
dW5jRGVmKG5vZGUpOworICAgICAgICAgICAgaWYgKG5vZGUuX25ld1BhcmFtZXRlcnMpCisgICAg
ICAgICAgICAgICAgbm9kZS5wYXJhbWV0ZXJzID0gbm9kZS5fbmV3UGFyYW1ldGVyczsKKyAgICAg
ICAgICAgIGlmIChub2RlLnJldHVybkZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICBub2RlLl9y
ZXR1cm5UeXBlID0gVHlwZVJlZi53cmFwKHByb2dyYW0udHlwZXMuZ2V0KCJ2b2lkIikpOworICAg
ICAgICB9CisKKyAgICAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgICAgICAgICAg
aWYgKG5vZGUuZnVuYy5yZXR1cm5GaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgbm9kZS5fcmV0
dXJuVHlwZSA9IG5vZGUucmVzdWx0VHlwZSA9IFR5cGVSZWYud3JhcChwcm9ncmFtLnR5cGVzLmdl
dCgidm9pZCIpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcm9ncmFtLnZpc2l0KG5ldyBVcGRh
dGVQYXJhbXMoKSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9DYWxsRXhwcmVzc2lvbi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxF
eHByZXNzaW9uLmpzCmluZGV4IDVmYmRkNTA1Zjc5ZDRiMzI2ZTA5M2UwZmI3NmNkMzc1ZDBhMmM1
YmEuLjRlNGQ2NWYwOTEzODA0ZjRkMGU3MGMwMDJiZjYzMTQwNjBiMGVlMmUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCisrKyBiL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCkBAIC0zNiw3ICsz
NiwxNCBAQCBjbGFzcyBDYWxsRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogICAgIH0K
ICAgICAKICAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KKwogICAgIGdldCBh
cmd1bWVudExpc3QoKSB7IHJldHVybiB0aGlzLl9hcmd1bWVudExpc3Q7IH0KKworICAgIHNldCBh
cmd1bWVudExpc3QobmV3VmFsdWUpCisgICAgeworICAgICAgICB0aGlzLl9hcmd1bWVudExpc3Qg
PSBuZXdWYWx1ZTsKKyAgICB9CisKICAgICBnZXQgaXNDYXN0KCkgeyByZXR1cm4gdGhpcy5faXND
YXN0OyB9CiAgICAgZ2V0IHJldHVyblR5cGUoKSB7IHJldHVybiB0aGlzLl9yZXR1cm5UeXBlOyB9
CiAgICAgCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVy
QnVpbGRlci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVy
LmpzCmluZGV4IGEzYmVlMWZhMjQ3NWQxZjU2YjMwNWY1NmQ4ZGIzMzZlYThhNGE3MTcuLmE3ZjM2
MTZkOWExZjVjMTcwNjRjNjFiNzY4NGYyNDI4ZmIxMTY3NWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCisrKyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCkBAIC0yNSwxMiArMjUsNiBAQAog
InVzZSBzdHJpY3QiOwogCiBjbGFzcyBFQnVmZmVyQnVpbGRlciBleHRlbmRzIFZpc2l0b3Igewot
ICAgIGNvbnN0cnVjdG9yKHByb2dyYW0pCi0gICAgewotICAgICAgICBzdXBlcigpOwotICAgICAg
ICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTsKLSAgICB9Ci0gICAgCiAgICAgX2NyZWF0ZUVQdHIo
dHlwZSkKICAgICB7CiAgICAgICAgIGlmICh0eXBlLnNpemUgPT0gbnVsbCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCmluZGV4IGNiYzJjMzMzZjY2NmY2ODdjMDdkMzNkYzAxODhj
Yzk4NDZhM2Y2ZDIuLjRmNTg5MDYwN2IxYTI5MTcxODIzNGFmYTNkNmUwNjZmMWQ5OTA1ZDUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMKKysrIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwpAQCAtNTQsNiArNTQsMTEgQEAgY2xh
c3MgRnVuYyBleHRlbmRzIE5vZGUgewogICAgIGdldCBpc0VudHJ5UG9pbnQoKSB7IHJldHVybiB0
aGlzLnNoYWRlclR5cGUgIT0gbnVsbDsgfQogICAgIGdldCByZXR1cm5UeXBlRm9yT3ZlcmxvYWRS
ZXNvbHV0aW9uKCkgeyByZXR1cm4gdGhpcy5pc0Nhc3QgPyB0aGlzLnJldHVyblR5cGUgOiBudWxs
OyB9CiAgICAgCisgICAgc2V0IHBhcmFtZXRlcnMobmV3VmFsdWUpCisgICAgeworICAgICAgICB0
aGlzLl9wYXJhbWV0ZXJzID0gbmV3VmFsdWU7CisgICAgfQorCiAgICAgZ2V0IGtpbmQoKSB7IHJl
dHVybiBGdW5jOyB9CiAgICAgCiAgICAgdG9EZWNsU3RyaW5nKCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCmluZGV4IGQ2OGU0MDMwZTU5YTU3MTE4MmM2MDRiM2UyYmQz
N2E3MDQ5NTgzMjMuLjMwMTZiMTMyNTkxN2RkNzJlYWE3ZGVkODVhNmViMjdlNTgwMjk4YWMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMKKysrIGIv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5qcwpAQCAtMzMsNyArMzMsMTIg
QEAgY2xhc3MgRnVuY0RlZiBleHRlbmRzIEZ1bmMgewogICAgIH0KIAogICAgIGdldCBib2R5KCkg
eyByZXR1cm4gdGhpcy5fYm9keTsgfQotICAgIAorCisgICAgc2V0IGJvZHkobmV3Qm9keSkKKyAg
ICB7CisgICAgICAgIHRoaXMuX2JvZHkgPSBuZXdCb2R5OworICAgIH0KKwogICAgIHJld3JpdGUo
cmV3cml0ZXIpCiAgICAgewogICAgICAgICB0aGlzLl9yZXR1cm5UeXBlID0gdGhpcy5fcmV0dXJu
VHlwZS52aXNpdChyZXdyaXRlcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9QcmVwYXJlLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFy
ZS5qcwppbmRleCAxM2ViZGU4MGJkOTFjY2I2NTQ2ODY4MTI5MjUyNjMzNGRkMzg4N2U4Li45ZmUz
NmJhOGM3Yjg2MWVlMmFjZDBhMzA4NTQ4YWI5ZjZmOWUzZGYwIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKQEAgLTUzLDcgKzUzLDcgQEAgbGV0IHByZXBhcmUgPSAo
KCkgPT4gewogICAgICAgICByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVz
b2x2ZXIpOwogICAgICAgICByZXNvbHZlVHlwZURlZnNJbkZ1bmN0aW9ucyhwcm9ncmFtKTsKICAg
ICAgICAgY2hlY2tUeXBlc1dpdGhBcmd1bWVudHMocHJvZ3JhbSk7Ci0gICAgICAgIAorCiAgICAg
ICAgIGNoZWNrKHByb2dyYW0pOwogICAgICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsK
ICAgICAgICAgcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSk7CkBAIC02Nyw2ICs2Nyw3IEBAIGxl
dCBwcmVwYXJlID0gKCgpID0+IHsKICAgICAgICAgY2hlY2tQcm9ncmFtV3JhcHBlZChwcm9ncmFt
KTsKICAgICAgICAgY2hlY2tUeXBlc1dpdGhBcmd1bWVudHMocHJvZ3JhbSk7CiAgICAgICAgIGZp
bmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKKyAgICAgICAgYWxsb2NhdGVBdEVudHJ5UG9pbnRzKHBy
b2dyYW0pOwogICAgICAgICBwcm9ncmFtLnZpc2l0KG5ldyBTdHJ1Y3RMYXlvdXRCdWlsZGVyKCkp
OwogICAgICAgICBsYXRlQ2hlY2tBbmRMYXlvdXRCdWZmZXJzKHByb2dyYW0pOwogICAgICAgICBp
ZiAoc2hvdWxkSW5saW5lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUmV3cml0ZXIuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5q
cwppbmRleCAzMDI1ODkzYTA2YTNmNTkwMzJiOWY2Y2Q0M2YxMjQ2NTFmMDI2Y2I5Li4yNjdlN2Ez
MzIzNGFmMzcyZjFlMTM0ZWU2M2Y5NmNiMWM3Zjc4MTYzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwpAQCAtMjMzLDcgKzIzMywxMCBAQCBjbGFzcyBSZXdyaXRl
ciB7CiAgICAgCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBu
ZXcgUmV0dXJuKG5vZGUub3JpZ2luLCBOb2RlLnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpKTsKKyAg
ICAgICAgY29uc3QgcmV0dXJuU3RhdGVtZW50ID0gbmV3IFJldHVybihub2RlLm9yaWdpbiwgTm9k
ZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKSk7CisgICAgICAgIGlmIChub2RlLmZ1bmMpCisgICAg
ICAgICAgICByZXR1cm5TdGF0ZW1lbnQuZnVuYyA9IG5vZGUuZnVuYzsKKyAgICAgICAgcmV0dXJu
IHJldHVyblN0YXRlbWVudDsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDb250aW51ZShub2RlKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbCBiL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwKaW5kZXggMGQyMzcxMDA1ZTcx
MGNkYzYwZjAzM2RhNWE1MTFjNDlhZTAwNWMzNi4uODkxODY3MTFmZjVjMDEwZjU3MjBlMTY4OGZm
M2NhNWRmZGVlMjRlYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U1BJUlYuaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1s
CkBAIC0yMCw2ICsyMCw3IEBAIHRkIHsKICAgICA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZS5qcyI+
PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iQW5vbnltb3VzVmFyaWFibGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJBcnJh
eVR5cGUuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMKaW5kZXggYTAxODE0NjhhMjVl
ZDRjMDkwNTBkN2JmMWQ2MWY0NGVkM2EwYWE2Ni4uMmY2ZGQyODVjODIxZWVhMGU5NDg5YTg1MDgx
N2JmNTUwZDNhZjY3OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCkBAIC0yMCw5NSArMjAsMTAwIEBA
CiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0aW9uIHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKK2Z1bmN0aW9uIHN5bnRoZXNpemVTdHJ1Y3RBY2Nl
c3NvcnNGb3JTdHJ1Y3RUeXBlKHByb2dyYW0sIHR5cGUpCiB7Ci0gICAgZm9yIChsZXQgdHlwZSBv
ZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghKHR5cGUgaW5zdGFuY2Vv
ZiBTdHJ1Y3RUeXBlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAg
Zm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uIHNl
dHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIGltcGxlbWVudGF0aW9uKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlzaXRJbXBsZW1lbnRhdGlvbkRh
dGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFZpc2l0aW5nIHRoZSB0eXBlIGZpcnN0IGVuc3VyZXMgdGhhdCB0aGUgc3RydWN0IGxh
eW91dCBidWlsZGVyIGZpZ3VyZXMgb3V0IHRoZSBmaWVsZCdzCi0gICAgICAgICAgICAgICAgICAg
IC8vIG9mZnNldC4KLSAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnR5cGUu
dmlzaXQodmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgfTsKKyAgICBmb3IgKGxldCBmaWVsZCBv
ZiB0eXBlLmZpZWxkcykgeworICAgICAgICBmdW5jdGlvbiBzZXR1cEltcGxlbWVudGF0aW9uRGF0
YShuYXRpdmVGdW5jLCBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgbmF0
aXZlRnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRhdGEsIHZp
c2l0b3IpID0+IHsKKyAgICAgICAgICAgICAgICAvLyBWaXNpdGluZyB0aGUgdHlwZSBmaXJzdCBl
bnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQgYnVpbGRlciBmaWd1cmVzIG91dCB0aGUgZmll
bGQncworICAgICAgICAgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgICAgICAgICBpbXBsZW1l
bnRhdGlvbkRhdGEudHlwZS52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgICAgIH07CiAKLSAgICAg
ICAgICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVudGF0aW9uID0gKGFyZ3VtZW50TGlzdCwgbm9k
ZSkgPT4gewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1wbGVtZW50YXRpb24oYXJndW1l
bnRMaXN0LCBmaWVsZC5vZmZzZXQsIHR5cGUuc2l6ZSwgZmllbGQudHlwZS5zaXplKTsKLSAgICAg
ICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBm
dW5jdGlvbiBjcmVhdGVGaWVsZFR5cGUoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBmaWVsZC50eXBlLnZpc2l0KG5ldyBSZXdyaXRlcigpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZVJlZigpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVSZWYud3JhcCh0eXBlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGV0IGlzQ2FzdCA9IGZhbHNl
OwotICAgICAgICAgICAgbGV0IHNoYWRlclR5cGU7Ci0gICAgICAgICAgICBsZXQgbmF0aXZlRnVu
YzsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24gPSAoYXJndW1lbnRMaXN0
LCBub2RlKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uKGFyZ3Vt
ZW50TGlzdCwgZmllbGQub2Zmc2V0LCB0eXBlLnNpemUsIGZpZWxkLnR5cGUuc2l6ZSk7CisgICAg
ICAgICAgICB9OworICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJh
dG9yLmZpZWxkCi0gICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCi0gICAg
ICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUsIGNyZWF0
ZUZpZWxkVHlwZSgpLAotICAgICAgICAgICAgICAgIFtuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5v
cmlnaW4sIG51bGwsIGNyZWF0ZVR5cGVSZWYoKSldLCBpc0Nhc3QsIHNoYWRlclR5cGUpOwotICAg
ICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlXSwgb2Zm
c2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKLSAgICAgICAgICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoZmllbGRTaXplKSwgMCk7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UucGx1cyhvZmZzZXQpLCBmaWVsZFNpemUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHBy
b2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUaGUg
c2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmllbGRUeXBl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUudmlzaXQobmV3IFJl
d3JpdGVyKCkpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZVJlZigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUeXBlUmVmLndyYXAodHlwZSk7CisgICAg
ICAgIH0KKworICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7CisgICAgICAgIGxldCBzaGFkZXJU
eXBlOworICAgICAgICBsZXQgbmF0aXZlRnVuYzsKKworICAgICAgICAvLyBUaGUgZ2V0dGVyOiBv
cGVyYXRvci5maWVsZAorICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAg
ICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSwgY3JlYXRlRmll
bGRUeXBlKCksCisgICAgICAgICAgICBbbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBu
dWxsLCBjcmVhdGVUeXBlUmVmKCkpXSwgaXNDYXN0LCBzaGFkZXJUeXBlKTsKKyAgICAgICAgc2V0
dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RT
aXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihu
ZXcgRUJ1ZmZlcihmaWVsZFNpemUpLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdC5jb3B5RnJvbShi
YXNlLnBsdXMob2Zmc2V0KSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0pOworICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKworICAgICAg
ICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAgICAgbmF0aXZlRnVuYyA9IG5l
dyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3IuIiArIGZp
ZWxkLm5hbWUgKyAiPSIsIGNyZWF0ZVR5cGVSZWYoKSwKKyAgICAgICAgICAgIFsKKyAgICAgICAg
ICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZVR5cGVS
ZWYoKSksCisgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBu
dWxsLCBjcmVhdGVGaWVsZFR5cGUoKSkKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBpc0Nh
c3QsIHNoYWRlclR5cGUpOworICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVG
dW5jLCAoW2Jhc2UsIHZhbHVlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsK
KyAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihzdHJ1Y3RTaXpl
KSwgMCk7CisgICAgICAgICAgICByZXN1bHQuY29weUZyb20oYmFzZSwgc3RydWN0U2l6ZSk7Cisg
ICAgICAgICAgICByZXN1bHQucGx1cyhvZmZzZXQpLmNvcHlGcm9tKHZhbHVlLCBmaWVsZFNpemUp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSk7CisgICAgICAgIHByb2dy
YW0uYWRkKG5hdGl2ZUZ1bmMpOworCisgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZp
ZWxkCisgICAgICAgIGZ1bmN0aW9uIHNldHVwQW5kZXIoYWRkcmVzc1NwYWNlKQorICAgICAgICB7
CiAgICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCi0gICAgICAgICAgICAg
ICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUgKyAiPSIsIGNyZWF0ZVR5
cGVSZWYoKSwKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvciYuIiArIGZp
ZWxkLm5hbWUsIG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVG
aWVsZFR5cGUoKSksCiAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICBuZXcg
RnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZVR5cGVSZWYoKSksCi0gICAg
ICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3Jl
YXRlRmllbGRUeXBlKCkpCisgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCBudWxsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3IFB0clR5cGUoZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0
ZVR5cGVSZWYoKSkpCiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICBpc0Nhc3Qs
IHNoYWRlclR5cGUpOwotICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZl
RnVuYywgKFtiYXNlLCB2YWx1ZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7
Ci0gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKHN0cnVj
dFNpemUpLCAwKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuY29weUZyb20oYmFzZSwgc3RydWN0
U2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBsdXMob2Zmc2V0KS5jb3B5RnJvbSh2YWx1
ZSwgZmllbGRTaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlXSwgb2Zmc2V0LCBz
dHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5s
b2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJhc2UpCisgICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBXVHJhcEVycm9yKGZpZWxkLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxs
IGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KGJhc2UucGx1
cyhvZmZzZXQpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0
aXZlRnVuYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0
b3ImLmZpZWxkCi0gICAgICAgICAgICBmdW5jdGlvbiBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1
bmMoCi0gICAgICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yJi4iICsgZmll
bGQubmFtZSwgbmV3IFB0clR5cGUoZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0ZUZp
ZWxkVHlwZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3IEZ1bmNQYXJhbWV0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQu
b3JpZ2luLCBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQdHJUeXBlKGZp
ZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVUeXBlUmVmKCkpKQotICAgICAgICAgICAg
ICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOwotICAg
ICAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0s
IG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAg
IGJhc2UgPSBiYXNlLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2Up
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBFUHRyLmJveChiYXNlLnBsdXMob2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldHVwQW5kZXIoInRocmVhZCIpOwotICAgICAg
ICAgICAgc2V0dXBBbmRlcigidGhyZWFkZ3JvdXAiKTsKLSAgICAgICAgICAgIHNldHVwQW5kZXIo
ImRldmljZSIpOwotICAgICAgICAgICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsKICAgICAgICAg
fQorCisgICAgICAgIHNldHVwQW5kZXIoInRocmVhZCIpOworICAgICAgICBzZXR1cEFuZGVyKCJ0
aHJlYWRncm91cCIpOworICAgICAgICBzZXR1cEFuZGVyKCJkZXZpY2UiKTsKKyAgICAgICAgc2V0
dXBBbmRlcigiY29uc3RhbnQiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHN5bnRoZXNpemVTdHJ1
Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKK3sKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlw
ZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3ludGhlc2l6ZVN0cnVjdEFjY2Vz
c29yc0ZvclN0cnVjdFR5cGUocHJvZ3JhbSwgdHlwZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sIGIvVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCmluZGV4IGMxMmU1ZDk5ZGM3NGE2ZjE5MDFjOTVkZjkx
ZDM0YTA1YWU4NTVlMWMuLjk4ZTM4NTFmMTY5OWFhNmNlNjhiZmQ1YWI4NDYxYWU5N2RlZWQxYzEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAorKysg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKQEAgLTE0LDYgKzE0LDcg
QEAKIDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBlLmpzIj48L3NjcmlwdD4KIAogPHNjcmlwdCBzcmM9
IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQWxsb2NhdGVBdEVudHJ5
UG9pbnRzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBbm9ueW1vdXNWYXJpYWJsZS5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJBcnJheVR5cGUuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Rlc3QuanMKaW5kZXggMmJjZWE3ZDdkYTNjYjM4MmYxYWFiZTIxNjdlZjNhNzg5MTM5MjMzMy4u
NGQ4NTI4NGRhNmM0ODM4YTlkNTlhODhkNjU4OWMzYmI1NDdmOWQzYiAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCkBAIC03OTI0LDYgKzc5MjQsMTUyIEBAIHRlc3RzLmlubGlu
aW5nRG9lc250UHJvZHVjZUFsaWFzaW5nSXNzdWVzID0gKCkgPT4gewogICAgIGNoZWNrSW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAyMCk7CiB9CiAKK3Rlc3Rz
LnJldHVyblJlZmVyZW5jZVRvUGFyYW1ldGVyID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKGJvb2wgY29uZGl0aW9uKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gKmJhcihjb25kaXRpb24sIDEsIDIpOworICAgICAgICB9CisK
KyAgICAgICAgdGhyZWFkIGludCogYmFyKGJvb2wgY29uZGl0aW9uLCBpbnQgYSwgaW50IGIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb24gPyAmYSA6ICZiOworICAgICAg
ICB9CisgICAgYCk7CisKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFsgbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSkgXSksIDEpOworICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgWyBtYWtlQm9vbChwcm9ncmFt
LCBmYWxzZSkgXSksIDIpOworfQorCit0ZXN0cy5yZXR1cm5SZWZlcmVuY2VUb1BhcmFtZXRlcldp
dGhEaWZmZXJlbnRGdW5jdGlvbnMgPSAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAorICAgICAgICB0ZXN0IGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KmJhcigxMCkgKyAqYmF6KDIwKTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJh
cihpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZ4OworICAgICAgICB9CisK
KyAgICAgICAgdGhyZWFkIGludCogYmF6KGludCB5KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gJnk7CisgICAgICAgIH0KKyAgICBgKTsKKworICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAzMCk7Cit9CisKK3Rlc3RzLnJldHVyblJl
ZmVyZW5jZVRvU2FtZVBhcmFtZXRlciA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCisgICAgICAgIHRlc3QgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBwbHVzKGJhcig1KSwgYmFyKDcpKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwbHVzKHRo
cmVhZCBpbnQqIHgsIHRocmVhZCBpbnQqIHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAqeCArICp5OworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKyAgICBgKTsKKwor
ICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAx
MCk7Cit9CisKK3Rlc3RzLnJldHVyblJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZSA9ICgpID0+IHsK
KyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZvbygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqYmFyKCk7CisgICAgICAgIH0KKworICAgICAgICB0
aHJlYWQgaW50KiBiYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDQyOworICAg
ICAgICAgICAgcmV0dXJuICZhOworICAgICAgICB9CisgICAgYCk7CisKKyAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOworfQorCit0ZXN0
cy5yZXR1cm5SZWZlcmVuY2VUb0xvY2FsVmFyaWFibGVXaXRoTmVzdGluZyA9ICgpID0+IHsKKyAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZvbygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqYmFyKCkgKyAqYmF6KCk7CisgICAgICAgIH0KKworICAg
ICAgICB0aHJlYWQgaW50KiBiYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDIw
OworICAgICAgICAgICAgcmV0dXJuICZhOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGlu
dCogYmF6KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGEgPSAyMjsKKyAgICAgICAgICAg
IHJldHVybiAmYTsKKyAgICAgICAgfQorICAgIGApOworCisgICAgY2hlY2tJbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKK30KKwordGVzdHMuY29udmVy
dFB0clRvQXJyYXlSZWYgPSAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAg
ICAgICB0ZXN0IGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFyKClb
MF07CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50W10gYmFyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IHggPSA0MjsKKyAgICAgICAgICAgIHJldHVybiBAKCZ4KTsKKyAgICAg
ICAgfQorICAgIGApOworCisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSksIDQyKTsKK30KKwordGVzdHMuY29udmVydExvY2FsVmFyaWFibGVUb0Fy
cmF5UmVmID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVz
dCBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcigpWzBdOworICAg
ICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludFtdIGJhcigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCB4ID0gNDI7CisgICAgICAgICAgICByZXR1cm4gQHg7CisgICAgICAgIH0KKyAgICBg
KTsKKworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10pLCA0Mik7Cit9CisKK3Rlc3RzLnJlZmVyZW5jZVRha2VuVG9Mb2NhbFZhcmlhYmxlSW5FbnRy
eVBvaW50U2hvdWxkbnRNb3ZlQW55dGhpbmcgPSAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoYAorICAgICAgICB0ZXN0IGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBp
bnQgYSA9IDQyOworICAgICAgICAgICAgdGhyZWFkIGludCogYiA9ICZhOworICAgICAgICAgICAg
cmV0dXJuICpiOworICAgICAgICB9CisgICAgYCk7CisKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOworfTsKKwogb2tUb1Rlc3QgPSB0
cnVlOwogCiBsZXQgdGVzdEZpbHRlciA9IC8uKi87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1
bHQKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCmluZGV4IDI0NDE1ZjMz
YTE3MDliMmUwZTZkNWJlY2U2N2FhODk1MzA2Yjg5YmUuLjA4ZjRlZDViMDkzMWI2YmZiM2E0MjI4
OTc4MzdlZWY4YTFhYzMyOTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL2luZGV4Lmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXgu
aHRtbApAQCAtMTQsNiArMTQsNyBAQAogPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2Ny
aXB0PgogCiA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJBbGxvY2F0ZUF0RW50cnlQb2ludHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFu
b255bW91c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVJlZlR5cGUu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFycmF5VHlwZS5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350175</attachid>
            <date>2018-09-19 23:33:31 -0700</date>
            <delta_ts>2018-09-20 23:55:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188402-20180919233327.patch</filename>
            <type>text/plain</type>
            <size>30924</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NzUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggM2RhZWZhYTU1MTFjYTVmN2MyNGY3MmViMzM5NTgwYmM5
NzBhODBiMC4uMzFhMmEzODk3NDliYWFiOWIxMWUwYzdkMGY1NWQ2MjM2ZjZkYzY4OSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQz
IEBACisyMDE4LTA5LTEwICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dITFNMXSBMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2Nh
dGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBh
ZGRpdGlvbmFsIHByZXBhcmF0aW9uIHN0YWdlIGlzIG5vdyBwZXJmb3JtZWQgc28gdGhhdCBhbGwg
bG9jYWwKKyAgICAgICAgdmFyaWFibGVzIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZSBhbGxv
Y2F0ZWQgaW4gYSBzaW5nbGUgc3RydWN0IGF0CisgICAgICAgIGVudHJ5IHBvaW50cy4gQSBwb2lu
dGVyIHRvIHRoaXMgc3RydWN0IGlzIHRoZW4gcGFzc2VkIGZvciBmdW5jdGlvbgorICAgICAgICBj
YWxscy4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qczogVXBkYXRl
IGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGxvY2F0
ZUF0RW50cnlQb2ludHMuanM6IEFkZGVkIG5ldyBzdGFnZS4KKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9u
LnByb3RvdHlwZS5zZXQgYXJndW1lbnRMaXN0KTogQWRkIHNldHRlciBiZWNhdXNlCisgICAgICAg
IGFsbG9jYXRlQXRFbnRyeVBvaW50cyBuZWVkcyB0byBjaGFuZ2UgdGhpcy4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qczogUmVtb3ZlIGEgcmVkdW5k
YW50CisgICAgICAgIGNvbnN0cnVjdG9yIHRoYXQgd2Fzbid0IHVzZWQgYW55d2hlcmUuCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMucHJv
dG90eXBlLnNldCBwYXJhbWV0ZXJzKTogQWRkIHNldHRlci4KKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzOgorICAgICAgICAoRnVuY0RlZi5wcm90b3R5cGUuc2V0
IGJvZHkpOiBEaXR0by4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJl
LmpzOgorICAgICAgICAobGV0LnByZXBhcmUpOiBBZGQgY2FsbCB0byBhbGxvY2F0ZUF0RW50cnlQ
b2ludHMuIFRoaXMgY2FsbCBjYW5ub3QKKyAgICAgICAgaGFwcGVuIGFueSBlYXJsaWVyIGJlY2F1
c2UgaXQgZGVwZW5kcyBvbiBoYXZpbmcgdHlwZXMgZm9yIGNhbGwKKyAgICAgICAgYXJndW1lbnRz
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0UmV0dXJuKTogUmVzb2x2ZSBpc3N1ZSB3aGVyZSB0
aGUgcmV0dXJuCisgICAgICAgIHN0YXRlbWVudCdzIGZ1bmN0aW9uIHdhc24ndCBjb3BpZWQuIEEg
bnVsbCBjaGVjayBpcyByZXF1aXJlZCBhcyB0aGUKKyAgICAgICAgUmV3cml0ZXIgbWlnaHQgYmUg
dXNlZCBiZWZvcmUgdGhpcyBwcm9wZXJ0eSBpcyBzZXQuCisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU1BJUlYuaHRtbDogVXBkYXRlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzOiBBYnN0
cmFjdGVkIGxvZ2ljCisgICAgICAgIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGF0IGFs
bG9jYXRlQXRFbnRyeVBvaW50cyBjYW4gY3JlYXRlIHRoZQorICAgICAgICBhY2Nlc3NvcnMgZm9y
IHRoZSBzdHJ1Y3QgdHlwZSBpdCBpbnRyb2R1Y2VzLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuaHRtbDogVXBkYXRlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzOiBBZGQgbmV3IHRlc3RzIHRvIHZlcmlmeSB0aGUg
c3RhdGljCisgICAgICAgIGFsbG9jYXRpb24gdHJhbnNmb3JtIHdvcmtzIHNhZmVseS4KKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sOiBVcGRhdGUgZGVwZW5kZW5j
aWVzLgorCiAyMDE4LTA5LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ3Jhc2ggdW5kZXIgV2ViUHJvY2Vzc1Byb3h5OjpzdXNwZW5kZWRQYWdlV2FzRGVzdHJv
eWVkKFdlYktpdDo6U3VzcGVuZGVkUGFnZVByb3h5JikKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FsbC5qcwppbmRleCAzYzJjNDg3NDIwMDExMTVhMTcxMzQ4M2ExZjIzY2UyODY2OGJiOWM2Li5l
MjkxMGQ3OWQ2YzIzNTliNzYzMTYxOTgwMzE2YWZmMDk0MjI3MGYzIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvQWxsLmpzCkBAIC0zNyw2ICszNyw3IEBAIGxvYWQoIlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIpOwogCiBsb2FkKCJBZGRyZXNz
U3BhY2UuanMiKTsKK2xvYWQoIkFsbG9jYXRlQXRFbnRyeVBvaW50cy5qcyIpOwogbG9hZCgiQW5v
bnltb3VzVmFyaWFibGUuanMiKTsKIGxvYWQoIkFycmF5UmVmVHlwZS5qcyIpOwogbG9hZCgiQXJy
YXlUeXBlLmpzIik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9B
bGxvY2F0ZUF0RW50cnlQb2ludHMuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9B
bGxvY2F0ZUF0RW50cnlQb2ludHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg3NDdlNjM4ODFmZjRjZWE2YzBi
ZTMzZDAwOGUyNGRhZGE4YzZmMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcwpAQCAtMCwwICsxLDI1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworInVzZSBzdHJpY3QiOwor
CitmdW5jdGlvbiBnYXRoZXJFbnRyeVBvaW50cyhwcm9ncmFtKQoreworICAgIGNvbnN0IGVudHJ5
UG9pbnRzID0gbmV3IFNldCgpOworICAgIGZvciAobGV0IFtuYW1lLCBmdW5jRGVmc10gb2YgcHJv
Z3JhbS5mdW5jdGlvbnMpIHsKKyAgICAgICAgZm9yIChsZXQgZnVuY0RlZiBvZiBmdW5jRGVmcykg
eworICAgICAgICAgICAgaWYgKGZ1bmNEZWYuaXNFbnRyeVBvaW50KQorICAgICAgICAgICAgICAg
IGVudHJ5UG9pbnRzLmFkZChmdW5jRGVmKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZW50cnlQb2ludHM7Cit9CisKK2Z1bmN0aW9uIGdhdGhlckNhbGxlZXMoZnVuY0RlZnMpCit7Cisg
ICAgY29uc3QgY2FsbGVlU2V0ID0gbmV3IFNldCgpOworICAgIGNsYXNzIEZpbmRGdW5jdGlvbnNU
aGF0QXJlQ2FsbGVkIGV4dGVuZHMgVmlzaXRvcgorICAgIHsKKyAgICAgICAgdmlzaXRDYWxsRXhw
cmVzc2lvbihub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBzdXBlci52aXNpdENhbGxFeHBy
ZXNzaW9uKG5vZGUpOworICAgICAgICAgICAgaWYgKG5vZGUuZnVuYyBpbnN0YW5jZW9mIEZ1bmNE
ZWYgJiYgIWNhbGxlZVNldC5oYXMobm9kZS5mdW5jKSkgeworICAgICAgICAgICAgICAgIGNhbGxl
ZVNldC5hZGQobm9kZS5mdW5jKTsKKyAgICAgICAgICAgICAgICBub2RlLmZ1bmMudmlzaXQodGhp
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY29uc3QgdmlzaXRvciA9
IG5ldyBGaW5kRnVuY3Rpb25zVGhhdEFyZUNhbGxlZCgpOworICAgIGZvciAobGV0IGZ1bmNEZWYg
b2YgZnVuY0RlZnMpCisgICAgICAgIGZ1bmNEZWYudmlzaXQodmlzaXRvcik7CisgICAgcmV0dXJu
IGNhbGxlZVNldDsKK30KKworZnVuY3Rpb24gZ2F0aGVyVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJh
bWV0ZXJzKGZ1bmNEZWZzKQoreworICAgIGNvbnN0IHZhcnNBbmRQYXJhbXMgPSBuZXcgU2V0KCk7
CisgICAgY2xhc3MgVmFyQW5kUGFyYW1WaXNpdG9yIGV4dGVuZHMgVmlzaXRvciB7CisKKyAgICAg
ICAgY29uc3RydWN0b3IoaXNFbnRyeVBvaW50KQorICAgICAgICB7CisgICAgICAgICAgICBzdXBl
cigpOworICAgICAgICAgICAgdGhpcy5faXNFbnRyeVBvaW50ID0gaXNFbnRyeVBvaW50OworICAg
ICAgICB9CisKKyAgICAgICAgdmlzaXRGdW5jUGFyYW1ldGVyKG5vZGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghdGhpcy5faXNFbnRyeVBvaW50KQorICAgICAgICAgICAgICAgIHZhcnNB
bmRQYXJhbXMuYWRkKG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdmlzaXRWYXJpYWJsZURl
Y2wobm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyc0FuZFBhcmFtcy5hZGQobm9kZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jRGVmcykKKyAgICAg
ICAgZnVuYy52aXNpdChuZXcgVmFyQW5kUGFyYW1WaXNpdG9yKGZ1bmMuaXNFbnRyeVBvaW50KSk7
CisgICAgcmV0dXJuIHZhcnNBbmRQYXJhbXM7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUdsb2JhbFN0
cnVjdFR5cGVBbmRWYXJUb0ZpZWxkTWFwKG9yaWdpbiwgYWxsVmFyaWFibGVzQW5kRnVuY3Rpb25Q
YXJhbWV0ZXJzLCBmdW5jdGlvbnNUaGF0QXJlQ2FsbGVkQnlFbnRyeVBvaW50cykKK3sKKyAgICBj
b25zdCBnbG9iYWxTdHJ1Y3RUeXBlID0gbmV3IFN0cnVjdFR5cGUob3JpZ2luLCBudWxsKTsKKyAg
ICBsZXQgY291bnRlciA9IDA7CisgICAgY29uc3QgdmFyVG9GaWVsZE1hcCA9IG5ldyBNYXAoKTsK
KworICAgIGZvciAobGV0IHZhck9yUGFyYW0gb2YgYWxsVmFyaWFibGVzQW5kRnVuY3Rpb25QYXJh
bWV0ZXJzKSB7CisgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGBmaWVsZCR7Y291bnRlcisrfV8k
e3Zhck9yUGFyYW0ubmFtZX1gOworICAgICAgICBnbG9iYWxTdHJ1Y3RUeXBlLmFkZChuZXcgRmll
bGQodmFyT3JQYXJhbS5vcmlnaW4sIGZpZWxkTmFtZSwgdmFyT3JQYXJhbS50eXBlKSk7CisgICAg
ICAgIHZhclRvRmllbGRNYXAuc2V0KHZhck9yUGFyYW0sIGZpZWxkTmFtZSk7CisgICAgfQorCisg
ICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jdGlvbnNUaGF0QXJlQ2FsbGVkQnlFbnRyeVBvaW50cykg
eworICAgICAgICBpZiAoZnVuYy5yZXR1cm5UeXBlLm5hbWUgIT09ICJ2b2lkIikgeworICAgICAg
ICAgICAgY29uc3QgZmllbGROYW1lID0gYGZpZWxkJHtjb3VudGVyKyt9X3JldHVybl8ke2Z1bmMu
bmFtZX1gOworICAgICAgICAgICAgZ2xvYmFsU3RydWN0VHlwZS5hZGQobmV3IEZpZWxkKGZ1bmMu
b3JpZ2luLCBmaWVsZE5hbWUsIGZ1bmMucmV0dXJuVHlwZSkpOworICAgICAgICAgICAgZnVuYy5y
ZXR1cm5GaWVsZE5hbWUgPSBmaWVsZE5hbWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gWyBnbG9iYWxTdHJ1Y3RUeXBlLCB2YXJUb0ZpZWxkTWFwIF07Cit9CisKK2Z1bmN0aW9uIGFs
bG9jYXRlQXRFbnRyeVBvaW50cyhwcm9ncmFtKQoreworICAgIGNvbnN0IGVudHJ5UG9pbnRzID0g
Z2F0aGVyRW50cnlQb2ludHMocHJvZ3JhbSk7CisgICAgY29uc3QgYWxsQ2FsbGVlcyA9IGdhdGhl
ckNhbGxlZXMoZW50cnlQb2ludHMpOworICAgIGNvbnN0IGFsbEV4ZWN1dGVkRnVuY3Rpb25zID0g
bmV3IFNldChbLi4uZW50cnlQb2ludHMsIC4uLmFsbENhbGxlZXNdKTsKKyAgICBjb25zdCBhbGxW
YXJpYWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMgPSBnYXRoZXJWYXJpYWJsZXNBbmRGdW5jdGlv
blBhcmFtZXRlcnMoYWxsRXhlY3V0ZWRGdW5jdGlvbnMpOworCisgICAgaWYgKCFhbGxWYXJpYWJs
ZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMuc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
c3QgYW55RW50cnlQb2ludCA9IGVudHJ5UG9pbnRzLnZhbHVlcygpLm5leHQoKS52YWx1ZTsKKyAg
ICBjb25zdCBbIGdsb2JhbFN0cnVjdFR5cGUsIHZhclRvRmllbGRNYXAgXSA9IGNyZWF0ZUdsb2Jh
bFN0cnVjdFR5cGVBbmRWYXJUb0ZpZWxkTWFwKGFueUVudHJ5UG9pbnQub3JpZ2luLCBhbGxWYXJp
YWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMsIGFsbENhbGxlZXMpOworICAgIHByb2dyYW0uYWRk
KGdsb2JhbFN0cnVjdFR5cGUpOworICAgIC8vIEFsbCBvdGhlciBzdHJ1Y3QgYWNjZXNzb3JzIHdp
bGwgaGF2ZSBiZWVuIHN5bnRoZXNpemVkIGF0IHRoaXMgcG9pbnQgKHRoZXkgaGF2ZSB0byBiZSBz
eW50aGVzaXplZCBlYXJsaWVyIGZvciBjYWxsIHJlc29sdXRpb24pLgorICAgIHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnNGb3JTdHJ1Y3RUeXBlKHByb2dyYW0sIGdsb2JhbFN0cnVjdFR5cGUpOwor
CisgICAgY29uc3QgZ2xvYmFsU3RydWN0VHlwZVJlZiA9IFR5cGVSZWYud3JhcChnbG9iYWxTdHJ1
Y3RUeXBlKTsKKyAgICBjb25zdCBwdHJUb0dsb2JhbFN0cnVjdFR5cGUgPSBuZXcgUHRyVHlwZShh
bnlFbnRyeVBvaW50Lm9yaWdpbiwgInRocmVhZCIsIGdsb2JhbFN0cnVjdFR5cGVSZWYpOworICAg
IGNvbnN0IHB0clRvR2xvYmFsU3RydWN0VHlwZVJlZiA9IFR5cGVSZWYud3JhcChwdHJUb0dsb2Jh
bFN0cnVjdFR5cGUpOworCisgICAgY29uc3QgZnVuY05ld1BhcmFtZXRlck1hcHBpbmcgPSBuZXcg
TWFwKCk7CisgICAgZnVuY3Rpb24gdXBkYXRlRnVuY3Rpb24oZnVuYykKKyAgICB7CisgICAgICAg
IGNsYXNzIFVwZGF0ZUZ1bmN0aW9ucyBleHRlbmRzIFJld3JpdGVyIHsKKyAgICAgICAgICAgIGNv
bnN0cnVjdG9yKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdXBlcigpOworICAg
ICAgICAgICAgICAgIGlmIChmdW5jLmlzRW50cnlQb2ludCkKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fYWRkVmFyaWFibGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fcmVjb25maWd1cmVQYXJhbWV0ZXJzKCk7CisgICAgICAg
ICAgICAgICAgZnVuYy5ib2R5ID0gZnVuYy5fYm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgX2FkZFZhcmlhYmxlRGVjbGFyYXRpb24oKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlRGVjbCA9IG5ldyBWYXJpYWJsZURlY2wo
ZnVuYy5vcmlnaW4sIG51bGwsIGdsb2JhbFN0cnVjdFR5cGVSZWYsIG51bGwpOworICAgICAgICAg
ICAgICAgIHRoaXMubWFrZUdsb2JhbFN0cnVjdFZhcmlhYmxlUmVmID0gKCkgPT4gbmV3IE1ha2VQ
dHJFeHByZXNzaW9uKGZ1bmMub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHRoaXMuX3ZhcmlhYmxl
RGVjbCkpOworICAgICAgICAgICAgICAgIGZ1bmMuYm9keS5zdGF0ZW1lbnRzLnVuc2hpZnQodGhp
cy5fdmFyaWFibGVEZWNsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgX3JlY29uZmln
dXJlUGFyYW1ldGVycygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZnVu
Y1BhcmFtID0gbmV3IEZ1bmNQYXJhbWV0ZXIoZnVuYy5vcmlnaW4sIG51bGwsIHB0clRvR2xvYmFs
U3RydWN0VHlwZVJlZik7CisgICAgICAgICAgICAgICAgdGhpcy5tYWtlR2xvYmFsU3RydWN0VmFy
aWFibGVSZWYgPSAoKSA9PiAgVmFyaWFibGVSZWYud3JhcChmdW5jUGFyYW0pOworICAgICAgICAg
ICAgICAgIGZ1bmNOZXdQYXJhbWV0ZXJNYXBwaW5nLnNldChmdW5jLCBbIGZ1bmNQYXJhbSBdKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgX2NhbGxFeHByZXNzaW9uRm9yRmllbGROYW1l
KG5vZGUsIGZpZWxkTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZp
ZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJGaWVsZCBuYW1l
IHdhcyBudWxsIik7CisgICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYG9wZXJh
dG9yJi4ke2ZpZWxkTmFtZX1gOworICAgICAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlQW5kT3Zl
cmxvYWRzID0gcHJvZ3JhbS5nbG9iYWxOYW1lQ29udGV4dC5nZXQoRnVuYywgZnVuY3Rpb25OYW1l
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBjYWxsRXhwcmVzc2lvblJlc29sdXRpb24gPSBDYWxs
RXhwcmVzc2lvbi5yZXNvbHZlKG5vZGUub3JpZ2luLCBwb3NzaWJsZUFuZE92ZXJsb2FkcywgZnVu
Y3Rpb25OYW1lLCBbIHRoaXMubWFrZUdsb2JhbFN0cnVjdFZhcmlhYmxlUmVmKCkgXSwgWyBwdHJU
b0dsb2JhbFN0cnVjdFR5cGVSZWYgXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxFeHBy
ZXNzaW9uUmVzb2x1dGlvbi5jYWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfZGVy
ZWZlcmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JGaWVsZE5hbWUobm9kZSwgcmVzdWx0VHlwZSwgZmll
bGROYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGRlcmVmRXhwciA9
IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIHRoaXMuX2NhbGxFeHByZXNz
aW9uRm9yRmllbGROYW1lKG5vZGUsIGZpZWxkTmFtZSksIG5vZGUudHlwZSwgInRocmVhZCIpOwor
ICAgICAgICAgICAgICAgIGRlcmVmRXhwci50eXBlID0gcmVzdWx0VHlwZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZGVyZWZFeHByOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2aXNp
dFZhcmlhYmxlUmVmKG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCF2
YXJUb0ZpZWxkTWFwLmhhcyhub2RlLnZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN1cGVyLnZpc2l0VmFyaWFibGVSZWYobm9kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2RlcmVmZXJlbmNlZENhbGxFeHByZXNzaW9uRm9yRmllbGROYW1lKG5vZGUsIG5vZGUu
dmFyaWFibGUudHlwZSwgdmFyVG9GaWVsZE1hcC5nZXQobm9kZS52YXJpYWJsZSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChub2RlID09IHRoaXMuX3ZhcmlhYmxlRGVjbCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bm9kZS5pbml0aWFsaXplcikgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUudHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtub2RlfSBkb2Vzbid0
IGhhdmUgYSB0eXBlYCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXNzaWdubWVu
dChub2RlLm9yaWdpbiwgdGhpcy5fZGVyZWZlcmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JGaWVsZE5h
bWUobm9kZSwgbm9kZS50eXBlLCB2YXJUb0ZpZWxkTWFwLmdldChub2RlKSksIG5vZGUuaW5pdGlh
bGl6ZXIudmlzaXQodGhpcyksIG5vZGUudHlwZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgQmxvY2sobm9kZS5vcmlnaW4pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbm9kZSA9IHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuZnVuYyBpbnN0YW5jZW9mIEZ1bmNEZWYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGV0IGV4cHJzID0gW107CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGFub255bW91c1ZhcmlhYmxlQXNzaWdubWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChsZXQgaSA9IG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0aDsgaS0tOykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IG5vZGUuZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGU7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25vZGUuZnVuYy5wYXJhbWV0ZXJzW2ldfSBoYXMg
bm8gdHlwZWApOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5vbnltb3VzVmFyaWFi
bGUgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIHR5cGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwcnMucHVzaChhbm9ueW1vdXNWYXJpYWJsZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBleHBycy5wdXNoKG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBWYXJp
YWJsZVJlZi53cmFwKGFub255bW91c1ZhcmlhYmxlKSwgbm9kZS5hcmd1bWVudExpc3RbaV0sIHR5
cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFub255bW91c1ZhcmlhYmxlQXNzaWdubWVu
dHMucHVzaChuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgdGhpcy5fZGVyZWZlcmVuY2VkQ2Fs
bEV4cHJlc3Npb25Gb3JGaWVsZE5hbWUobm9kZS5mdW5jLnBhcmFtZXRlcnNbaV0sIG5vZGUuZnVu
Yy5wYXJhbWV0ZXJzW2ldLnR5cGUsIHZhclRvRmllbGRNYXAuZ2V0KG5vZGUuZnVuYy5wYXJhbWV0
ZXJzW2ldKSksIFZhcmlhYmxlUmVmLndyYXAoYW5vbnltb3VzVmFyaWFibGUpLCB0eXBlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZXhwcnMgPSBleHBycy5j
b25jYXQoYW5vbnltb3VzVmFyaWFibGVBc3NpZ25tZW50cyk7CisgICAgICAgICAgICAgICAgICAg
IGV4cHJzLnB1c2gobm9kZSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuZnVuYy5y
ZXR1cm5UeXBlLm5hbWUgIT09ICJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJz
LnB1c2godGhpcy5fZGVyZWZlcmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JGaWVsZE5hbWUobm9kZS5m
dW5jLCBub2RlLmZ1bmMucmV0dXJuVHlwZSwgbm9kZS5mdW5jLnJldHVybkZpZWxkTmFtZSkpOwor
CisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0ID0gWyB0aGlzLm1ha2VHbG9i
YWxTdHJ1Y3RWYXJpYWJsZVJlZigpIF07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
Q29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBleHBycyk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHZpc2l0UmV0dXJuKG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9k
ZSA9IHN1cGVyLnZpc2l0UmV0dXJuKG5vZGUpOworICAgICAgICAgICAgICAgIGlmICghZnVuYy5p
c0VudHJ5UG9pbnQgJiYgbm9kZS52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IENvbW1hRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgWworICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIHRoaXMuX2RlcmVmZXJlbmNlZENhbGxFeHBy
ZXNzaW9uRm9yRmllbGROYW1lKGZ1bmMsIGZ1bmMucmV0dXJuVHlwZSwgZnVuYy5yZXR1cm5GaWVs
ZE5hbWUpLCBub2RlLnZhbHVlLCBmdW5jLnJldHVyblR5cGUpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3IFJldHVybihub2RlLm9yaWdpbikgXSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGZ1bmMudmlzaXQobmV3IFVwZGF0ZUZ1bmN0aW9ucygpKTsKKyAgICB9CisK
KyAgICBmb3IgKGxldCBmdW5jRGVmIG9mIGFsbEV4ZWN1dGVkRnVuY3Rpb25zKQorICAgICAgICB1
cGRhdGVGdW5jdGlvbihmdW5jRGVmKTsKKworICAgIGZvciAobGV0IFtmdW5jLCBuZXdQYXJhbWV0
ZXJzXSBvZiBmdW5jTmV3UGFyYW1ldGVyTWFwcGluZykKKyAgICAgICAgZnVuYy5wYXJhbWV0ZXJz
ID0gbmV3UGFyYW1ldGVyczsKKworICAgIGZvciAobGV0IGZ1bmMgb2YgYWxsQ2FsbGVlcykKKyAg
ICAgICAgZnVuYy5fcmV0dXJuVHlwZSA9IFR5cGVSZWYud3JhcChwcm9ncmFtLnR5cGVzLmdldCgi
dm9pZCIpKTsKKworICAgIGNsYXNzIFVwZGF0ZUNhbGxFeHByZXNzaW9uUmV0dXJuVHlwZXMgZXh0
ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgICAg
ICAgICAgaWYgKG5vZGUuZnVuYyBpbnN0YW5jZW9mIEZ1bmNEZWYpCisgICAgICAgICAgICAgICAg
bm9kZS5fcmV0dXJuVHlwZSA9IG5vZGUucmVzdWx0VHlwZSA9IFR5cGVSZWYud3JhcChwcm9ncmFt
LnR5cGVzLmdldCgidm9pZCIpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjb25zdCB1cGRhdGVD
YWxsRXhwcmVzc2lvblZpc2l0b3IgPSBuZXcgVXBkYXRlQ2FsbEV4cHJlc3Npb25SZXR1cm5UeXBl
cygpOworICAgIGZvciAobGV0IGZ1bmMgb2YgYWxsRXhlY3V0ZWRGdW5jdGlvbnMpCisgICAgICAg
IGZ1bmMudmlzaXQodXBkYXRlQ2FsbEV4cHJlc3Npb25WaXNpdG9yKTsKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzIGIvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMKaW5kZXggNWZiZGQ1MDVm
NzlkNGIzMjZlMDkzZTBmYjc2Y2QzNzVkMGEyYzViYS4uNGU0ZDY1ZjA5MTM4MDRmNGQwZTcwYzAw
MmJmNjMxNDA2MGIwZWUyZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQ2FsbEV4cHJlc3Npb24uanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
Q2FsbEV4cHJlc3Npb24uanMKQEAgLTM2LDcgKzM2LDE0IEBAIGNsYXNzIENhbGxFeHByZXNzaW9u
IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgfQogICAgIAogICAgIGdldCBuYW1lKCkgeyByZXR1
cm4gdGhpcy5fbmFtZTsgfQorCiAgICAgZ2V0IGFyZ3VtZW50TGlzdCgpIHsgcmV0dXJuIHRoaXMu
X2FyZ3VtZW50TGlzdDsgfQorCisgICAgc2V0IGFyZ3VtZW50TGlzdChuZXdWYWx1ZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX2FyZ3VtZW50TGlzdCA9IG5ld1ZhbHVlOworICAgIH0KKwogICAgIGdl
dCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9pc0Nhc3Q7IH0KICAgICBnZXQgcmV0dXJuVHlwZSgp
IHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7IH0KICAgICAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzIGIvVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanMKaW5kZXggYTNiZWUxZmEyNDc1ZDFmNTZi
MzA1ZjU2ZDhkYjMzNmVhOGE0YTcxNy4uYTdmMzYxNmQ5YTFmNWMxNzA2NGM2MWI3Njg0ZjI0Mjhm
YjExNjc1YiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZl
ckJ1aWxkZXIuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlckJ1
aWxkZXIuanMKQEAgLTI1LDEyICsyNSw2IEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNzIEVCdWZm
ZXJCdWlsZGVyIGV4dGVuZHMgVmlzaXRvciB7Ci0gICAgY29uc3RydWN0b3IocHJvZ3JhbSkKLSAg
ICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtOwot
ICAgIH0KLSAgICAKICAgICBfY3JlYXRlRVB0cih0eXBlKQogICAgIHsKICAgICAgICAgaWYgKHR5
cGUuc2l6ZSA9PSBudWxsKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRnVuYy5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMKaW5kZXgg
Y2JjMmMzMzNmNjY2ZjY4N2MwN2QzM2RjMDE4OGNjOTg0NmEzZjZkMi4uNGY1ODkwNjA3YjFhMjkx
NzE4MjM0YWZhM2Q2ZTA2NmYxZDk5MDVkNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvRnVuYy5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9G
dW5jLmpzCkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7CiAgICAg
Z2V0IGlzRW50cnlQb2ludCgpIHsgcmV0dXJuIHRoaXMuc2hhZGVyVHlwZSAhPSBudWxsOyB9CiAg
ICAgZ2V0IHJldHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24oKSB7IHJldHVybiB0aGlzLmlz
Q2FzdCA/IHRoaXMucmV0dXJuVHlwZSA6IG51bGw7IH0KICAgICAKKyAgICBzZXQgcGFyYW1ldGVy
cyhuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBuZXdWYWx1ZTsK
KyAgICB9CisKICAgICBnZXQga2luZCgpIHsgcmV0dXJuIEZ1bmM7IH0KICAgICAKICAgICB0b0Rl
Y2xTdHJpbmcoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVu
Y0RlZi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMKaW5kZXgg
ZDY4ZTQwMzBlNTlhNTcxMTgyYzYwNGIzZTJiZDM3YTcwNDk1ODMyMy4uMzAxNmIxMzI1OTE3ZGQ3
MmVhYTdkZWQ4NWE2ZWIyN2U1ODAyOThhYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvRnVuY0RlZi5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9GdW5jRGVmLmpzCkBAIC0zMyw3ICszMywxMiBAQCBjbGFzcyBGdW5jRGVmIGV4dGVuZHMgRnVu
YyB7CiAgICAgfQogCiAgICAgZ2V0IGJvZHkoKSB7IHJldHVybiB0aGlzLl9ib2R5OyB9Ci0gICAg
CisKKyAgICBzZXQgYm9keShuZXdCb2R5KQorICAgIHsKKyAgICAgICAgdGhpcy5fYm9keSA9IG5l
d0JvZHk7CisgICAgfQorCiAgICAgcmV3cml0ZShyZXdyaXRlcikKICAgICB7CiAgICAgICAgIHRo
aXMuX3JldHVyblR5cGUgPSB0aGlzLl9yZXR1cm5UeXBlLnZpc2l0KHJld3JpdGVyKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMgYi9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCmluZGV4IDEzZWJkZTgwYmQ5MWNjYjY1
NDY4NjgxMjkyNTI2MzM0ZGQzODg3ZTguLjlmZTM2YmE4YzdiODYxZWUyYWNkMGEzMDg1NDhhYjlm
NmY5ZTNkZjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBh
cmUuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwpAQCAt
NTMsNyArNTMsNyBAQCBsZXQgcHJlcGFyZSA9ICgoKSA9PiB7CiAgICAgICAgIHJlc29sdmVOYW1l
c0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CiAgICAgICAgIHJlc29sdmVUeXBl
RGVmc0luRnVuY3Rpb25zKHByb2dyYW0pOwogICAgICAgICBjaGVja1R5cGVzV2l0aEFyZ3VtZW50
cyhwcm9ncmFtKTsKLSAgICAgICAgCisKICAgICAgICAgY2hlY2socHJvZ3JhbSk7CiAgICAgICAg
IGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOwogICAgICAgICByZXNvbHZlUHJvcGVydGllcyhw
cm9ncmFtKTsKQEAgLTY3LDYgKzY3LDcgQEAgbGV0IHByZXBhcmUgPSAoKCkgPT4gewogICAgICAg
ICBjaGVja1Byb2dyYW1XcmFwcGVkKHByb2dyYW0pOwogICAgICAgICBjaGVja1R5cGVzV2l0aEFy
Z3VtZW50cyhwcm9ncmFtKTsKICAgICAgICAgZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOworICAg
ICAgICBhbGxvY2F0ZUF0RW50cnlQb2ludHMocHJvZ3JhbSk7CiAgICAgICAgIHByb2dyYW0udmlz
aXQobmV3IFN0cnVjdExheW91dEJ1aWxkZXIoKSk7CiAgICAgICAgIGxhdGVDaGVja0FuZExheW91
dEJ1ZmZlcnMocHJvZ3JhbSk7CiAgICAgICAgIGlmIChzaG91bGRJbmxpbmUpCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCmluZGV4IDMwMjU4OTNhMDZhM2Y1OTAzMmI5
ZjZjZDQzZjEyNDY1MWYwMjZjYjkuLjI2N2U3YTMzMjM0YWYzNzJmMWUxMzRlZTYzZjk2Y2IxYzdm
NzgxNjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVy
LmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCkBAIC0y
MzMsNyArMjMzLDEwIEBAIGNsYXNzIFJld3JpdGVyIHsKICAgICAKICAgICB2aXNpdFJldHVybihu
b2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4obm9kZS5vcmlnaW4sIE5vZGUu
dmlzaXQobm9kZS52YWx1ZSwgdGhpcykpOworICAgICAgICBjb25zdCByZXR1cm5TdGF0ZW1lbnQg
PSBuZXcgUmV0dXJuKG5vZGUub3JpZ2luLCBOb2RlLnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpKTsK
KyAgICAgICAgaWYgKG5vZGUuZnVuYykKKyAgICAgICAgICAgIHJldHVyblN0YXRlbWVudC5mdW5j
ID0gbm9kZS5mdW5jOworICAgICAgICByZXR1cm4gcmV0dXJuU3RhdGVtZW50OwogICAgIH0KICAg
ICAKICAgICB2aXNpdENvbnRpbnVlKG5vZGUpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U1BJUlYuaHRtbAppbmRleCAwZDIzNzEwMDVlNzEwY2RjNjBmMDMzZGE1YTUxMWM0OWFlMDA1YzM2
Li44OTE4NjcxMWZmNWMwMTBmNTcyMGUxNjg4ZmYzY2E1ZGZkZWUyNGVhIDEwMDY0NAotLS0gYS9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCisrKyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwKQEAgLTIwLDYgKzIwLDcgQEAgdGQgewogICAg
IDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBlLmpzIj48L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3Jj
PSJBZGRyZXNzU3BhY2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJBbGxvY2F0ZUF0
RW50cnlQb2ludHMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJBbm9ueW1vdXNWYXJp
YWJsZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkFycmF5UmVmVHlwZS5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkFycmF5VHlwZS5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNz
b3JzLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFj
Y2Vzc29ycy5qcwppbmRleCBhMDE4MTQ2OGEyNWVkNGMwOTA1MGQ3YmYxZDYxZjQ0ZWQzYTBhYTY2
Li4yY2U0YmRiZGU2ZDJlYzFjOWI0ZmYwYWI5ZDExMTUxYjIwMmMwNzNiIDEwMDY0NAotLS0gYS9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpz
CisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nl
c3NvcnMuanMKQEAgLTIwLDk1ICsyMCw5MCBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogInVzZSBz
dHJpY3QiOwogCi1mdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pCitm
dW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzRm9yU3RydWN0VHlwZShwcm9ncmFtLCB0
eXBlKQogewotICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkgewot
ICAgICAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5cGUuZmllbGRz
KSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVG
dW5jLCBpbXBsZW1lbnRhdGlvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYXRp
dmVGdW5jLnZpc2l0SW1wbGVtZW50YXRpb25EYXRhID0gKGltcGxlbWVudGF0aW9uRGF0YSwgdmlz
aXRvcikgPT4gewotICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdGluZyB0aGUgdHlwZSBmaXJz
dCBlbnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQgYnVpbGRlciBmaWd1cmVzIG91dCB0aGUg
ZmllbGQncwotICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQuCi0gICAgICAgICAgICAgICAg
ICAgIGltcGxlbWVudGF0aW9uRGF0YS50eXBlLnZpc2l0KHZpc2l0b3IpOwotICAgICAgICAgICAg
ICAgIH07CisgICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHsKKyAgICAgICAgZnVu
Y3Rpb24gc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgaW1wbGVtZW50YXRpb24p
CisgICAgICAgIHsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlzaXRJbXBsZW1lbnRhdGlvbkRh
dGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7CisgICAgICAgICAgICAgICAg
Ly8gVmlzaXRpbmcgdGhlIHR5cGUgZmlyc3QgZW5zdXJlcyB0aGF0IHRoZSBzdHJ1Y3QgbGF5b3V0
IGJ1aWxkZXIgZmlndXJlcyBvdXQgdGhlIGZpZWxkJ3MKKyAgICAgICAgICAgICAgICAvLyBvZmZz
ZXQuCisgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnR5cGUudmlzaXQodmlzaXRv
cik7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbXBsZW1l
bnRhdGlvbiA9IChhcmd1bWVudExpc3QsIG5vZGUpID0+IHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGltcGxlbWVudGF0aW9uKGFyZ3VtZW50TGlzdCwgZmllbGQub2Zmc2V0LCB0eXBlLnNp
emUsIGZpZWxkLnR5cGUuc2l6ZSk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmllbGRUeXBlKCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQudHlwZS52aXNpdChuZXcg
UmV3cml0ZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZ1
bmN0aW9uIGNyZWF0ZVR5cGVSZWYoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBUeXBlUmVmLndyYXAodHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGxldCBpc0Nhc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIGxldCBzaGFkZXJUeXBl
OwotICAgICAgICAgICAgbGV0IG5hdGl2ZUZ1bmM7CisgICAgICAgICAgICBuYXRpdmVGdW5jLmlt
cGxlbWVudGF0aW9uID0gKGFyZ3VtZW50TGlzdCwgbm9kZSkgPT4geworICAgICAgICAgICAgICAg
IHJldHVybiBpbXBsZW1lbnRhdGlvbihhcmd1bWVudExpc3QsIGZpZWxkLm9mZnNldCwgdHlwZS5z
aXplLCBmaWVsZC50eXBlLnNpemUpOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQogCi0gICAg
ICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAotICAgICAgICAgICAgbmF0aXZl
RnVuYyA9IG5ldyBOYXRpdmVGdW5jKAotICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9w
ZXJhdG9yLiIgKyBmaWVsZC5uYW1lLCBjcmVhdGVGaWVsZFR5cGUoKSwKLSAgICAgICAgICAgICAg
ICBbbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkp
XSwgaXNDYXN0LCBzaGFkZXJUeXBlKTsKLSAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25E
YXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9
PiB7Ci0gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKGZp
ZWxkU2l6ZSksIDApOwotICAgICAgICAgICAgICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLnBsdXMo
b2Zmc2V0KSwgZmllbGRTaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9CisgICAg
ICAgIGxldCBpc0Nhc3QgPSBmYWxzZTsKKyAgICAgICAgbGV0IHNoYWRlclR5cGU7CisgICAgICAg
IGxldCBuYXRpdmVGdW5jOworCisgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxk
CisgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgIGZpZWxk
Lm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lLCBmaWVsZC50eXBlLAorICAgICAgICAg
ICAgW25ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgVHlwZVJlZi53cmFwKHR5
cGUpKV0sIGlzQ2FzdCwgc2hhZGVyVHlwZSk7CisgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25E
YXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9
PiB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoZmllbGRT
aXplKSwgMCk7CisgICAgICAgICAgICByZXN1bHQuY29weUZyb20oYmFzZS5wbHVzKG9mZnNldCks
IGZpZWxkU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9KTsKKyAg
ICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisKKyAgICAgICAgLy8gVGhlIHNldHRlcjog
b3BlcmF0b3IuZmllbGQ9CisgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAg
ICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lICsgIj0iLCBU
eXBlUmVmLndyYXAodHlwZSksCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgbmV3IEZ1
bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBUeXBlUmVmLndyYXAodHlwZSkpLAorICAg
ICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgZmllbGQu
dHlwZSkKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOwor
ICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2UsIHZhbHVl
XSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgIGxldCBy
ZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihzdHJ1Y3RTaXplKSwgMCk7CisgICAgICAgICAg
ICByZXN1bHQuY29weUZyb20oYmFzZSwgc3RydWN0U2l6ZSk7CisgICAgICAgICAgICByZXN1bHQu
cGx1cyhvZmZzZXQpLmNvcHlGcm9tKHZhbHVlLCBmaWVsZFNpemUpOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfSk7CisgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMp
OworCisgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgIGZ1bmN0
aW9uIHNldHVwQW5kZXIoYWRkcmVzc1NwYWNlKQorICAgICAgICB7CiAgICAgICAgICAgICBuYXRp
dmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCi0gICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCAi
b3BlcmF0b3IuIiArIGZpZWxkLm5hbWUgKyAiPSIsIGNyZWF0ZVR5cGVSZWYoKSwKKyAgICAgICAg
ICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUsIG5ldyBQdHJU
eXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBmaWVsZC50eXBlKSwKICAgICAgICAgICAg
ICAgICBbCi0gICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdp
biwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKSwKLSAgICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQ
YXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVGaWVsZFR5cGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBm
aWVsZC5vcmlnaW4sIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUHRyVHlwZShm
aWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgVHlwZVJlZi53cmFwKHR5cGUpKSkKICAgICAgICAg
ICAgICAgICBdLAogICAgICAgICAgICAgICAgIGlzQ2FzdCwgc2hhZGVyVHlwZSk7Ci0gICAgICAg
ICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2UsIHZhbHVlXSwg
b2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKLSAgICAgICAgICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoc3RydWN0U2l6ZSksIDApOwotICAgICAgICAg
ICAgICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLCBzdHJ1Y3RTaXplKTsKLSAgICAgICAgICAgICAg
ICByZXN1bHQucGx1cyhvZmZzZXQpLmNvcHlGcm9tKHZhbHVlLCBmaWVsZFNpemUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9u
RGF0YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkg
PT4geworICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLmxvYWRWYWx1ZSgpOworICAgICAgICAg
ICAgICAgIGlmICghYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJy
b3IoZmllbGQub3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwgZGVyZWZlcmVuY2UiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRVB0ci5ib3goYmFzZS5wbHVzKG9mZnNldCkpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKLSAgICAgICAgICAg
IGZ1bmN0aW9uIHNldHVwQW5kZXIoYWRkcmVzc1NwYWNlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKLSAgICAgICAgICAgICAgICAg
ICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3ImLiIgKyBmaWVsZC5uYW1lLCBuZXcgUHRyVHlwZShm
aWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgY3JlYXRlRmllbGRUeXBlKCkpLAotICAgICAgICAg
ICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sIG51bGwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3IFB0clR5cGUoZmllbGQub3JpZ2luLCBhZGRyZXNzU3Bh
Y2UsIGNyZWF0ZVR5cGVSZWYoKSkpCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAg
ICAgICAgICAgIGlzQ2FzdCwgc2hhZGVyVHlwZSk7Ci0gICAgICAgICAgICAgICAgc2V0dXBJbXBs
ZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBm
aWVsZFNpemUpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UubG9hZFZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYmFzZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwg
ZGVyZWZlcmVuY2UiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KGJhc2Uu
cGx1cyhvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBwcm9n
cmFtLmFkZChuYXRpdmVGdW5jKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2V0dXBBbmRlcigidGhyZWFkIik7Ci0gICAgICAgICAgICBzZXR1cEFuZGVyKCJ0aHJl
YWRncm91cCIpOwotICAgICAgICAgICAgc2V0dXBBbmRlcigiZGV2aWNlIik7Ci0gICAgICAgICAg
ICBzZXR1cEFuZGVyKCJjb25zdGFudCIpOwogICAgICAgICB9CisKKyAgICAgICAgc2V0dXBBbmRl
cigidGhyZWFkIik7CisgICAgICAgIHNldHVwQW5kZXIoInRocmVhZGdyb3VwIik7CisgICAgICAg
IHNldHVwQW5kZXIoImRldmljZSIpOworICAgICAgICBzZXR1cEFuZGVyKCJjb25zdGFudCIpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKQor
eworICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkgeworICAgICAg
ICBpZiAoISh0eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzRm9yU3RydWN0VHlwZShwcm9n
cmFtLCB0eXBlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0Lmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0
bWwKaW5kZXggYzEyZTVkOTlkYzc0YTZmMTkwMWM5NWRmOTFkMzRhMDVhZTg1NWUxYy4uOThlMzg1
MWYxNjk5YWE2Y2U2OGJmZDVhYjg0NjFhZTk3ZGVlZDFjMSAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuaHRtbApAQCAtMTQsNiArMTQsNyBAQAogPHNjcmlwdCBzcmM9Ik5hdGl2
ZVR5cGUuanMiPjwvc2NyaXB0PgogCiA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJBbGxvY2F0ZUF0RW50cnlQb2ludHMuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFycmF5VHlwZS5qcyI+
PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
LmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwppbmRleCA1ZmQ0YmIz
YmJmOTNhNTVjMjE1NzdlNDUwN2ExZTUwNDhkNGJmNTY2Li5iOTNmODM5ZjAxZjFjZjZjMWY3OTYx
ZTA4MzQ2NzcyNDRjMmZiZDhhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UZXN0LmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMK
QEAgLTc5MTcsNiArNzkxNywxNTIgQEAgdGVzdHMuaW5saW5pbmdEb2VzbnRQcm9kdWNlQWxpYXNp
bmdJc3N1ZXMgPSAoKSA9PiB7CiAgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSksIDIwKTsKIH0KIAordGVzdHMucmV0dXJuUmVmZXJlbmNlVG9QYXJh
bWV0ZXIgPSAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0
IGludCBmb28oYm9vbCBjb25kaXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
YmFyKGNvbmRpdGlvbiwgMSwgMik7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBi
YXIoYm9vbCBjb25kaXRpb24sIGludCBhLCBpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGNvbmRpdGlvbiA/ICZhIDogJmI7CisgICAgICAgIH0KKyAgICBgKTsKKworICAgIGNo
ZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgWyBtYWtlQm9vbChw
cm9ncmFtLCB0cnVlKSBdKSwgMSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbIG1ha2VCb29sKHByb2dyYW0sIGZhbHNlKSBdKSwgMik7Cit9CisK
K3Rlc3RzLnJldHVyblJlZmVyZW5jZVRvUGFyYW1ldGVyV2l0aERpZmZlcmVudEZ1bmN0aW9ucyA9
ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZv
bygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqYmFyKDEwKSArICpiYXooMjApOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gJng7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBi
YXooaW50IHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmeTsKKyAgICAgICAgfQor
ICAgIGApOworCisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSksIDMwKTsKK30KKwordGVzdHMucmV0dXJuUmVmZXJlbmNlVG9TYW1lUGFyYW1ldGVy
ID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQg
Zm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBsdXMoYmFyKDUpLCBiYXIoNykp
OworICAgICAgICB9CisKKyAgICAgICAgaW50IHBsdXModGhyZWFkIGludCogeCwgdGhyZWFkIGlu
dCogeSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICp4ICsgKnk7CisgICAgICAgIH0K
KworICAgICAgICB0aHJlYWQgaW50KiBiYXIoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAmeDsKKyAgICAgICAgfQorICAgIGApOworCisgICAgY2hlY2tJbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDEwKTsKK30KKwordGVzdHMucmV0dXJu
UmVmZXJlbmNlVG9Mb2NhbFZhcmlhYmxlID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpiYXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJhcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBhID0gNDI7CisgICAgICAgICAgICByZXR1cm4gJmE7Cisg
ICAgICAgIH0KKyAgICBgKTsKKworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9CisKK3Rlc3RzLnJldHVyblJlZmVyZW5jZVRvTG9j
YWxWYXJpYWJsZVdpdGhOZXN0aW5nID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVw
KGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICpiYXIoKSArICpiYXooKTsKKyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJhcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBhID0gMjA7CisgICAgICAgICAgICByZXR1cm4g
JmE7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXooKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnQgYSA9IDIyOworICAgICAgICAgICAgcmV0dXJuICZhOworICAgICAgICB9
CisgICAgYCk7CisKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdKSwgNDIpOworfQorCit0ZXN0cy5jb252ZXJ0UHRyVG9BcnJheVJlZiA9ICgpID0+
IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZvbygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIoKVswXTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRocmVhZCBpbnRbXSBiYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeCA9IDQy
OworICAgICAgICAgICAgcmV0dXJuIEAoJngpOworICAgICAgICB9CisgICAgYCk7CisKKyAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOwor
fQorCit0ZXN0cy5jb252ZXJ0TG9jYWxWYXJpYWJsZVRvQXJyYXlSZWYgPSAoKSA9PiB7CisgICAg
bGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0IGludCBmb28oKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYmFyKClbMF07CisgICAgICAgIH0KKworICAgICAgICB0aHJl
YWQgaW50W10gYmFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSA0MjsKKyAgICAg
ICAgICAgIHJldHVybiBAeDsKKyAgICAgICAgfQorICAgIGApOworCisgICAgY2hlY2tJbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKK30KKwordGVzdHMu
cmVmZXJlbmNlVGFrZW5Ub0xvY2FsVmFyaWFibGVJbkVudHJ5UG9pbnRTaG91bGRudE1vdmVBbnl0
aGluZyA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3Qg
aW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBhID0gNDI7CisgICAgICAgICAg
ICB0aHJlYWQgaW50KiBiID0gJmE7CisgICAgICAgICAgICByZXR1cm4gKmI7CisgICAgICAgIH0K
KyAgICBgKTsKKworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10pLCA0Mik7Cit9OworCiBva1RvVGVzdCA9IHRydWU7CiAKIGxldCB0ZXN0RmlsdGVy
ID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL2luZGV4Lmh0bWwKaW5kZXggMjQ0MTVmMzNhMTcwOWIyZTBlNmQ1YmVjZTY3YWE4
OTUzMDZiODliZS4uMDhmNGVkNWIwOTMxYjZiZmIzYTQyMjg5NzgzN2VlZjhhMWFjMzI5MCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbAorKysgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCkBAIC0xNCw2ICsxNCw3IEBA
CiA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZS5qcyI+PC9zY3JpcHQ+CiAKIDxzY3JpcHQgc3JjPSJB
ZGRyZXNzU3BhY2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkFsbG9jYXRlQXRFbnRyeVBv
aW50cy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQW5vbnltb3VzVmFyaWFibGUuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IkFycmF5UmVmVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iQXJyYXlUeXBlLmpzIj48L3NjcmlwdD4K
</data>
<flag name="review"
          id="367660"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
    <flag name="commit-queue"
          id="367770"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350419</attachid>
            <date>2018-09-21 14:02:29 -0700</date>
            <delta_ts>2018-09-21 14:08:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188402-20180921140222.patch</filename>
            <type>text/plain</type>
            <size>31720</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NzUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGE3ODQ1MDQwMDI4YjNiM2FiZWVhYWYyZjAzNzlhOGI5
NDYxOWQ4My4uNDQ3Y2Y5Y2UwODFlYmNkYTU1ZWQyZTY3NDkxOGUyMjJlMGY3MjhhZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQz
IEBACisyMDE4LTA5LTEwICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dITFNMXSBMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2Nh
dGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbiBh
ZGRpdGlvbmFsIHByZXBhcmF0aW9uIHN0YWdlIGlzIG5vdyBwZXJmb3JtZWQgc28gdGhhdCBhbGwg
bG9jYWwKKyAgICAgICAgdmFyaWFibGVzIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZSBhbGxv
Y2F0ZWQgaW4gYSBzaW5nbGUgc3RydWN0IGF0CisgICAgICAgIGVudHJ5IHBvaW50cy4gQSBwb2lu
dGVyIHRvIHRoaXMgc3RydWN0IGlzIHRoZW4gcGFzc2VkIGZvciBmdW5jdGlvbgorICAgICAgICBj
YWxscy4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qczogVXBkYXRl
IGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGxvY2F0
ZUF0RW50cnlQb2ludHMuanM6IEFkZGVkIG5ldyBzdGFnZS4KKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9u
LnByb3RvdHlwZS5zZXQgYXJndW1lbnRMaXN0KTogQWRkIHNldHRlciBiZWNhdXNlCisgICAgICAg
IGFsbG9jYXRlQXRFbnRyeVBvaW50cyBuZWVkcyB0byBjaGFuZ2UgdGhpcy4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qczogUmVtb3ZlIGEgcmVkdW5k
YW50CisgICAgICAgIGNvbnN0cnVjdG9yIHRoYXQgd2Fzbid0IHVzZWQgYW55d2hlcmUuCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMucHJv
dG90eXBlLnNldCBwYXJhbWV0ZXJzKTogQWRkIHNldHRlci4KKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzOgorICAgICAgICAoRnVuY0RlZi5wcm90b3R5cGUuc2V0
IGJvZHkpOiBEaXR0by4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJl
LmpzOgorICAgICAgICAobGV0LnByZXBhcmUpOiBBZGQgY2FsbCB0byBhbGxvY2F0ZUF0RW50cnlQ
b2ludHMuIFRoaXMgY2FsbCBjYW5ub3QKKyAgICAgICAgaGFwcGVuIGFueSBlYXJsaWVyIGJlY2F1
c2UgaXQgZGVwZW5kcyBvbiBoYXZpbmcgdHlwZXMgZm9yIGNhbGwKKyAgICAgICAgYXJndW1lbnRz
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0UmV0dXJuKTogUmVzb2x2ZSBpc3N1ZSB3aGVyZSB0
aGUgcmV0dXJuCisgICAgICAgIHN0YXRlbWVudCdzIGZ1bmN0aW9uIHdhc24ndCBjb3BpZWQuIEEg
bnVsbCBjaGVjayBpcyByZXF1aXJlZCBhcyB0aGUKKyAgICAgICAgUmV3cml0ZXIgbWlnaHQgYmUg
dXNlZCBiZWZvcmUgdGhpcyBwcm9wZXJ0eSBpcyBzZXQuCisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU1BJUlYuaHRtbDogVXBkYXRlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzOiBBYnN0
cmFjdGVkIGxvZ2ljCisgICAgICAgIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGF0IGFs
bG9jYXRlQXRFbnRyeVBvaW50cyBjYW4gY3JlYXRlIHRoZQorICAgICAgICBhY2Nlc3NvcnMgZm9y
IHRoZSBzdHJ1Y3QgdHlwZSBpdCBpbnRyb2R1Y2VzLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuaHRtbDogVXBkYXRlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzOiBBZGQgbmV3IHRlc3RzIHRvIHZlcmlmeSB0aGUg
c3RhdGljCisgICAgICAgIGFsbG9jYXRpb24gdHJhbnNmb3JtIHdvcmtzIHNhZmVseS4KKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sOiBVcGRhdGUgZGVwZW5kZW5j
aWVzLgorCiAyMDE4LTA5LTIxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4K
IAogICAgICAgICBCcmluZyB1cCBxdWV1ZXMgZm9yIGlPUyAxMiAoQnVpbGQgZml4KQpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzIGIvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCmluZGV4IDNjMmM0ODc0MjAwMTExNWExNzEzNDgzYTFm
MjNjZTI4NjY4YmI5YzYuLmUyOTEwZDc5ZDZjMjM1OWI3NjMxNjE5ODAzMTZhZmYwOTQyMjcwZjMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcworKysgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKQEAgLTM3LDYgKzM3LDcgQEAgbG9h
ZCgiUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlLmpzIik7
CiAKIGxvYWQoIkFkZHJlc3NTcGFjZS5qcyIpOworbG9hZCgiQWxsb2NhdGVBdEVudHJ5UG9pbnRz
LmpzIik7CiBsb2FkKCJBbm9ueW1vdXNWYXJpYWJsZS5qcyIpOwogbG9hZCgiQXJyYXlSZWZUeXBl
LmpzIik7CiBsb2FkKCJBcnJheVR5cGUuanMiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcyBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iODc0
N2U2Mzg4MWZmNGNlYTZjMGJlMzNkMDA4ZTI0ZGFkYThjNmYxCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzCkBA
IC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGdhdGhlckVudHJ5UG9pbnRzKHByb2dyYW0pCit7
CisgICAgY29uc3QgZW50cnlQb2ludHMgPSBuZXcgU2V0KCk7CisgICAgZm9yIChsZXQgW25hbWUs
IGZ1bmNEZWZzXSBvZiBwcm9ncmFtLmZ1bmN0aW9ucykgeworICAgICAgICBmb3IgKGxldCBmdW5j
RGVmIG9mIGZ1bmNEZWZzKSB7CisgICAgICAgICAgICBpZiAoZnVuY0RlZi5pc0VudHJ5UG9pbnQp
CisgICAgICAgICAgICAgICAgZW50cnlQb2ludHMuYWRkKGZ1bmNEZWYpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBlbnRyeVBvaW50czsKK30KKworZnVuY3Rpb24gZ2F0aGVyQ2FsbGVl
cyhmdW5jRGVmcykKK3sKKyAgICBjb25zdCBjYWxsZWVTZXQgPSBuZXcgU2V0KCk7CisgICAgY2xh
c3MgRmluZEZ1bmN0aW9uc1RoYXRBcmVDYWxsZWQgZXh0ZW5kcyBWaXNpdG9yCisgICAgeworICAg
ICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1
cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAgICAgICAgICBpZiAobm9kZS5mdW5j
IGluc3RhbmNlb2YgRnVuY0RlZiAmJiAhY2FsbGVlU2V0Lmhhcyhub2RlLmZ1bmMpKSB7CisgICAg
ICAgICAgICAgICAgY2FsbGVlU2V0LmFkZChub2RlLmZ1bmMpOworICAgICAgICAgICAgICAgIG5v
ZGUuZnVuYy52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjb25zdCB2aXNpdG9yID0gbmV3IEZpbmRGdW5jdGlvbnNUaGF0QXJlQ2FsbGVkKCk7CisgICAg
Zm9yIChsZXQgZnVuY0RlZiBvZiBmdW5jRGVmcykKKyAgICAgICAgZnVuY0RlZi52aXNpdCh2aXNp
dG9yKTsKKyAgICByZXR1cm4gY2FsbGVlU2V0OworfQorCitmdW5jdGlvbiBnYXRoZXJWYXJpYWJs
ZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMoZnVuY0RlZnMpCit7CisgICAgY29uc3QgdmFyc0FuZFBh
cmFtcyA9IG5ldyBTZXQoKTsKKyAgICBjbGFzcyBWYXJBbmRQYXJhbVZpc2l0b3IgZXh0ZW5kcyBW
aXNpdG9yIHsKKworICAgICAgICBjb25zdHJ1Y3Rvcihpc0VudHJ5UG9pbnQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAgICAgICB0aGlzLl9pc0VudHJ5UG9pbnQgPSBp
c0VudHJ5UG9pbnQ7CisgICAgICAgIH0KKworICAgICAgICB2aXNpdEZ1bmNQYXJhbWV0ZXIobm9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0VudHJ5UG9pbnQpCisgICAg
ICAgICAgICAgICAgdmFyc0FuZFBhcmFtcy5hZGQobm9kZSk7CisgICAgICAgIH0KKworICAgICAg
ICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgICAgICB7CisgICAgICAgICAgICB2YXJzQW5k
UGFyYW1zLmFkZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGxldCBmdW5jIG9m
IGZ1bmNEZWZzKQorICAgICAgICBmdW5jLnZpc2l0KG5ldyBWYXJBbmRQYXJhbVZpc2l0b3IoZnVu
Yy5pc0VudHJ5UG9pbnQpKTsKKyAgICByZXR1cm4gdmFyc0FuZFBhcmFtczsKK30KKworZnVuY3Rp
b24gY3JlYXRlR2xvYmFsU3RydWN0VHlwZUFuZFZhclRvRmllbGRNYXAob3JpZ2luLCBhbGxWYXJp
YWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMsIGZ1bmN0aW9uc1RoYXRBcmVDYWxsZWRCeUVudHJ5
UG9pbnRzKQoreworICAgIGNvbnN0IGdsb2JhbFN0cnVjdFR5cGUgPSBuZXcgU3RydWN0VHlwZShv
cmlnaW4sIG51bGwpOworICAgIGxldCBjb3VudGVyID0gMDsKKyAgICBjb25zdCB2YXJUb0ZpZWxk
TWFwID0gbmV3IE1hcCgpOworCisgICAgZm9yIChsZXQgdmFyT3JQYXJhbSBvZiBhbGxWYXJpYWJs
ZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMpIHsKKyAgICAgICAgY29uc3QgZmllbGROYW1lID0gYGZp
ZWxkJHtjb3VudGVyKyt9XyR7dmFyT3JQYXJhbS5uYW1lfWA7CisgICAgICAgIGdsb2JhbFN0cnVj
dFR5cGUuYWRkKG5ldyBGaWVsZCh2YXJPclBhcmFtLm9yaWdpbiwgZmllbGROYW1lLCB2YXJPclBh
cmFtLnR5cGUpKTsKKyAgICAgICAgdmFyVG9GaWVsZE1hcC5zZXQodmFyT3JQYXJhbSwgZmllbGRO
YW1lKTsKKyAgICB9CisKKyAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmN0aW9uc1RoYXRBcmVDYWxs
ZWRCeUVudHJ5UG9pbnRzKSB7CisgICAgICAgIGlmIChmdW5jLnJldHVyblR5cGUubmFtZSAhPT0g
InZvaWQiKSB7CisgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBgZmllbGQke2NvdW50ZXIr
K31fcmV0dXJuXyR7ZnVuYy5uYW1lfWA7CisgICAgICAgICAgICBnbG9iYWxTdHJ1Y3RUeXBlLmFk
ZChuZXcgRmllbGQoZnVuYy5vcmlnaW4sIGZpZWxkTmFtZSwgZnVuYy5yZXR1cm5UeXBlKSk7Cisg
ICAgICAgICAgICBmdW5jLnJldHVybkZpZWxkTmFtZSA9IGZpZWxkTmFtZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBbIGdsb2JhbFN0cnVjdFR5cGUsIHZhclRvRmllbGRNYXAgXTsK
K30KKworZnVuY3Rpb24gYWxsb2NhdGVBdEVudHJ5UG9pbnRzKHByb2dyYW0pCit7CisgICAgY29u
c3QgZW50cnlQb2ludHMgPSBnYXRoZXJFbnRyeVBvaW50cyhwcm9ncmFtKTsKKyAgICBjb25zdCBh
bGxDYWxsZWVzID0gZ2F0aGVyQ2FsbGVlcyhlbnRyeVBvaW50cyk7CisgICAgY29uc3QgYWxsRXhl
Y3V0ZWRGdW5jdGlvbnMgPSBuZXcgU2V0KFsuLi5lbnRyeVBvaW50cywgLi4uYWxsQ2FsbGVlc10p
OworICAgIGNvbnN0IGFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycyA9IGdhdGhlclZh
cmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycyhhbGxFeGVjdXRlZEZ1bmN0aW9ucyk7CisKKyAg
ICBpZiAoIWFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycy5zaXplKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBhbnlFbnRyeVBvaW50ID0gZW50cnlQb2ludHMudmFsdWVzKCku
bmV4dCgpLnZhbHVlOworICAgIGNvbnN0IFsgZ2xvYmFsU3RydWN0VHlwZSwgdmFyVG9GaWVsZE1h
cCBdID0gY3JlYXRlR2xvYmFsU3RydWN0VHlwZUFuZFZhclRvRmllbGRNYXAoYW55RW50cnlQb2lu
dC5vcmlnaW4sIGFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycywgYWxsQ2FsbGVlcyk7
CisgICAgcHJvZ3JhbS5hZGQoZ2xvYmFsU3RydWN0VHlwZSk7CisgICAgLy8gQWxsIG90aGVyIHN0
cnVjdCBhY2Nlc3NvcnMgd2lsbCBoYXZlIGJlZW4gc3ludGhlc2l6ZWQgYXQgdGhpcyBwb2ludCAo
dGhleSBoYXZlIHRvIGJlIHN5bnRoZXNpemVkIGVhcmxpZXIgZm9yIGNhbGwgcmVzb2x1dGlvbiku
CisgICAgc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29yc0ZvclN0cnVjdFR5cGUocHJvZ3JhbSwgZ2xv
YmFsU3RydWN0VHlwZSk7CisKKyAgICBjb25zdCBnbG9iYWxTdHJ1Y3RUeXBlUmVmID0gVHlwZVJl
Zi53cmFwKGdsb2JhbFN0cnVjdFR5cGUpOworICAgIGNvbnN0IHB0clRvR2xvYmFsU3RydWN0VHlw
ZSA9IG5ldyBQdHJUeXBlKGFueUVudHJ5UG9pbnQub3JpZ2luLCAidGhyZWFkIiwgZ2xvYmFsU3Ry
dWN0VHlwZVJlZik7CisgICAgY29uc3QgcHRyVG9HbG9iYWxTdHJ1Y3RUeXBlUmVmID0gVHlwZVJl
Zi53cmFwKHB0clRvR2xvYmFsU3RydWN0VHlwZSk7CisKKyAgICBjb25zdCBmdW5jTmV3UGFyYW1l
dGVyTWFwcGluZyA9IG5ldyBNYXAoKTsKKyAgICBmdW5jdGlvbiB1cGRhdGVGdW5jdGlvbihmdW5j
KQorICAgIHsKKyAgICAgICAgY2xhc3MgVXBkYXRlRnVuY3Rpb25zIGV4dGVuZHMgUmV3cml0ZXIg
eworICAgICAgICAgICAgY29uc3RydWN0b3IoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHN1cGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmMuaXNFbnRyeVBvaW50KQorICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9hZGRWYXJpYWJsZURlY2xhcmF0aW9uKCk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWNvbmZpZ3VyZVBhcmFt
ZXRlcnMoKTsKKyAgICAgICAgICAgICAgICBmdW5jLmJvZHkgPSBmdW5jLl9ib2R5LnZpc2l0KHRo
aXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfYWRkVmFyaWFibGVEZWNsYXJhdGlv
bigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGVEZWNsID0g
bmV3IFZhcmlhYmxlRGVjbChmdW5jLm9yaWdpbiwgbnVsbCwgZ2xvYmFsU3RydWN0VHlwZVJlZiwg
bnVsbCk7CisgICAgICAgICAgICAgICAgdGhpcy5tYWtlR2xvYmFsU3RydWN0VmFyaWFibGVSZWYg
PSAoKSA9PiBuZXcgTWFrZVB0ckV4cHJlc3Npb24oZnVuYy5vcmlnaW4sIFZhcmlhYmxlUmVmLndy
YXAodGhpcy5fdmFyaWFibGVEZWNsKSk7CisgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnN0YXRl
bWVudHMudW5zaGlmdCh0aGlzLl92YXJpYWJsZURlY2wpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBfcmVjb25maWd1cmVQYXJhbWV0ZXJzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBmdW5jUGFyYW0gPSBuZXcgRnVuY1BhcmFtZXRlcihmdW5jLm9yaWdpbiwg
bnVsbCwgcHRyVG9HbG9iYWxTdHJ1Y3RUeXBlUmVmKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1h
a2VHbG9iYWxTdHJ1Y3RWYXJpYWJsZVJlZiA9ICgpID0+ICBWYXJpYWJsZVJlZi53cmFwKGZ1bmNQ
YXJhbSk7CisgICAgICAgICAgICAgICAgZnVuY05ld1BhcmFtZXRlck1hcHBpbmcuc2V0KGZ1bmMs
IFsgZnVuY1BhcmFtIF0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfY2FsbEV4cHJl
c3Npb25Gb3JGaWVsZE5hbWUobm9kZSwgZmllbGROYW1lKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICghZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkZpZWxkIG5hbWUgd2FzIG51bGwiKTsKKyAgICAgICAgICAgICAgICBjb25zdCBmdW5j
dGlvbk5hbWUgPSBgb3BlcmF0b3ImLiR7ZmllbGROYW1lfWA7CisgICAgICAgICAgICAgICAgY29u
c3QgcG9zc2libGVBbmRPdmVybG9hZHMgPSBwcm9ncmFtLmdsb2JhbE5hbWVDb250ZXh0LmdldChG
dW5jLCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxFeHByZXNzaW9u
UmVzb2x1dGlvbiA9IENhbGxFeHByZXNzaW9uLnJlc29sdmUobm9kZS5vcmlnaW4sIHBvc3NpYmxl
QW5kT3ZlcmxvYWRzLCBmdW5jdGlvbk5hbWUsIFsgdGhpcy5tYWtlR2xvYmFsU3RydWN0VmFyaWFi
bGVSZWYoKSBdLCBbIHB0clRvR2xvYmFsU3RydWN0VHlwZVJlZiBdKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY2FsbEV4cHJlc3Npb25SZXNvbHV0aW9uLmNhbGw7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIF9kZXJlZmVyZW5jZWRDYWxsRXhwcmVzc2lvbkZvckZpZWxkTmFtZShub2Rl
LCByZXN1bHRUeXBlLCBmaWVsZE5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y29uc3QgZGVyZWZFeHByID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwg
dGhpcy5fY2FsbEV4cHJlc3Npb25Gb3JGaWVsZE5hbWUobm9kZSwgZmllbGROYW1lKSwgbm9kZS50
eXBlLCAidGhyZWFkIik7CisgICAgICAgICAgICAgICAgZGVyZWZFeHByLnR5cGUgPSByZXN1bHRU
eXBlOworICAgICAgICAgICAgICAgIHJldHVybiBkZXJlZkV4cHI7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXZhclRvRmllbGRNYXAuaGFzKG5vZGUudmFyaWFibGUpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRWYXJpYWJsZVJlZihub2RlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVyZWZlcmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JGaWVs
ZE5hbWUobm9kZSwgbm9kZS52YXJpYWJsZS50eXBlLCB2YXJUb0ZpZWxkTWFwLmdldChub2RlLnZh
cmlhYmxlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZpc2l0VmFyaWFibGVEZWNs
KG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0gdGhpcy5f
dmFyaWFibGVEZWNsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLmluaXRpYWxpemVyKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghbm9kZS50eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGAke25vZGV9IGRvZXNuJ3QgaGF2ZSBhIHR5cGVgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCB0aGlzLl9kZXJlZmVyZW5jZWRDYWxsRXhw
cmVzc2lvbkZvckZpZWxkTmFtZShub2RlLCBub2RlLnR5cGUsIHZhclRvRmllbGRNYXAuZ2V0KG5v
ZGUpKSwgbm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKSwgbm9kZS50eXBlKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9jayhub2RlLm9yaWdpbik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub2RlID0gc3VwZXIudmlzaXRDYWxsRXhw
cmVzc2lvbihub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5mdW5jIGluc3RhbmNlb2Yg
RnVuY0RlZikgeworICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcnMgPSBbXTsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgYW5vbnltb3VzVmFyaWFibGVBc3NpZ25tZW50cyA9IFtdOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gbm9kZS5mdW5jLnBh
cmFtZXRlcnNbaV0udHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bm9kZS5mdW5jLnBh
cmFtZXRlcnNbaV19IGhhcyBubyB0eXBlYCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBhbm9ueW1vdXNWYXJpYWJsZSA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwg
dHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBleHBycy5wdXNoKGFub255bW91c1Zhcmlh
YmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJzLnB1c2gobmV3IEFzc2lnbm1lbnQo
bm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAoYW5vbnltb3VzVmFyaWFibGUpLCBub2RlLmFy
Z3VtZW50TGlzdFtpXSwgdHlwZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYW5vbnltb3Vz
VmFyaWFibGVBc3NpZ25tZW50cy5wdXNoKG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCB0aGlz
Ll9kZXJlZmVyZW5jZWRDYWxsRXhwcmVzc2lvbkZvckZpZWxkTmFtZShub2RlLmZ1bmMucGFyYW1l
dGVyc1tpXSwgbm9kZS5mdW5jLnBhcmFtZXRlcnNbaV0udHlwZSwgdmFyVG9GaWVsZE1hcC5nZXQo
bm9kZS5mdW5jLnBhcmFtZXRlcnNbaV0pKSwgVmFyaWFibGVSZWYud3JhcChhbm9ueW1vdXNWYXJp
YWJsZSksIHR5cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBleHBycyA9IGV4cHJzLmNvbmNhdChhbm9ueW1vdXNWYXJpYWJsZUFzc2lnbm1lbnRzKTsKKyAg
ICAgICAgICAgICAgICAgICAgZXhwcnMucHVzaChub2RlKTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS5mdW5jLnJldHVyblR5cGUubmFtZSAhPT0gInZvaWQiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwcnMucHVzaCh0aGlzLl9kZXJlZmVyZW5jZWRDYWxsRXhwcmVzc2lvbkZv
ckZpZWxkTmFtZShub2RlLmZ1bmMsIG5vZGUuZnVuYy5yZXR1cm5UeXBlLCBub2RlLmZ1bmMucmV0
dXJuRmllbGROYW1lKSk7CisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3Qg
PSBbIHRoaXMubWFrZUdsb2JhbFN0cnVjdFZhcmlhYmxlUmVmKCkgXTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIGV4cHJzKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmlzaXRSZXR1cm4obm9kZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBub2RlID0gc3VwZXIudmlzaXRSZXR1cm4obm9kZSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFmdW5jLmlzRW50cnlQb2ludCAmJiBub2RlLnZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBbCisgICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgdGhpcy5fZGVy
ZWZlcmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JGaWVsZE5hbWUoZnVuYywgZnVuYy5yZXR1cm5UeXBl
LCBmdW5jLnJldHVybkZpZWxkTmFtZSksIG5vZGUudmFsdWUsIGZ1bmMucmV0dXJuVHlwZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmV0dXJuKG5vZGUub3JpZ2luKSBdKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnVuYy52aXNpdChuZXcgVXBkYXRlRnVuY3Rp
b25zKCkpOworICAgIH0KKworICAgIGZvciAobGV0IGZ1bmNEZWYgb2YgYWxsRXhlY3V0ZWRGdW5j
dGlvbnMpCisgICAgICAgIHVwZGF0ZUZ1bmN0aW9uKGZ1bmNEZWYpOworCisgICAgZm9yIChsZXQg
W2Z1bmMsIG5ld1BhcmFtZXRlcnNdIG9mIGZ1bmNOZXdQYXJhbWV0ZXJNYXBwaW5nKQorICAgICAg
ICBmdW5jLnBhcmFtZXRlcnMgPSBuZXdQYXJhbWV0ZXJzOworCisgICAgZm9yIChsZXQgZnVuYyBv
ZiBhbGxDYWxsZWVzKQorICAgICAgICBmdW5jLl9yZXR1cm5UeXBlID0gVHlwZVJlZi53cmFwKHBy
b2dyYW0udHlwZXMuZ2V0KCJ2b2lkIikpOworCisgICAgY2xhc3MgVXBkYXRlQ2FsbEV4cHJlc3Np
b25SZXR1cm5UeXBlcyBleHRlbmRzIFZpc2l0b3IgeworICAgICAgICB2aXNpdENhbGxFeHByZXNz
aW9uKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Np
b24obm9kZSk7CisgICAgICAgICAgICBpZiAobm9kZS5mdW5jIGluc3RhbmNlb2YgRnVuY0RlZikK
KyAgICAgICAgICAgICAgICBub2RlLl9yZXR1cm5UeXBlID0gbm9kZS5yZXN1bHRUeXBlID0gVHlw
ZVJlZi53cmFwKHByb2dyYW0udHlwZXMuZ2V0KCJ2b2lkIikpOworICAgICAgICB9CisgICAgfQor
ICAgIGNvbnN0IHVwZGF0ZUNhbGxFeHByZXNzaW9uVmlzaXRvciA9IG5ldyBVcGRhdGVDYWxsRXhw
cmVzc2lvblJldHVyblR5cGVzKCk7CisgICAgZm9yIChsZXQgZnVuYyBvZiBhbGxFeGVjdXRlZEZ1
bmN0aW9ucykKKyAgICAgICAgZnVuYy52aXNpdCh1cGRhdGVDYWxsRXhwcmVzc2lvblZpc2l0b3Ip
OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJl
c3Npb24uanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5q
cwppbmRleCA1ZmJkZDUwNWY3OWQ0YjMyNmUwOTNlMGZiNzZjZDM3NWQwYTJjNWJhLi40ZTRkNjVm
MDkxMzgwNGY0ZDBlNzBjMDAyYmY2MzE0MDYwYjBlZTJlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcworKysgYi9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcwpAQCAtMzYsNyArMzYsMTQgQEAgY2xh
c3MgQ2FsbEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICB9CiAgICAgCiAgICAg
Z2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9CisKICAgICBnZXQgYXJndW1lbnRMaXN0
KCkgeyByZXR1cm4gdGhpcy5fYXJndW1lbnRMaXN0OyB9CisKKyAgICBzZXQgYXJndW1lbnRMaXN0
KG5ld1ZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5fYXJndW1lbnRMaXN0ID0gbmV3VmFsdWU7
CisgICAgfQorCiAgICAgZ2V0IGlzQ2FzdCgpIHsgcmV0dXJuIHRoaXMuX2lzQ2FzdDsgfQogICAg
IGdldCByZXR1cm5UeXBlKCkgeyByZXR1cm4gdGhpcy5fcmV0dXJuVHlwZTsgfQogICAgIApkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanMg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwppbmRleCBh
M2JlZTFmYTI0NzVkMWY1NmIzMDVmNTZkOGRiMzM2ZWE4YTRhNzE3Li5hN2YzNjE2ZDlhMWY1YzE3
MDY0YzYxYjc2ODRmMjQyOGZiMTE2NzViIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwpAQCAtMjUsMTIgKzI1LDYgQEAKICJ1c2Ugc3RyaWN0
IjsKIAogY2xhc3MgRUJ1ZmZlckJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICBjb25zdHJ1
Y3Rvcihwcm9ncmFtKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5fcHJv
Z3JhbSA9IHByb2dyYW07Ci0gICAgfQotICAgIAogICAgIF9jcmVhdGVFUHRyKHR5cGUpCiAgICAg
ewogICAgICAgICBpZiAodHlwZS5zaXplID09IG51bGwpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRnVuYy5qcwppbmRleCBjYmMyYzMzM2Y2NjZmNjg3YzA3ZDMzZGMwMTg4Y2M5ODQ2YTNmNmQy
Li40ZjU4OTA2MDdiMWEyOTE3MTgyMzRhZmEzZDZlMDY2ZjFkOTkwNWQ1IDEwMDY0NAotLS0gYS9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMKQEAgLTU0LDYgKzU0LDExIEBAIGNsYXNzIEZ1bmMgZXh0
ZW5kcyBOb2RlIHsKICAgICBnZXQgaXNFbnRyeVBvaW50KCkgeyByZXR1cm4gdGhpcy5zaGFkZXJU
eXBlICE9IG51bGw7IH0KICAgICBnZXQgcmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbigp
IHsgcmV0dXJuIHRoaXMuaXNDYXN0ID8gdGhpcy5yZXR1cm5UeXBlIDogbnVsbDsgfQogICAgIAor
ICAgIHNldCBwYXJhbWV0ZXJzKG5ld1ZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcGFyYW1l
dGVycyA9IG5ld1ZhbHVlOworICAgIH0KKwogICAgIGdldCBraW5kKCkgeyByZXR1cm4gRnVuYzsg
fQogICAgIAogICAgIHRvRGVjbFN0cmluZygpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RnVuY0RlZi5qcwppbmRleCBkNjhlNDAzMGU1OWE1NzExODJjNjA0YjNlMmJkMzdhNzA0OTU4MzIz
Li4zMDE2YjEzMjU5MTdkZDcyZWFhN2RlZDg1YTZlYjI3ZTU4MDI5OGFjIDEwMDY0NAotLS0gYS9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCisrKyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMKQEAgLTMzLDcgKzMzLDEyIEBAIGNsYXNzIEZ1
bmNEZWYgZXh0ZW5kcyBGdW5jIHsKICAgICB9CiAKICAgICBnZXQgYm9keSgpIHsgcmV0dXJuIHRo
aXMuX2JvZHk7IH0KLSAgICAKKworICAgIHNldCBib2R5KG5ld0JvZHkpCisgICAgeworICAgICAg
ICB0aGlzLl9ib2R5ID0gbmV3Qm9keTsKKyAgICB9CisKICAgICByZXdyaXRlKHJld3JpdGVyKQog
ICAgIHsKICAgICAgICAgdGhpcy5fcmV0dXJuVHlwZSA9IHRoaXMuX3JldHVyblR5cGUudmlzaXQo
cmV3cml0ZXIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJl
cGFyZS5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKaW5kZXgg
MTNlYmRlODBiZDkxY2NiNjU0Njg2ODEyOTI1MjYzMzRkZDM4ODdlOC4uOWZlMzZiYThjN2I4NjFl
ZTJhY2QwYTMwODU0OGFiOWY2ZjllM2RmMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUHJlcGFyZS5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9QcmVwYXJlLmpzCkBAIC01Myw3ICs1Myw3IEBAIGxldCBwcmVwYXJlID0gKCgpID0+IHsKICAg
ICAgICAgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKICAg
ICAgICAgcmVzb2x2ZVR5cGVEZWZzSW5GdW5jdGlvbnMocHJvZ3JhbSk7CiAgICAgICAgIGNoZWNr
VHlwZXNXaXRoQXJndW1lbnRzKHByb2dyYW0pOwotICAgICAgICAKKwogICAgICAgICBjaGVjayhw
cm9ncmFtKTsKICAgICAgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7CiAgICAgICAgIHJl
c29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOwpAQCAtNjcsNiArNjcsNyBAQCBsZXQgcHJlcGFyZSA9
ICgoKSA9PiB7CiAgICAgICAgIGNoZWNrUHJvZ3JhbVdyYXBwZWQocHJvZ3JhbSk7CiAgICAgICAg
IGNoZWNrVHlwZXNXaXRoQXJndW1lbnRzKHByb2dyYW0pOwogICAgICAgICBmaW5kSGlnaFpvbWJp
ZXMocHJvZ3JhbSk7CisgICAgICAgIGFsbG9jYXRlQXRFbnRyeVBvaW50cyhwcm9ncmFtKTsKICAg
ICAgICAgcHJvZ3JhbS52aXNpdChuZXcgU3RydWN0TGF5b3V0QnVpbGRlcigpKTsKICAgICAgICAg
bGF0ZUNoZWNrQW5kTGF5b3V0QnVmZmVycyhwcm9ncmFtKTsKICAgICAgICAgaWYgKHNob3VsZElu
bGluZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVy
LmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKaW5kZXggMzAy
NTg5M2EwNmEzZjU5MDMyYjlmNmNkNDNmMTI0NjUxZjAyNmNiOS4uMjY3ZTdhMzMyMzRhZjM3MmYx
ZTEzNGVlNjNmOTZjYjFjN2Y3ODE2MyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmV3cml0ZXIuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmV3cml0ZXIuanMKQEAgLTIzMyw3ICsyMzMsMTAgQEAgY2xhc3MgUmV3cml0ZXIgewogICAgIAog
ICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFJldHVybihu
b2RlLm9yaWdpbiwgTm9kZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKSk7CisgICAgICAgIGNvbnN0
IHJldHVyblN0YXRlbWVudCA9IG5ldyBSZXR1cm4obm9kZS5vcmlnaW4sIE5vZGUudmlzaXQobm9k
ZS52YWx1ZSwgdGhpcykpOworICAgICAgICBpZiAobm9kZS5mdW5jKQorICAgICAgICAgICAgcmV0
dXJuU3RhdGVtZW50LmZ1bmMgPSBub2RlLmZ1bmM7CisgICAgICAgIHJldHVybiByZXR1cm5TdGF0
ZW1lbnQ7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29udGludWUobm9kZSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwgYi9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCmluZGV4IDBkMjM3MTAwNWU3MTBjZGM2MGYwMzNk
YTVhNTExYzQ5YWUwMDVjMzYuLjg5MTg2NzExZmY1YzAxMGY1NzIwZTE2ODhmZjNjYTVkZmRlZTI0
ZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwK
KysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbApAQCAtMjAsNiAr
MjAsNyBAQCB0ZCB7CiAgICAgPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0Pgog
CiAgICAgPHNjcmlwdCBzcmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkFsbG9jYXRlQXRFbnRyeVBvaW50cy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQXJy
YXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQXJyYXlUeXBlLmpzIj48
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRo
ZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
eW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCmluZGV4IDUzYWI2YjU0NDI0ODM1NzQyNjNjMWRj
Njg5MTYxYWRkMjY4NWVjYWIuLjc4NTllZWI0YjRmNWNiNWVmZTZmZDAyZGVhYjYzNzBkYmQ5YjUz
OTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3lu
dGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwpAQCAtMjAsMTA5ICsyMCw5OCBAQAogICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogInVzZSBzdHJpY3QiOwogCi1mdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNj
ZXNzb3JzKHByb2dyYW0pCitmdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzRm9yU3Ry
dWN0VHlwZShwcm9ncmFtLCB0eXBlKQogewotICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50
eXBlcy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgU3RydWN0VHlw
ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAobGV0IGZp
ZWxkIG9mIHR5cGUuZmllbGRzKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBzZXR1cEltcGxlbWVu
dGF0aW9uRGF0YShuYXRpdmVGdW5jLCBpbXBsZW1lbnRhdGlvbikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBuYXRpdmVGdW5jLnZpc2l0SW1wbGVtZW50YXRpb25EYXRhID0gKGltcGxl
bWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4gewotICAgICAgICAgICAgICAgICAgICAvLyBWaXNp
dGluZyB0aGUgdHlwZSBmaXJzdCBlbnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQgYnVpbGRl
ciBmaWd1cmVzIG91dCB0aGUgZmllbGQncwotICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQu
Ci0gICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS50eXBlLnZpc2l0KHZpc2l0
b3IpOwotICAgICAgICAgICAgICAgIH07CisgICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVs
ZHMpIHsKKyAgICAgICAgZnVuY3Rpb24gc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVu
YywgaW1wbGVtZW50YXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlz
aXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7
CisgICAgICAgICAgICAgICAgLy8gVmlzaXRpbmcgdGhlIHR5cGUgZmlyc3QgZW5zdXJlcyB0aGF0
IHRoZSBzdHJ1Y3QgbGF5b3V0IGJ1aWxkZXIgZmlndXJlcyBvdXQgdGhlIGZpZWxkJ3MKKyAgICAg
ICAgICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRh
LnR5cGUudmlzaXQodmlzaXRvcik7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAg
bmF0aXZlRnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRhdGEs
IHZpc2l0b3IpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXRpbmcgdGhlIHR5cGUg
Zmlyc3QgZW5zdXJlcyB0aGF0IHRoZSBzdHJ1Y3QgbGF5b3V0IGJ1aWxkZXIgZmlndXJlcyBvdXQg
dGhlIGZpZWxkJ3MKLSAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0LgotICAgICAgICAgICAg
ICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS52aXNpdCh2aXNpdG9yKTsKLSAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbiA9IChhcmd1
bWVudExpc3QsIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW1wbGVtZW50YXRp
b24oYXJndW1lbnRMaXN0LCBmaWVsZC5vZmZzZXQsIHR5cGUuc2l6ZSwgZmllbGQudHlwZS5zaXpl
KTsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVu
dGF0aW9uID0gKGFyZ3VtZW50TGlzdCwgbm9kZSkgPT4gewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW1wbGVtZW50YXRpb24oYXJndW1lbnRMaXN0LCBmaWVsZC5vZmZzZXQsIHR5cGUuc2l6
ZSwgZmllbGQudHlwZS5zaXplKTsKLSAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgbmF0
aXZlRnVuYy5pbXBsZW1lbnRhdGlvbkRhdGEgPSB7CisgICAgICAgICAgICAgICAgc3RydWN0VHlw
ZTogdHlwZSwKKyAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLAorICAgICAgICAgICAg
ICAgIHR5cGU6IGZpZWxkLnR5cGUsCisgICAgICAgICAgICAgICAgb2Zmc2V0OiBmaWVsZC5vZmZz
ZXQsCisgICAgICAgICAgICAgICAgc2l6ZTogZmllbGQudHlwZS5zaXplCisgICAgICAgICAgICB9
OworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVudGF0aW9u
RGF0YSA9IHsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0VHlwZTogdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgbmFtZTogZmllbGQubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTog
ZmllbGQudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBmaWVsZC5vZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgIHNpemU6IGZpZWxkLnR5cGUuc2l6ZQotICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZ1bmN0aW9uIGNy
ZWF0ZUZpZWxkVHlwZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZp
ZWxkLnR5cGUudmlzaXQobmV3IFJld3JpdGVyKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlUmVmKCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gVHlwZVJlZi53cmFwKHR5cGUpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICBsZXQgc2hhZGVyVHlwZTsKLSAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jOworICAgICAg
ICBsZXQgaXNDYXN0ID0gZmFsc2U7CisgICAgICAgIGxldCBzaGFkZXJUeXBlOworICAgICAgICBs
ZXQgbmF0aXZlRnVuYzsKIAotICAgICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmll
bGQKLSAgICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKLSAgICAgICAgICAg
ICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSwgY3JlYXRlRmllbGRU
eXBlKCksCi0gICAgICAgICAgICAgICAgW25ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwg
bnVsbCwgY3JlYXRlVHlwZVJlZigpKV0sIGlzQ2FzdCwgc2hhZGVyVHlwZSk7Ci0gICAgICAgICAg
ICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0
cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4gewotICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgRVB0cihuZXcgRUJ1ZmZlcihmaWVsZFNpemUpLCAwKTsKLSAgICAgICAgICAgICAgICByZXN1
bHQuY29weUZyb20oYmFzZS5wbHVzKG9mZnNldCksIGZpZWxkU2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcHJvZ3JhbS5h
ZGQobmF0aXZlRnVuYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6
IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAor
ICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAgICAgICAgICBmaWVsZC5v
cmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSwgZmllbGQudHlwZSwKKyAgICAgICAgICAg
IFtuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIFR5cGVSZWYud3JhcCh0eXBl
KSldLCBpc0Nhc3QsIHNoYWRlclR5cGUpOworICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0
YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4g
eworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKGZpZWxkU2l6
ZSksIDApOworICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UucGx1cyhvZmZzZXQpLCBm
aWVsZFNpemUpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSk7CisgICAg
ICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworCisgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9w
ZXJhdG9yLmZpZWxkPQorICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAg
ICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSArICI9IiwgVHlw
ZVJlZi53cmFwKHR5cGUpLAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIG5ldyBGdW5j
UGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgVHlwZVJlZi53cmFwKHR5cGUpKSwKKyAgICAg
ICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGZpZWxkLnR5
cGUpCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgaXNDYXN0LCBzaGFkZXJUeXBlKTsKKyAg
ICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlLCB2YWx1ZV0s
IG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoc3RydWN0U2l6ZSksIDApOworICAgICAgICAgICAg
cmVzdWx0LmNvcHlGcm9tKGJhc2UsIHN0cnVjdFNpemUpOworICAgICAgICAgICAgcmVzdWx0LnBs
dXMob2Zmc2V0KS5jb3B5RnJvbSh2YWx1ZSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0pOworICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsK
KworICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICBmdW5jdGlv
biBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkKKyAgICAgICAgewogICAgICAgICAgICAgbmF0aXZl
RnVuYyA9IG5ldyBOYXRpdmVGdW5jKAotICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9w
ZXJhdG9yLiIgKyBmaWVsZC5uYW1lICsgIj0iLCBjcmVhdGVUeXBlUmVmKCksCisgICAgICAgICAg
ICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3ImLiIgKyBmaWVsZC5uYW1lLCBuZXcgUHRyVHlw
ZShmaWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgZmllbGQudHlwZSksCiAgICAgICAgICAgICAg
ICAgWwotICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4s
IG51bGwsIGNyZWF0ZVR5cGVSZWYoKSksCi0gICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFy
YW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlRmllbGRUeXBlKCkpCisgICAgICAgICAg
ICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgZmll
bGQub3JpZ2luLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFB0clR5cGUoZmll
bGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIFR5cGVSZWYud3JhcCh0eXBlKSkpCiAgICAgICAgICAg
ICAgICAgXSwKICAgICAgICAgICAgICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOwotICAgICAgICAg
ICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlLCB2YWx1ZV0sIG9m
ZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7Ci0gICAgICAgICAgICAgICAgbGV0IHJl
c3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKHN0cnVjdFNpemUpLCAwKTsKLSAgICAgICAgICAg
ICAgICByZXN1bHQuY29weUZyb20oYmFzZSwgc3RydWN0U2l6ZSk7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0LnBsdXMob2Zmc2V0KS5jb3B5RnJvbSh2YWx1ZSwgZmllbGRTaXplKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRh
dGEobmF0aXZlRnVuYywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+
IHsKKyAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWJhc2UpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9y
KGZpZWxkLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEVQdHIuYm94KGJhc2UucGx1cyhvZmZzZXQpKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCi0gICAgICAgICAgICBm
dW5jdGlvbiBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCi0gICAgICAgICAgICAgICAgICAg
IGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yJi4iICsgZmllbGQubmFtZSwgbmV3IFB0clR5cGUoZmll
bGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0ZUZpZWxkVHlwZSgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCBudWxsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNl
LCBjcmVhdGVUeXBlUmVmKCkpKQotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAg
ICAgICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOwotICAgICAgICAgICAgICAgIHNldHVwSW1wbGVt
ZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmll
bGRTaXplKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLmxvYWRWYWx1ZSgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRl
cmVmZXJlbmNlIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChiYXNlLnBs
dXMob2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcHJvZ3Jh
bS5hZGQobmF0aXZlRnVuYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHNldHVwQW5kZXIoInRocmVhZCIpOwotICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFk
Z3JvdXAiKTsKLSAgICAgICAgICAgIHNldHVwQW5kZXIoImRldmljZSIpOwotICAgICAgICAgICAg
c2V0dXBBbmRlcigiY29uc3RhbnQiKTsKICAgICAgICAgfQorCisgICAgICAgIHNldHVwQW5kZXIo
InRocmVhZCIpOworICAgICAgICBzZXR1cEFuZGVyKCJ0aHJlYWRncm91cCIpOworICAgICAgICBz
ZXR1cEFuZGVyKCJkZXZpY2UiKTsKKyAgICAgICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKK3sK
KyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlwZXMudmFsdWVzKCkpIHsKKyAgICAgICAg
aWYgKCEodHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29yc0ZvclN0cnVjdFR5cGUocHJvZ3Jh
bSwgdHlwZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5odG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1s
CmluZGV4IGMxMmU1ZDk5ZGM3NGE2ZjE5MDFjOTVkZjkxZDM0YTA1YWU4NTVlMWMuLjk4ZTM4NTFm
MTY5OWFhNmNlNjhiZmQ1YWI4NDYxYWU5N2RlZWQxYzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0Lmh0bWwKQEAgLTE0LDYgKzE0LDcgQEAKIDxzY3JpcHQgc3JjPSJOYXRpdmVU
eXBlLmpzIj48L3NjcmlwdD4KIAogPHNjcmlwdCBzcmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJBbm9ueW1vdXNWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
QXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVR5cGUuanMiPjwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5q
cyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKaW5kZXggYWEwZmIzMTEy
ZmRlY2RlODFhNTAwODA5ZTQ1MjkzODUyNDVlZDc4Ny4uYmY5ZjU1ZTMxNTM3ODRiNmQwMDc0YmUx
YjlhOTE0OGJhMmU0MjQ5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVGVzdC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCkBA
IC04MDgxLDYgKzgwODEsMTUyIEBAIHRlc3RzLmlubGluaW5nRG9lc250UHJvZHVjZUFsaWFzaW5n
SXNzdWVzID0gKCkgPT4gewogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCAyMCk7CiB9CiAKK3Rlc3RzLnJldHVyblJlZmVyZW5jZVRvUGFyYW1l
dGVyID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBp
bnQgZm9vKGJvb2wgY29uZGl0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKmJh
cihjb25kaXRpb24sIDEsIDIpOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmFy
KGJvb2wgY29uZGl0aW9uLCBpbnQgYSwgaW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBjb25kaXRpb24gPyAmYSA6ICZiOworICAgICAgICB9CisgICAgYCk7CisKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFsgbWFrZUJvb2wocHJv
Z3JhbSwgdHJ1ZSkgXSksIDEpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgWyBtYWtlQm9vbChwcm9ncmFtLCBmYWxzZSkgXSksIDIpOworfQorCit0
ZXN0cy5yZXR1cm5SZWZlcmVuY2VUb1BhcmFtZXRlcldpdGhEaWZmZXJlbnRGdW5jdGlvbnMgPSAo
KSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0IGludCBmb28o
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKmJhcigxMCkgKyAqYmF6KDIwKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJhcihpbnQgeCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICZ4OworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmF6
KGludCB5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJnk7CisgICAgICAgIH0KKyAg
ICBgKTsKKworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10pLCAzMCk7Cit9CisKK3Rlc3RzLnJldHVyblJlZmVyZW5jZVRvU2FtZVBhcmFtZXRlciA9
ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZv
bygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwbHVzKGJhcig1KSwgYmFyKDcpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGludCBwbHVzKHRocmVhZCBpbnQqIHgsIHRocmVhZCBpbnQq
IHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqeCArICp5OworICAgICAgICB9CisK
KyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gJng7CisgICAgICAgIH0KKyAgICBgKTsKKworICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxMCk7Cit9CisKK3Rlc3RzLnJldHVyblJl
ZmVyZW5jZVRvTG9jYWxWYXJpYWJsZSA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCisgICAgICAgIHRlc3QgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAqYmFyKCk7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQgYSA9IDQyOworICAgICAgICAgICAgcmV0dXJuICZhOworICAg
ICAgICB9CisgICAgYCk7CisKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdKSwgNDIpOworfQorCit0ZXN0cy5yZXR1cm5SZWZlcmVuY2VUb0xvY2Fs
VmFyaWFibGVXaXRoTmVzdGluZyA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
CisgICAgICAgIHRlc3QgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
YmFyKCkgKyAqYmF6KCk7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXIoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDIwOworICAgICAgICAgICAgcmV0dXJuICZh
OworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmF6KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaW50IGEgPSAyMjsKKyAgICAgICAgICAgIHJldHVybiAmYTsKKyAgICAgICAgfQor
ICAgIGApOworCisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSksIDQyKTsKK30KKwordGVzdHMuY29udmVydFB0clRvQXJyYXlSZWYgPSAoKSA9PiB7
CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0IGludCBmb28oKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFyKClbMF07CisgICAgICAgIH0KKworICAgICAg
ICB0aHJlYWQgaW50W10gYmFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSA0MjsK
KyAgICAgICAgICAgIHJldHVybiBAKCZ4KTsKKyAgICAgICAgfQorICAgIGApOworCisgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKK30K
KwordGVzdHMuY29udmVydExvY2FsVmFyaWFibGVUb0FycmF5UmVmID0gKCkgPT4geworICAgIGxl
dCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGJhcigpWzBdOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFk
IGludFtdIGJhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB4ID0gNDI7CisgICAgICAg
ICAgICByZXR1cm4gQHg7CisgICAgICAgIH0KKyAgICBgKTsKKworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9CisKK3Rlc3RzLnJl
ZmVyZW5jZVRha2VuVG9Mb2NhbFZhcmlhYmxlSW5FbnRyeVBvaW50U2hvdWxkbnRNb3ZlQW55dGhp
bmcgPSAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0IGlu
dCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDQyOworICAgICAgICAgICAg
dGhyZWFkIGludCogYiA9ICZhOworICAgICAgICAgICAgcmV0dXJuICpiOworICAgICAgICB9Cisg
ICAgYCk7CisKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdKSwgNDIpOworfTsKKwogb2tUb1Rlc3QgPSB0cnVlOwogCiBsZXQgdGVzdEZpbHRlciA9
IC8uKi87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9pbmRleC5odG1sCmluZGV4IDI0NDE1ZjMzYTE3MDliMmUwZTZkNWJlY2U2N2FhODk1
MzA2Yjg5YmUuLjA4ZjRlZDViMDkzMWI2YmZiM2E0MjI4OTc4MzdlZWY4YTFhYzMyOTAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKKysrIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbApAQCAtMTQsNiArMTQsNyBAQAog
PHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0PgogCiA8c2NyaXB0IHNyYz0iQWRk
cmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJBbGxvY2F0ZUF0RW50cnlQb2lu
dHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IkFycmF5VHlwZS5qcyI+PC9zY3JpcHQ+Cg==
</data>
<flag name="commit-queue"
          id="367881"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350421</attachid>
            <date>2018-09-21 14:07:04 -0700</date>
            <delta_ts>2018-09-21 14:46:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188402-20180921140658.patch</filename>
            <type>text/plain</type>
            <size>31723</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NzUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGE3ODQ1MDQwMDI4YjNiM2FiZWVhYWYyZjAzNzlhOGI5
NDYxOWQ4My4uYTY0ZjM5OTVmMGY5Mjg2NjdjNTE5NThjMmU5ZmIwM2UzNzI3Mjk3YSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQz
IEBACisyMDE4LTA5LTEwICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dITFNMXSBMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2Nh
dGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg0
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBNeWxlcyBDLiBNYXhmaWVsZC4KKworICAgICAgICBB
biBhZGRpdGlvbmFsIHByZXBhcmF0aW9uIHN0YWdlIGlzIG5vdyBwZXJmb3JtZWQgc28gdGhhdCBh
bGwgbG9jYWwKKyAgICAgICAgdmFyaWFibGVzIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZSBh
bGxvY2F0ZWQgaW4gYSBzaW5nbGUgc3RydWN0IGF0CisgICAgICAgIGVudHJ5IHBvaW50cy4gQSBw
b2ludGVyIHRvIHRoaXMgc3RydWN0IGlzIHRoZW4gcGFzc2VkIGZvciBmdW5jdGlvbgorICAgICAg
ICBjYWxscy4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qczogVXBk
YXRlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGxv
Y2F0ZUF0RW50cnlQb2ludHMuanM6IEFkZGVkIG5ldyBzdGFnZS4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNz
aW9uLnByb3RvdHlwZS5zZXQgYXJndW1lbnRMaXN0KTogQWRkIHNldHRlciBiZWNhdXNlCisgICAg
ICAgIGFsbG9jYXRlQXRFbnRyeVBvaW50cyBuZWVkcyB0byBjaGFuZ2UgdGhpcy4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qczogUmVtb3ZlIGEgcmVk
dW5kYW50CisgICAgICAgIGNvbnN0cnVjdG9yIHRoYXQgd2Fzbid0IHVzZWQgYW55d2hlcmUuCisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMu
cHJvdG90eXBlLnNldCBwYXJhbWV0ZXJzKTogQWRkIHNldHRlci4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzOgorICAgICAgICAoRnVuY0RlZi5wcm90b3R5cGUu
c2V0IGJvZHkpOiBEaXR0by4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVw
YXJlLmpzOgorICAgICAgICAobGV0LnByZXBhcmUpOiBBZGQgY2FsbCB0byBhbGxvY2F0ZUF0RW50
cnlQb2ludHMuIFRoaXMgY2FsbCBjYW5ub3QKKyAgICAgICAgaGFwcGVuIGFueSBlYXJsaWVyIGJl
Y2F1c2UgaXQgZGVwZW5kcyBvbiBoYXZpbmcgdHlwZXMgZm9yIGNhbGwKKyAgICAgICAgYXJndW1l
bnRzLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzOgorICAg
ICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0UmV0dXJuKTogUmVzb2x2ZSBpc3N1ZSB3aGVy
ZSB0aGUgcmV0dXJuCisgICAgICAgIHN0YXRlbWVudCdzIGZ1bmN0aW9uIHdhc24ndCBjb3BpZWQu
IEEgbnVsbCBjaGVjayBpcyByZXF1aXJlZCBhcyB0aGUKKyAgICAgICAgUmV3cml0ZXIgbWlnaHQg
YmUgdXNlZCBiZWZvcmUgdGhpcyBwcm9wZXJ0eSBpcyBzZXQuCisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbDogVXBkYXRlIGRlcGVuZGVuY2llcy4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzOiBB
YnN0cmFjdGVkIGxvZ2ljCisgICAgICAgIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGF0
IGFsbG9jYXRlQXRFbnRyeVBvaW50cyBjYW4gY3JlYXRlIHRoZQorICAgICAgICBhY2Nlc3NvcnMg
Zm9yIHRoZSBzdHJ1Y3QgdHlwZSBpdCBpbnRyb2R1Y2VzLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuaHRtbDogVXBkYXRlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzOiBBZGQgbmV3IHRlc3RzIHRvIHZlcmlmeSB0
aGUgc3RhdGljCisgICAgICAgIGFsbG9jYXRpb24gdHJhbnNmb3JtIHdvcmtzIHNhZmVseS4KKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sOiBVcGRhdGUgZGVwZW5k
ZW5jaWVzLgorCiAyMDE4LTA5LTIxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KIAogICAgICAgICBCcmluZyB1cCBxdWV1ZXMgZm9yIGlPUyAxMiAoQnVpbGQgZml4KQpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzIGIvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCmluZGV4IDNjMmM0ODc0MjAwMTExNWExNzEzNDgz
YTFmMjNjZTI4NjY4YmI5YzYuLmUyOTEwZDc5ZDZjMjM1OWI3NjMxNjE5ODAzMTZhZmYwOTQyMjcw
ZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcworKysg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKQEAgLTM3LDYgKzM3LDcgQEAg
bG9hZCgiUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlLmpz
Iik7CiAKIGxvYWQoIkFkZHJlc3NTcGFjZS5qcyIpOworbG9hZCgiQWxsb2NhdGVBdEVudHJ5UG9p
bnRzLmpzIik7CiBsb2FkKCJBbm9ueW1vdXNWYXJpYWJsZS5qcyIpOwogbG9hZCgiQXJyYXlSZWZU
eXBlLmpzIik7CiBsb2FkKCJBcnJheVR5cGUuanMiKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FsbG9jYXRlQXRFbnRyeVBvaW50cy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
ODc0N2U2Mzg4MWZmNGNlYTZjMGJlMzNkMDA4ZTI0ZGFkYThjNmYxCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpz
CkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGdhdGhlckVudHJ5UG9pbnRzKHByb2dyYW0p
Cit7CisgICAgY29uc3QgZW50cnlQb2ludHMgPSBuZXcgU2V0KCk7CisgICAgZm9yIChsZXQgW25h
bWUsIGZ1bmNEZWZzXSBvZiBwcm9ncmFtLmZ1bmN0aW9ucykgeworICAgICAgICBmb3IgKGxldCBm
dW5jRGVmIG9mIGZ1bmNEZWZzKSB7CisgICAgICAgICAgICBpZiAoZnVuY0RlZi5pc0VudHJ5UG9p
bnQpCisgICAgICAgICAgICAgICAgZW50cnlQb2ludHMuYWRkKGZ1bmNEZWYpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBlbnRyeVBvaW50czsKK30KKworZnVuY3Rpb24gZ2F0aGVyQ2Fs
bGVlcyhmdW5jRGVmcykKK3sKKyAgICBjb25zdCBjYWxsZWVTZXQgPSBuZXcgU2V0KCk7CisgICAg
Y2xhc3MgRmluZEZ1bmN0aW9uc1RoYXRBcmVDYWxsZWQgZXh0ZW5kcyBWaXNpdG9yCisgICAgewor
ICAgICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAgICAgICAgICBpZiAobm9kZS5m
dW5jIGluc3RhbmNlb2YgRnVuY0RlZiAmJiAhY2FsbGVlU2V0Lmhhcyhub2RlLmZ1bmMpKSB7Cisg
ICAgICAgICAgICAgICAgY2FsbGVlU2V0LmFkZChub2RlLmZ1bmMpOworICAgICAgICAgICAgICAg
IG5vZGUuZnVuYy52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjb25zdCB2aXNpdG9yID0gbmV3IEZpbmRGdW5jdGlvbnNUaGF0QXJlQ2FsbGVkKCk7Cisg
ICAgZm9yIChsZXQgZnVuY0RlZiBvZiBmdW5jRGVmcykKKyAgICAgICAgZnVuY0RlZi52aXNpdCh2
aXNpdG9yKTsKKyAgICByZXR1cm4gY2FsbGVlU2V0OworfQorCitmdW5jdGlvbiBnYXRoZXJWYXJp
YWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMoZnVuY0RlZnMpCit7CisgICAgY29uc3QgdmFyc0Fu
ZFBhcmFtcyA9IG5ldyBTZXQoKTsKKyAgICBjbGFzcyBWYXJBbmRQYXJhbVZpc2l0b3IgZXh0ZW5k
cyBWaXNpdG9yIHsKKworICAgICAgICBjb25zdHJ1Y3Rvcihpc0VudHJ5UG9pbnQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAgICAgICB0aGlzLl9pc0VudHJ5UG9pbnQg
PSBpc0VudHJ5UG9pbnQ7CisgICAgICAgIH0KKworICAgICAgICB2aXNpdEZ1bmNQYXJhbWV0ZXIo
bm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0VudHJ5UG9pbnQpCisg
ICAgICAgICAgICAgICAgdmFyc0FuZFBhcmFtcy5hZGQobm9kZSk7CisgICAgICAgIH0KKworICAg
ICAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgICAgICB7CisgICAgICAgICAgICB2YXJz
QW5kUGFyYW1zLmFkZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGxldCBmdW5j
IG9mIGZ1bmNEZWZzKQorICAgICAgICBmdW5jLnZpc2l0KG5ldyBWYXJBbmRQYXJhbVZpc2l0b3Io
ZnVuYy5pc0VudHJ5UG9pbnQpKTsKKyAgICByZXR1cm4gdmFyc0FuZFBhcmFtczsKK30KKworZnVu
Y3Rpb24gY3JlYXRlR2xvYmFsU3RydWN0VHlwZUFuZFZhclRvRmllbGRNYXAob3JpZ2luLCBhbGxW
YXJpYWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMsIGZ1bmN0aW9uc1RoYXRBcmVDYWxsZWRCeUVu
dHJ5UG9pbnRzKQoreworICAgIGNvbnN0IGdsb2JhbFN0cnVjdFR5cGUgPSBuZXcgU3RydWN0VHlw
ZShvcmlnaW4sIG51bGwpOworICAgIGxldCBjb3VudGVyID0gMDsKKyAgICBjb25zdCB2YXJUb0Zp
ZWxkTWFwID0gbmV3IE1hcCgpOworCisgICAgZm9yIChsZXQgdmFyT3JQYXJhbSBvZiBhbGxWYXJp
YWJsZXNBbmRGdW5jdGlvblBhcmFtZXRlcnMpIHsKKyAgICAgICAgY29uc3QgZmllbGROYW1lID0g
YGZpZWxkJHtjb3VudGVyKyt9XyR7dmFyT3JQYXJhbS5uYW1lfWA7CisgICAgICAgIGdsb2JhbFN0
cnVjdFR5cGUuYWRkKG5ldyBGaWVsZCh2YXJPclBhcmFtLm9yaWdpbiwgZmllbGROYW1lLCB2YXJP
clBhcmFtLnR5cGUpKTsKKyAgICAgICAgdmFyVG9GaWVsZE1hcC5zZXQodmFyT3JQYXJhbSwgZmll
bGROYW1lKTsKKyAgICB9CisKKyAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmN0aW9uc1RoYXRBcmVD
YWxsZWRCeUVudHJ5UG9pbnRzKSB7CisgICAgICAgIGlmIChmdW5jLnJldHVyblR5cGUubmFtZSAh
PT0gInZvaWQiKSB7CisgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBgZmllbGQke2NvdW50
ZXIrK31fcmV0dXJuXyR7ZnVuYy5uYW1lfWA7CisgICAgICAgICAgICBnbG9iYWxTdHJ1Y3RUeXBl
LmFkZChuZXcgRmllbGQoZnVuYy5vcmlnaW4sIGZpZWxkTmFtZSwgZnVuYy5yZXR1cm5UeXBlKSk7
CisgICAgICAgICAgICBmdW5jLnJldHVybkZpZWxkTmFtZSA9IGZpZWxkTmFtZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBbIGdsb2JhbFN0cnVjdFR5cGUsIHZhclRvRmllbGRNYXAg
XTsKK30KKworZnVuY3Rpb24gYWxsb2NhdGVBdEVudHJ5UG9pbnRzKHByb2dyYW0pCit7CisgICAg
Y29uc3QgZW50cnlQb2ludHMgPSBnYXRoZXJFbnRyeVBvaW50cyhwcm9ncmFtKTsKKyAgICBjb25z
dCBhbGxDYWxsZWVzID0gZ2F0aGVyQ2FsbGVlcyhlbnRyeVBvaW50cyk7CisgICAgY29uc3QgYWxs
RXhlY3V0ZWRGdW5jdGlvbnMgPSBuZXcgU2V0KFsuLi5lbnRyeVBvaW50cywgLi4uYWxsQ2FsbGVl
c10pOworICAgIGNvbnN0IGFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycyA9IGdhdGhl
clZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycyhhbGxFeGVjdXRlZEZ1bmN0aW9ucyk7CisK
KyAgICBpZiAoIWFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycy5zaXplKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb25zdCBhbnlFbnRyeVBvaW50ID0gZW50cnlQb2ludHMudmFsdWVz
KCkubmV4dCgpLnZhbHVlOworICAgIGNvbnN0IFsgZ2xvYmFsU3RydWN0VHlwZSwgdmFyVG9GaWVs
ZE1hcCBdID0gY3JlYXRlR2xvYmFsU3RydWN0VHlwZUFuZFZhclRvRmllbGRNYXAoYW55RW50cnlQ
b2ludC5vcmlnaW4sIGFsbFZhcmlhYmxlc0FuZEZ1bmN0aW9uUGFyYW1ldGVycywgYWxsQ2FsbGVl
cyk7CisgICAgcHJvZ3JhbS5hZGQoZ2xvYmFsU3RydWN0VHlwZSk7CisgICAgLy8gQWxsIG90aGVy
IHN0cnVjdCBhY2Nlc3NvcnMgd2lsbCBoYXZlIGJlZW4gc3ludGhlc2l6ZWQgYXQgdGhpcyBwb2lu
dCAodGhleSBoYXZlIHRvIGJlIHN5bnRoZXNpemVkIGVhcmxpZXIgZm9yIGNhbGwgcmVzb2x1dGlv
bikuCisgICAgc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29yc0ZvclN0cnVjdFR5cGUocHJvZ3JhbSwg
Z2xvYmFsU3RydWN0VHlwZSk7CisKKyAgICBjb25zdCBnbG9iYWxTdHJ1Y3RUeXBlUmVmID0gVHlw
ZVJlZi53cmFwKGdsb2JhbFN0cnVjdFR5cGUpOworICAgIGNvbnN0IHB0clRvR2xvYmFsU3RydWN0
VHlwZSA9IG5ldyBQdHJUeXBlKGFueUVudHJ5UG9pbnQub3JpZ2luLCAidGhyZWFkIiwgZ2xvYmFs
U3RydWN0VHlwZVJlZik7CisgICAgY29uc3QgcHRyVG9HbG9iYWxTdHJ1Y3RUeXBlUmVmID0gVHlw
ZVJlZi53cmFwKHB0clRvR2xvYmFsU3RydWN0VHlwZSk7CisKKyAgICBjb25zdCBmdW5jTmV3UGFy
YW1ldGVyTWFwcGluZyA9IG5ldyBNYXAoKTsKKyAgICBmdW5jdGlvbiB1cGRhdGVGdW5jdGlvbihm
dW5jKQorICAgIHsKKyAgICAgICAgY2xhc3MgVXBkYXRlRnVuY3Rpb25zIGV4dGVuZHMgUmV3cml0
ZXIgeworICAgICAgICAgICAgY29uc3RydWN0b3IoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHN1cGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmMuaXNFbnRyeVBvaW50KQor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRWYXJpYWJsZURlY2xhcmF0aW9uKCk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWNvbmZpZ3VyZVBh
cmFtZXRlcnMoKTsKKyAgICAgICAgICAgICAgICBmdW5jLmJvZHkgPSBmdW5jLl9ib2R5LnZpc2l0
KHRoaXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfYWRkVmFyaWFibGVEZWNsYXJh
dGlvbigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGVEZWNs
ID0gbmV3IFZhcmlhYmxlRGVjbChmdW5jLm9yaWdpbiwgbnVsbCwgZ2xvYmFsU3RydWN0VHlwZVJl
ZiwgbnVsbCk7CisgICAgICAgICAgICAgICAgdGhpcy5tYWtlR2xvYmFsU3RydWN0VmFyaWFibGVS
ZWYgPSAoKSA9PiBuZXcgTWFrZVB0ckV4cHJlc3Npb24oZnVuYy5vcmlnaW4sIFZhcmlhYmxlUmVm
LndyYXAodGhpcy5fdmFyaWFibGVEZWNsKSk7CisgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnN0
YXRlbWVudHMudW5zaGlmdCh0aGlzLl92YXJpYWJsZURlY2wpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBfcmVjb25maWd1cmVQYXJhbWV0ZXJzKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBmdW5jUGFyYW0gPSBuZXcgRnVuY1BhcmFtZXRlcihmdW5jLm9yaWdp
biwgbnVsbCwgcHRyVG9HbG9iYWxTdHJ1Y3RUeXBlUmVmKTsKKyAgICAgICAgICAgICAgICB0aGlz
Lm1ha2VHbG9iYWxTdHJ1Y3RWYXJpYWJsZVJlZiA9ICgpID0+ICBWYXJpYWJsZVJlZi53cmFwKGZ1
bmNQYXJhbSk7CisgICAgICAgICAgICAgICAgZnVuY05ld1BhcmFtZXRlck1hcHBpbmcuc2V0KGZ1
bmMsIFsgZnVuY1BhcmFtIF0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfY2FsbEV4
cHJlc3Npb25Gb3JGaWVsZE5hbWUobm9kZSwgZmllbGROYW1lKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICghZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZpZWxkIG5hbWUgd2FzIG51bGwiKTsKKyAgICAgICAgICAgICAgICBjb25zdCBm
dW5jdGlvbk5hbWUgPSBgb3BlcmF0b3ImLiR7ZmllbGROYW1lfWA7CisgICAgICAgICAgICAgICAg
Y29uc3QgcG9zc2libGVBbmRPdmVybG9hZHMgPSBwcm9ncmFtLmdsb2JhbE5hbWVDb250ZXh0Lmdl
dChGdW5jLCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxFeHByZXNz
aW9uUmVzb2x1dGlvbiA9IENhbGxFeHByZXNzaW9uLnJlc29sdmUobm9kZS5vcmlnaW4sIHBvc3Np
YmxlQW5kT3ZlcmxvYWRzLCBmdW5jdGlvbk5hbWUsIFsgdGhpcy5tYWtlR2xvYmFsU3RydWN0VmFy
aWFibGVSZWYoKSBdLCBbIHB0clRvR2xvYmFsU3RydWN0VHlwZVJlZiBdKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY2FsbEV4cHJlc3Npb25SZXNvbHV0aW9uLmNhbGw7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIF9kZXJlZmVyZW5jZWRDYWxsRXhwcmVzc2lvbkZvckZpZWxkTmFtZShu
b2RlLCByZXN1bHRUeXBlLCBmaWVsZE5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29uc3QgZGVyZWZFeHByID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9yaWdp
biwgdGhpcy5fY2FsbEV4cHJlc3Npb25Gb3JGaWVsZE5hbWUobm9kZSwgZmllbGROYW1lKSwgbm9k
ZS50eXBlLCAidGhyZWFkIik7CisgICAgICAgICAgICAgICAgZGVyZWZFeHByLnR5cGUgPSByZXN1
bHRUeXBlOworICAgICAgICAgICAgICAgIHJldHVybiBkZXJlZkV4cHI7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXZhclRvRmllbGRNYXAuaGFzKG5vZGUudmFyaWFibGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRWYXJpYWJsZVJlZihub2RlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVyZWZlcmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JG
aWVsZE5hbWUobm9kZSwgbm9kZS52YXJpYWJsZS50eXBlLCB2YXJUb0ZpZWxkTWFwLmdldChub2Rl
LnZhcmlhYmxlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZpc2l0VmFyaWFibGVE
ZWNsKG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0gdGhp
cy5fdmFyaWFibGVEZWNsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLmluaXRpYWxpemVyKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghbm9kZS50eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKGAke25vZGV9IGRvZXNuJ3QgaGF2ZSBhIHR5cGVgKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCB0aGlzLl9kZXJlZmVyZW5jZWRDYWxs
RXhwcmVzc2lvbkZvckZpZWxkTmFtZShub2RlLCBub2RlLnR5cGUsIHZhclRvRmllbGRNYXAuZ2V0
KG5vZGUpKSwgbm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKSwgbm9kZS50eXBlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9jayhub2RlLm9yaWdp
bik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9k
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub2RlID0gc3VwZXIudmlzaXRDYWxs
RXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5mdW5jIGluc3RhbmNl
b2YgRnVuY0RlZikgeworICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcnMgPSBbXTsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgYW5vbnltb3VzVmFyaWFibGVBc3NpZ25tZW50cyA9IFtdOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gbm9kZS5hcmd1bWVudExpc3QubGVuZ3Ro
OyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gbm9kZS5mdW5j
LnBhcmFtZXRlcnNbaV0udHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bm9kZS5mdW5j
LnBhcmFtZXRlcnNbaV19IGhhcyBubyB0eXBlYCk7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBhbm9ueW1vdXNWYXJpYWJsZSA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdp
biwgdHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBleHBycy5wdXNoKGFub255bW91c1Zh
cmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJzLnB1c2gobmV3IEFzc2lnbm1l
bnQobm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAoYW5vbnltb3VzVmFyaWFibGUpLCBub2Rl
LmFyZ3VtZW50TGlzdFtpXSwgdHlwZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYW5vbnlt
b3VzVmFyaWFibGVBc3NpZ25tZW50cy5wdXNoKG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCB0
aGlzLl9kZXJlZmVyZW5jZWRDYWxsRXhwcmVzc2lvbkZvckZpZWxkTmFtZShub2RlLmZ1bmMucGFy
YW1ldGVyc1tpXSwgbm9kZS5mdW5jLnBhcmFtZXRlcnNbaV0udHlwZSwgdmFyVG9GaWVsZE1hcC5n
ZXQobm9kZS5mdW5jLnBhcmFtZXRlcnNbaV0pKSwgVmFyaWFibGVSZWYud3JhcChhbm9ueW1vdXNW
YXJpYWJsZSksIHR5cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBleHBycyA9IGV4cHJzLmNvbmNhdChhbm9ueW1vdXNWYXJpYWJsZUFzc2lnbm1lbnRzKTsK
KyAgICAgICAgICAgICAgICAgICAgZXhwcnMucHVzaChub2RlKTsKKworICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS5mdW5jLnJldHVyblR5cGUubmFtZSAhPT0gInZvaWQiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwcnMucHVzaCh0aGlzLl9kZXJlZmVyZW5jZWRDYWxsRXhwcmVzc2lv
bkZvckZpZWxkTmFtZShub2RlLmZ1bmMsIG5vZGUuZnVuYy5yZXR1cm5UeXBlLCBub2RlLmZ1bmMu
cmV0dXJuRmllbGROYW1lKSk7CisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExp
c3QgPSBbIHRoaXMubWFrZUdsb2JhbFN0cnVjdFZhcmlhYmxlUmVmKCkgXTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIGV4cHJzKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdmlzaXRSZXR1cm4obm9kZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBub2RlID0gc3VwZXIudmlzaXRSZXR1cm4obm9kZSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFmdW5jLmlzRW50cnlQb2ludCAmJiBub2RlLnZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBbCisg
ICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgdGhpcy5f
ZGVyZWZlcmVuY2VkQ2FsbEV4cHJlc3Npb25Gb3JGaWVsZE5hbWUoZnVuYywgZnVuYy5yZXR1cm5U
eXBlLCBmdW5jLnJldHVybkZpZWxkTmFtZSksIG5vZGUudmFsdWUsIGZ1bmMucmV0dXJuVHlwZSks
CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmV0dXJuKG5vZGUub3JpZ2luKSBdKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnVuYy52aXNpdChuZXcgVXBkYXRlRnVu
Y3Rpb25zKCkpOworICAgIH0KKworICAgIGZvciAobGV0IGZ1bmNEZWYgb2YgYWxsRXhlY3V0ZWRG
dW5jdGlvbnMpCisgICAgICAgIHVwZGF0ZUZ1bmN0aW9uKGZ1bmNEZWYpOworCisgICAgZm9yIChs
ZXQgW2Z1bmMsIG5ld1BhcmFtZXRlcnNdIG9mIGZ1bmNOZXdQYXJhbWV0ZXJNYXBwaW5nKQorICAg
ICAgICBmdW5jLnBhcmFtZXRlcnMgPSBuZXdQYXJhbWV0ZXJzOworCisgICAgZm9yIChsZXQgZnVu
YyBvZiBhbGxDYWxsZWVzKQorICAgICAgICBmdW5jLl9yZXR1cm5UeXBlID0gVHlwZVJlZi53cmFw
KHByb2dyYW0udHlwZXMuZ2V0KCJ2b2lkIikpOworCisgICAgY2xhc3MgVXBkYXRlQ2FsbEV4cHJl
c3Npb25SZXR1cm5UeXBlcyBleHRlbmRzIFZpc2l0b3IgeworICAgICAgICB2aXNpdENhbGxFeHBy
ZXNzaW9uKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1cGVyLnZpc2l0Q2FsbEV4cHJl
c3Npb24obm9kZSk7CisgICAgICAgICAgICBpZiAobm9kZS5mdW5jIGluc3RhbmNlb2YgRnVuY0Rl
ZikKKyAgICAgICAgICAgICAgICBub2RlLl9yZXR1cm5UeXBlID0gbm9kZS5yZXN1bHRUeXBlID0g
VHlwZVJlZi53cmFwKHByb2dyYW0udHlwZXMuZ2V0KCJ2b2lkIikpOworICAgICAgICB9CisgICAg
fQorICAgIGNvbnN0IHVwZGF0ZUNhbGxFeHByZXNzaW9uVmlzaXRvciA9IG5ldyBVcGRhdGVDYWxs
RXhwcmVzc2lvblJldHVyblR5cGVzKCk7CisgICAgZm9yIChsZXQgZnVuYyBvZiBhbGxFeGVjdXRl
ZEZ1bmN0aW9ucykKKyAgICAgICAgZnVuYy52aXNpdCh1cGRhdGVDYWxsRXhwcmVzc2lvblZpc2l0
b3IpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4
cHJlc3Npb24uanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lv
bi5qcwppbmRleCA1ZmJkZDUwNWY3OWQ0YjMyNmUwOTNlMGZiNzZjZDM3NWQwYTJjNWJhLi40ZTRk
NjVmMDkxMzgwNGY0ZDBlNzBjMDAyYmY2MzE0MDYwYjBlZTJlIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcworKysgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcwpAQCAtMzYsNyArMzYsMTQgQEAg
Y2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICB9CiAgICAgCiAg
ICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9CisKICAgICBnZXQgYXJndW1lbnRM
aXN0KCkgeyByZXR1cm4gdGhpcy5fYXJndW1lbnRMaXN0OyB9CisKKyAgICBzZXQgYXJndW1lbnRM
aXN0KG5ld1ZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5fYXJndW1lbnRMaXN0ID0gbmV3VmFs
dWU7CisgICAgfQorCiAgICAgZ2V0IGlzQ2FzdCgpIHsgcmV0dXJuIHRoaXMuX2lzQ2FzdDsgfQog
ICAgIGdldCByZXR1cm5UeXBlKCkgeyByZXR1cm4gdGhpcy5fcmV0dXJuVHlwZTsgfQogICAgIApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIu
anMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwppbmRl
eCBhM2JlZTFmYTI0NzVkMWY1NmIzMDVmNTZkOGRiMzM2ZWE4YTRhNzE3Li5hN2YzNjE2ZDlhMWY1
YzE3MDY0YzYxYjc2ODRmMjQyOGZiMTE2NzViIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwpAQCAtMjUsMTIgKzI1LDYgQEAKICJ1c2Ugc3Ry
aWN0IjsKIAogY2xhc3MgRUJ1ZmZlckJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICBjb25z
dHJ1Y3Rvcihwcm9ncmFtKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5f
cHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgfQotICAgIAogICAgIF9jcmVhdGVFUHRyKHR5cGUpCiAg
ICAgewogICAgICAgICBpZiAodHlwZS5zaXplID09IG51bGwpCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRnVuYy5qcwppbmRleCBjYmMyYzMzM2Y2NjZmNjg3YzA3ZDMzZGMwMTg4Y2M5ODQ2YTNm
NmQyLi40ZjU4OTA2MDdiMWEyOTE3MTgyMzRhZmEzZDZlMDY2ZjFkOTkwNWQ1IDEwMDY0NAotLS0g
YS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCisrKyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMKQEAgLTU0LDYgKzU0LDExIEBAIGNsYXNzIEZ1bmMg
ZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQgaXNFbnRyeVBvaW50KCkgeyByZXR1cm4gdGhpcy5zaGFk
ZXJUeXBlICE9IG51bGw7IH0KICAgICBnZXQgcmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlv
bigpIHsgcmV0dXJuIHRoaXMuaXNDYXN0ID8gdGhpcy5yZXR1cm5UeXBlIDogbnVsbDsgfQogICAg
IAorICAgIHNldCBwYXJhbWV0ZXJzKG5ld1ZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcGFy
YW1ldGVycyA9IG5ld1ZhbHVlOworICAgIH0KKwogICAgIGdldCBraW5kKCkgeyByZXR1cm4gRnVu
YzsgfQogICAgIAogICAgIHRvRGVjbFN0cmluZygpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRnVuY0RlZi5qcwppbmRleCBkNjhlNDAzMGU1OWE1NzExODJjNjA0YjNlMmJkMzdhNzA0OTU4
MzIzLi4zMDE2YjEzMjU5MTdkZDcyZWFhN2RlZDg1YTZlYjI3ZTU4MDI5OGFjIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCisrKyBiL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMKQEAgLTMzLDcgKzMzLDEyIEBAIGNsYXNz
IEZ1bmNEZWYgZXh0ZW5kcyBGdW5jIHsKICAgICB9CiAKICAgICBnZXQgYm9keSgpIHsgcmV0dXJu
IHRoaXMuX2JvZHk7IH0KLSAgICAKKworICAgIHNldCBib2R5KG5ld0JvZHkpCisgICAgeworICAg
ICAgICB0aGlzLl9ib2R5ID0gbmV3Qm9keTsKKyAgICB9CisKICAgICByZXdyaXRlKHJld3JpdGVy
KQogICAgIHsKICAgICAgICAgdGhpcy5fcmV0dXJuVHlwZSA9IHRoaXMuX3JldHVyblR5cGUudmlz
aXQocmV3cml0ZXIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJlcGFyZS5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKaW5k
ZXggMTNlYmRlODBiZDkxY2NiNjU0Njg2ODEyOTI1MjYzMzRkZDM4ODdlOC4uOWZlMzZiYThjN2I4
NjFlZTJhY2QwYTMwODU0OGFiOWY2ZjllM2RmMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9QcmVwYXJlLmpzCkBAIC01Myw3ICs1Myw3IEBAIGxldCBwcmVwYXJlID0gKCgpID0+IHsK
ICAgICAgICAgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsK
ICAgICAgICAgcmVzb2x2ZVR5cGVEZWZzSW5GdW5jdGlvbnMocHJvZ3JhbSk7CiAgICAgICAgIGNo
ZWNrVHlwZXNXaXRoQXJndW1lbnRzKHByb2dyYW0pOwotICAgICAgICAKKwogICAgICAgICBjaGVj
ayhwcm9ncmFtKTsKICAgICAgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7CiAgICAgICAg
IHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOwpAQCAtNjcsNiArNjcsNyBAQCBsZXQgcHJlcGFy
ZSA9ICgoKSA9PiB7CiAgICAgICAgIGNoZWNrUHJvZ3JhbVdyYXBwZWQocHJvZ3JhbSk7CiAgICAg
ICAgIGNoZWNrVHlwZXNXaXRoQXJndW1lbnRzKHByb2dyYW0pOwogICAgICAgICBmaW5kSGlnaFpv
bWJpZXMocHJvZ3JhbSk7CisgICAgICAgIGFsbG9jYXRlQXRFbnRyeVBvaW50cyhwcm9ncmFtKTsK
ICAgICAgICAgcHJvZ3JhbS52aXNpdChuZXcgU3RydWN0TGF5b3V0QnVpbGRlcigpKTsKICAgICAg
ICAgbGF0ZUNoZWNrQW5kTGF5b3V0QnVmZmVycyhwcm9ncmFtKTsKICAgICAgICAgaWYgKHNob3Vs
ZElubGluZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3Jp
dGVyLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKaW5kZXgg
MzAyNTg5M2EwNmEzZjU5MDMyYjlmNmNkNDNmMTI0NjUxZjAyNmNiOS4uMjY3ZTdhMzMyMzRhZjM3
MmYxZTEzNGVlNjNmOTZjYjFjN2Y3ODE2MyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUmV3cml0ZXIuanMKQEAgLTIzMyw3ICsyMzMsMTAgQEAgY2xhc3MgUmV3cml0ZXIgewogICAg
IAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFJldHVy
bihub2RlLm9yaWdpbiwgTm9kZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKSk7CisgICAgICAgIGNv
bnN0IHJldHVyblN0YXRlbWVudCA9IG5ldyBSZXR1cm4obm9kZS5vcmlnaW4sIE5vZGUudmlzaXQo
bm9kZS52YWx1ZSwgdGhpcykpOworICAgICAgICBpZiAobm9kZS5mdW5jKQorICAgICAgICAgICAg
cmV0dXJuU3RhdGVtZW50LmZ1bmMgPSBub2RlLmZ1bmM7CisgICAgICAgIHJldHVybiByZXR1cm5T
dGF0ZW1lbnQ7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29udGludWUobm9kZSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCmluZGV4IDBkMjM3MTAwNWU3MTBjZGM2MGYw
MzNkYTVhNTExYzQ5YWUwMDVjMzYuLjg5MTg2NzExZmY1YzAxMGY1NzIwZTE2ODhmZjNjYTVkZmRl
ZTI0ZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0
bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbApAQCAtMjAs
NiArMjAsNyBAQCB0ZCB7CiAgICAgPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0
PgogCiAgICAgPHNjcmlwdCBzcmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IkFsbG9jYXRlQXRFbnRyeVBvaW50cy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
QXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQXJyYXlUeXBlLmpz
Ij48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5
bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCmluZGV4IDUzYWI2YjU0NDI0ODM1NzQyNjNj
MWRjNjg5MTYxYWRkMjY4NWVjYWIuLjc4NTllZWI0YjRmNWNiNWVmZTZmZDAyZGVhYjYzNzBkYmQ5
YjUzOTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwpAQCAtMjAsMTA5ICsyMCw5OCBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogInVzZSBzdHJpY3QiOwogCi1mdW5jdGlvbiBzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzKHByb2dyYW0pCitmdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzRm9y
U3RydWN0VHlwZShwcm9ncmFtLCB0eXBlKQogewotICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3Jh
bS50eXBlcy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgU3RydWN0
VHlwZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAobGV0
IGZpZWxkIG9mIHR5cGUuZmllbGRzKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBzZXR1cEltcGxl
bWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCBpbXBsZW1lbnRhdGlvbikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLnZpc2l0SW1wbGVtZW50YXRpb25EYXRhID0gKGlt
cGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4gewotICAgICAgICAgICAgICAgICAgICAvLyBW
aXNpdGluZyB0aGUgdHlwZSBmaXJzdCBlbnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQgYnVp
bGRlciBmaWd1cmVzIG91dCB0aGUgZmllbGQncwotICAgICAgICAgICAgICAgICAgICAvLyBvZmZz
ZXQuCi0gICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS50eXBlLnZpc2l0KHZp
c2l0b3IpOwotICAgICAgICAgICAgICAgIH07CisgICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5m
aWVsZHMpIHsKKyAgICAgICAgZnVuY3Rpb24gc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZl
RnVuYywgaW1wbGVtZW50YXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMu
dmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9
PiB7CisgICAgICAgICAgICAgICAgLy8gVmlzaXRpbmcgdGhlIHR5cGUgZmlyc3QgZW5zdXJlcyB0
aGF0IHRoZSBzdHJ1Y3QgbGF5b3V0IGJ1aWxkZXIgZmlndXJlcyBvdXQgdGhlIGZpZWxkJ3MKKyAg
ICAgICAgICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25E
YXRhLnR5cGUudmlzaXQodmlzaXRvcik7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAg
ICAgbmF0aXZlRnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRh
dGEsIHZpc2l0b3IpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXRpbmcgdGhlIHR5
cGUgZmlyc3QgZW5zdXJlcyB0aGF0IHRoZSBzdHJ1Y3QgbGF5b3V0IGJ1aWxkZXIgZmlndXJlcyBv
dXQgdGhlIGZpZWxkJ3MKLSAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0LgotICAgICAgICAg
ICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS52aXNpdCh2aXNpdG9yKTsKLSAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbiA9IChh
cmd1bWVudExpc3QsIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW1wbGVtZW50
YXRpb24oYXJndW1lbnRMaXN0LCBmaWVsZC5vZmZzZXQsIHR5cGUuc2l6ZSwgZmllbGQudHlwZS5z
aXplKTsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmltcGxl
bWVudGF0aW9uID0gKGFyZ3VtZW50TGlzdCwgbm9kZSkgPT4gewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaW1wbGVtZW50YXRpb24oYXJndW1lbnRMaXN0LCBmaWVsZC5vZmZzZXQsIHR5cGUu
c2l6ZSwgZmllbGQudHlwZS5zaXplKTsKLSAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
bmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbkRhdGEgPSB7CisgICAgICAgICAgICAgICAgc3RydWN0
VHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLAorICAgICAgICAg
ICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsCisgICAgICAgICAgICAgICAgb2Zmc2V0OiBmaWVsZC5v
ZmZzZXQsCisgICAgICAgICAgICAgICAgc2l6ZTogZmllbGQudHlwZS5zaXplCisgICAgICAgICAg
ICB9OworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVudGF0
aW9uRGF0YSA9IHsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0VHlwZTogdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgbmFtZTogZmllbGQubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgdHlw
ZTogZmllbGQudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBmaWVsZC5vZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgIHNpemU6IGZpZWxkLnR5cGUuc2l6ZQotICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZ1bmN0aW9u
IGNyZWF0ZUZpZWxkVHlwZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZpZWxkLnR5cGUudmlzaXQobmV3IFJld3JpdGVyKCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlUmVmKCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVHlwZVJlZi53cmFwKHR5cGUpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICBsZXQgc2hhZGVyVHlwZTsKLSAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jOworICAg
ICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7CisgICAgICAgIGxldCBzaGFkZXJUeXBlOworICAgICAg
ICBsZXQgbmF0aXZlRnVuYzsKIAotICAgICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3Iu
ZmllbGQKLSAgICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKLSAgICAgICAg
ICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSwgY3JlYXRlRmll
bGRUeXBlKCksCi0gICAgICAgICAgICAgICAgW25ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdp
biwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKV0sIGlzQ2FzdCwgc2hhZGVyVHlwZSk7Ci0gICAgICAg
ICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQs
IHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4gewotICAgICAgICAgICAgICAgIGxldCByZXN1bHQg
PSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihmaWVsZFNpemUpLCAwKTsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuY29weUZyb20oYmFzZS5wbHVzKG9mZnNldCksIGZpZWxkU2l6ZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcHJvZ3Jh
bS5hZGQobmF0aXZlRnVuYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBzZXR0
ZXI6IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVs
ZAorICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAgICAgICAgICBmaWVs
ZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSwgZmllbGQudHlwZSwKKyAgICAgICAg
ICAgIFtuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIFR5cGVSZWYud3JhcCh0
eXBlKSldLCBpc0Nhc3QsIHNoYWRlclR5cGUpOworICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9u
RGF0YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkg
PT4geworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKGZpZWxk
U2l6ZSksIDApOworICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UucGx1cyhvZmZzZXQp
LCBmaWVsZFNpemUpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworCisgICAgICAgIC8vIFRoZSBzZXR0ZXI6
IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisg
ICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSArICI9Iiwg
VHlwZVJlZi53cmFwKHR5cGUpLAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIG5ldyBG
dW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgVHlwZVJlZi53cmFwKHR5cGUpKSwKKyAg
ICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGZpZWxk
LnR5cGUpCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgaXNDYXN0LCBzaGFkZXJUeXBlKTsK
KyAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlLCB2YWx1
ZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoc3RydWN0U2l6ZSksIDApOworICAgICAgICAg
ICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UsIHN0cnVjdFNpemUpOworICAgICAgICAgICAgcmVzdWx0
LnBsdXMob2Zmc2V0KS5jb3B5RnJvbSh2YWx1ZSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0pOworICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5j
KTsKKworICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICBmdW5j
dGlvbiBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkKKyAgICAgICAgewogICAgICAgICAgICAgbmF0
aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAotICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwg
Im9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lICsgIj0iLCBjcmVhdGVUeXBlUmVmKCksCisgICAgICAg
ICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3ImLiIgKyBmaWVsZC5uYW1lLCBuZXcgUHRy
VHlwZShmaWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgZmllbGQudHlwZSksCiAgICAgICAgICAg
ICAgICAgWwotICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmln
aW4sIG51bGwsIGNyZWF0ZVR5cGVSZWYoKSksCi0gICAgICAgICAgICAgICAgICAgIG5ldyBGdW5j
UGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlRmllbGRUeXBlKCkpCisgICAgICAg
ICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgICAgICAgICAg
ZmllbGQub3JpZ2luLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFB0clR5cGUo
ZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIFR5cGVSZWYud3JhcCh0eXBlKSkpCiAgICAgICAg
ICAgICAgICAgXSwKICAgICAgICAgICAgICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOwotICAgICAg
ICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlLCB2YWx1ZV0s
IG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7Ci0gICAgICAgICAgICAgICAgbGV0
IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKHN0cnVjdFNpemUpLCAwKTsKLSAgICAgICAg
ICAgICAgICByZXN1bHQuY29weUZyb20oYmFzZSwgc3RydWN0U2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0LnBsdXMob2Zmc2V0KS5jb3B5RnJvbSh2YWx1ZSwgZmllbGRTaXplKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlv
bkRhdGEobmF0aXZlRnVuYywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUp
ID0+IHsKKyAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5sb2FkVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWJhc2UpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVy
cm9yKGZpZWxkLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KGJhc2UucGx1cyhvZmZzZXQpKTsKICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCi0gICAgICAgICAg
ICBmdW5jdGlvbiBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCi0gICAgICAgICAgICAgICAg
ICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yJi4iICsgZmllbGQubmFtZSwgbmV3IFB0clR5cGUo
ZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0ZUZpZWxkVHlwZSgpKSwKLSAgICAgICAg
ICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCBudWxsLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVzc1Nw
YWNlLCBjcmVhdGVUeXBlUmVmKCkpKQotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAg
ICAgICAgICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOwotICAgICAgICAgICAgICAgIHNldHVwSW1w
bGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwg
ZmllbGRTaXplKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLmxvYWRWYWx1
ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxs
IGRlcmVmZXJlbmNlIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChiYXNl
LnBsdXMob2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcHJv
Z3JhbS5hZGQobmF0aXZlRnVuYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHNldHVwQW5kZXIoInRocmVhZCIpOwotICAgICAgICAgICAgc2V0dXBBbmRlcigidGhy
ZWFkZ3JvdXAiKTsKLSAgICAgICAgICAgIHNldHVwQW5kZXIoImRldmljZSIpOwotICAgICAgICAg
ICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsKICAgICAgICAgfQorCisgICAgICAgIHNldHVwQW5k
ZXIoInRocmVhZCIpOworICAgICAgICBzZXR1cEFuZGVyKCJ0aHJlYWRncm91cCIpOworICAgICAg
ICBzZXR1cEFuZGVyKCJkZXZpY2UiKTsKKyAgICAgICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkK
K3sKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlwZXMudmFsdWVzKCkpIHsKKyAgICAg
ICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29yc0ZvclN0cnVjdFR5cGUocHJv
Z3JhbSwgdHlwZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVGVzdC5odG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5o
dG1sCmluZGV4IGMxMmU1ZDk5ZGM3NGE2ZjE5MDFjOTVkZjkxZDM0YTA1YWU4NTVlMWMuLjk4ZTM4
NTFmMTY5OWFhNmNlNjhiZmQ1YWI4NDYxYWU5N2RlZWQxYzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKQEAgLTE0LDYgKzE0LDcgQEAKIDxzY3JpcHQgc3JjPSJOYXRp
dmVUeXBlLmpzIj48L3NjcmlwdD4KIAogPHNjcmlwdCBzcmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iQWxsb2NhdGVBdEVudHJ5UG9pbnRzLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJBbm9ueW1vdXNWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iQXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVR5cGUuanMi
Pjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKaW5kZXggYWEwZmIz
MTEyZmRlY2RlODFhNTAwODA5ZTQ1MjkzODUyNDVlZDc4Ny4uYmY5ZjU1ZTMxNTM3ODRiNmQwMDc0
YmUxYjlhOTE0OGJhMmU0MjQ5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmpz
CkBAIC04MDgxLDYgKzgwODEsMTUyIEBAIHRlc3RzLmlubGluaW5nRG9lc250UHJvZHVjZUFsaWFz
aW5nSXNzdWVzID0gKCkgPT4gewogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10pLCAyMCk7CiB9CiAKK3Rlc3RzLnJldHVyblJlZmVyZW5jZVRvUGFy
YW1ldGVyID0gKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVz
dCBpbnQgZm9vKGJvb2wgY29uZGl0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KmJhcihjb25kaXRpb24sIDEsIDIpOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCog
YmFyKGJvb2wgY29uZGl0aW9uLCBpbnQgYSwgaW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBjb25kaXRpb24gPyAmYSA6ICZiOworICAgICAgICB9CisgICAgYCk7CisKKyAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFsgbWFrZUJvb2wo
cHJvZ3JhbSwgdHJ1ZSkgXSksIDEpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgWyBtYWtlQm9vbChwcm9ncmFtLCBmYWxzZSkgXSksIDIpOworfQor
Cit0ZXN0cy5yZXR1cm5SZWZlcmVuY2VUb1BhcmFtZXRlcldpdGhEaWZmZXJlbnRGdW5jdGlvbnMg
PSAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0IGludCBm
b28oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKmJhcigxMCkgKyAqYmF6KDIwKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRocmVhZCBpbnQqIGJhcihpbnQgeCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICZ4OworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCog
YmF6KGludCB5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJnk7CisgICAgICAgIH0K
KyAgICBgKTsKKworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10pLCAzMCk7Cit9CisKK3Rlc3RzLnJldHVyblJlZmVyZW5jZVRvU2FtZVBhcmFtZXRl
ciA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50
IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwbHVzKGJhcig1KSwgYmFyKDcp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwbHVzKHRocmVhZCBpbnQqIHgsIHRocmVhZCBp
bnQqIHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqeCArICp5OworICAgICAgICB9
CisKKyAgICAgICAgdGhyZWFkIGludCogYmFyKGludCB4KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gJng7CisgICAgICAgIH0KKyAgICBgKTsKKworICAgIGNoZWNrSW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCAxMCk7Cit9CisKK3Rlc3RzLnJldHVy
blJlZmVyZW5jZVRvTG9jYWxWYXJpYWJsZSA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRv
UHJlcChgCisgICAgICAgIHRlc3QgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqYmFyKCk7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXIoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDQyOworICAgICAgICAgICAgcmV0dXJuICZhOwor
ICAgICAgICB9CisgICAgYCk7CisKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdKSwgNDIpOworfQorCit0ZXN0cy5yZXR1cm5SZWZlcmVuY2VUb0xv
Y2FsVmFyaWFibGVXaXRoTmVzdGluZyA9ICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCisgICAgICAgIHRlc3QgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAqYmFyKCkgKyAqYmF6KCk7CisgICAgICAgIH0KKworICAgICAgICB0aHJlYWQgaW50KiBiYXIo
KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDIwOworICAgICAgICAgICAgcmV0dXJu
ICZhOworICAgICAgICB9CisKKyAgICAgICAgdGhyZWFkIGludCogYmF6KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IGEgPSAyMjsKKyAgICAgICAgICAgIHJldHVybiAmYTsKKyAgICAgICAg
fQorICAgIGApOworCisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSksIDQyKTsKK30KKwordGVzdHMuY29udmVydFB0clRvQXJyYXlSZWYgPSAoKSA9
PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0IGludCBmb28oKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFyKClbMF07CisgICAgICAgIH0KKworICAg
ICAgICB0aHJlYWQgaW50W10gYmFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSA0
MjsKKyAgICAgICAgICAgIHJldHVybiBAKCZ4KTsKKyAgICAgICAgfQorICAgIGApOworCisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsK
K30KKwordGVzdHMuY29udmVydExvY2FsVmFyaWFibGVUb0FycmF5UmVmID0gKCkgPT4geworICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQgZm9vKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGJhcigpWzBdOworICAgICAgICB9CisKKyAgICAgICAgdGhy
ZWFkIGludFtdIGJhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB4ID0gNDI7CisgICAg
ICAgICAgICByZXR1cm4gQHg7CisgICAgICAgIH0KKyAgICBgKTsKKworICAgIGNoZWNrSW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9CisKK3Rlc3Rz
LnJlZmVyZW5jZVRha2VuVG9Mb2NhbFZhcmlhYmxlSW5FbnRyeVBvaW50U2hvdWxkbnRNb3ZlQW55
dGhpbmcgPSAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0
IGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDQyOworICAgICAgICAg
ICAgdGhyZWFkIGludCogYiA9ICZhOworICAgICAgICAgICAgcmV0dXJuICpiOworICAgICAgICB9
CisgICAgYCk7CisKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdKSwgNDIpOworfTsKKwogb2tUb1Rlc3QgPSB0cnVlOwogCiBsZXQgdGVzdEZpbHRl
ciA9IC8uKi87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9pbmRleC5odG1sCmluZGV4IDI0NDE1ZjMzYTE3MDliMmUwZTZkNWJlY2U2N2Fh
ODk1MzA2Yjg5YmUuLjA4ZjRlZDViMDkzMWI2YmZiM2E0MjI4OTc4MzdlZWY4YTFhYzMyOTAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKKysrIGIv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbApAQCAtMTQsNiArMTQsNyBA
QAogPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0PgogCiA8c2NyaXB0IHNyYz0i
QWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJBbGxvY2F0ZUF0RW50cnlQ
b2ludHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IkFycmF5VHlwZS5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>