<?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>142072</bug_id>
          
          <creation_ts>2015-02-26 19:38:11 -0800</creation_ts>
          <short_desc>[JSC] Use the way number constants are written to help type speculation</short_desc>
          <delta_ts>2015-02-27 19:21:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1072608</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-26 19:38:11 -0800</bug_when>
    <thetext>[JSC] Use the way number constants are written to help type speculation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072623</commentid>
    <comment_count>1</comment_count>
      <attachid>247491</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-26 20:39:34 -0800</bug_when>
    <thetext>Created attachment 247491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072624</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-26 20:41:40 -0800</bug_when>
    <thetext>Attachment 247491 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/ParserTokens.h:97:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/parser/ParserTokens.h:98:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 2 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072746</commentid>
    <comment_count>3</comment_count>
      <attachid>247491</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-27 11:11:10 -0800</bug_when>
    <thetext>Comment on attachment 247491
Patch

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

Looks reasonable to me. Probably useful to get Phil to review too.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:638
&gt;          m_constantRegisters.last().set(m_globalObject-&gt;vm(), m_ownerExecutable.get(), v);
&gt; +        m_constantsSourceCodeRepresentation.append(SourceCodeRepresentation::Other);

Is there one entry in m_constantsSourceCodeRepresentation for each entry in m_constantRegisters? If so, can we just make m_constantRegisters a vector of pairs, or some kind of struct, so we don&apos;t have to worry about keeping things in sync?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072778</commentid>
    <comment_count>4</comment_count>
      <attachid>247491</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-27 12:16:58 -0800</bug_when>
    <thetext>Comment on attachment 247491
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:638
&gt;&gt; +        m_constantsSourceCodeRepresentation.append(SourceCodeRepresentation::Other);
&gt; 
&gt; Is there one entry in m_constantsSourceCodeRepresentation for each entry in m_constantRegisters? If so, can we just make m_constantRegisters a vector of pairs, or some kind of struct, so we don&apos;t have to worry about keeping things in sync?

The reason for keeping them separate is GC. For example in CodeBlock, CodeBlock::stronglyVisitStrongReferences() visit the whole memory buffer of m_constantRegisters.

We could still mark them one by one but I figured we should not pay any GC cost for this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072780</commentid>
    <comment_count>5</comment_count>
      <attachid>247491</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-27 12:21:41 -0800</bug_when>
    <thetext>Comment on attachment 247491
Patch

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

I&apos;d like to see a solution that doesn&apos;t add fields or constructor overloads to Node, but that uses NodeFlags.

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:638
&gt;&gt; +        m_constantsSourceCodeRepresentation.append(SourceCodeRepresentation::Other);
&gt; 
&gt; Is there one entry in m_constantsSourceCodeRepresentation for each entry in m_constantRegisters? If so, can we just make m_constantRegisters a vector of pairs, or some kind of struct, so we don&apos;t have to worry about keeping things in sync?

Two downsides of what you propose.

First, we wouldn&apos;t be able to BaseIndex into the m_constantRegisters.  LLInt does that a lot.  BaseIndex addressing maxes out at a shift amount of 3, i.e. an array element size of 8.  So if you made it an array of pairs, you&apos;d have to use an explicit shift to get the offset into constantRegisters from the index.

Second, you&apos;d use more memory.  The pair structure would become aligned to the max native alignment of its fields, which is 8.  So that representation would become an 8 byte element.  Using two arrays means that the representation can be arbitrarily compact (could even be a bit in the future).

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:674
&gt; +        Node* result = m_graph.addNode(SpecNone, NodeOrigin(currentCodeOrigin()), info, sourceCodeRepresentation);
&gt; +        m_currentBlock-&gt;append(result);
&gt; +        return result;

Why doesn&apos;t this do addToGraph()?  Why can&apos;t we put the SourceCodeRepresentation into the NodeFlags of JSConstant?

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:1056
&gt; +    m_codeBlock-&gt;constantsSourceCodeRepresentation().resize(0);

Probably my feedback will involve a lot of comments to the effect of: why can&apos;t we put the SourceCodeRepresentation into the NodeFlags of JSConstant?

&gt; Source/JavaScriptCore/dfg/DFGNode.h:285
&gt; +    Node(NodeOrigin nodeOrigin, OpInfo imm, SourceCodeRepresentation sourceCodeRepresentation)
&gt; +        : origin(nodeOrigin)
&gt; +        , children()
&gt; +        , m_constantSourceRepresentation(static_cast&lt;unsigned&gt;(sourceCodeRepresentation))
&gt; +        , m_virtualRegister(VirtualRegister())
&gt; +        , m_refCount(1)
&gt; +        , m_prediction(SpecNone)
&gt; +        , m_opInfo(imm.m_value)
&gt; +        , m_opInfo2(0)
&gt; +        , replacement(nullptr)
&gt; +        , owner(nullptr)
&gt; +    {
&gt; +        setOpAndDefaultFlags(JSConstant);
&gt; +        m_constantSourceRepresentation = static_cast&lt;unsigned&gt;(sourceCodeRepresentation);
&gt; +        ASSERT(!(m_flags &amp; NodeHasVarArgs));
&gt; +    }
&gt; +

Seems like overkill to add a new Node overload for this.  You wouldn&apos;t have to if it was just a NodeFlags.

&gt; Source/JavaScriptCore/dfg/DFGNode.h:1933
&gt; +    unsigned m_constantSourceRepresentation: 2;

So, this probably increases the size of Node (10 + 22 + 2 = 34, previously it was 32 - so previously it used one 32-bit int and now it uses more space).  Also, we generally avoid adding new fields to Node and instead just add a flag in NodeFlags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072781</commentid>
    <comment_count>6</comment_count>
      <attachid>247491</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-27 12:28:12 -0800</bug_when>
    <thetext>Comment on attachment 247491
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:145
&gt; -            SpeculatedType type = speculationFromValue(node-&gt;asJSValue());
&gt; +            SpeculatedType type = speculationFromValue(node-&gt;asJSValue(), node-&gt;sourceCodeRepresentation());

Why did you do this, instead of just having node-&gt;sourceCodeRepresentation deactivate the Int52 hack below?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072782</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-27 12:30:05 -0800</bug_when>
    <thetext>I think that in the DFG the best way to do this is to use DoubleConstant in ByteCodeParser for when the source code representation is Double, and then make sure that PredictionPropagation understands DoubleConstant.  Then you don&apos;t have to change the IR so much, and it keeps things consistent - DoubleConstant already has the meaning you want but happens to not get used by the PredictionPropagation phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072879</commentid>
    <comment_count>8</comment_count>
      <attachid>247564</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-27 15:40:17 -0800</bug_when>
    <thetext>Created attachment 247564
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072880</commentid>
    <comment_count>9</comment_count>
      <attachid>247565</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-27 15:42:09 -0800</bug_when>
    <thetext>Created attachment 247565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072882</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-27 15:43:24 -0800</bug_when>
    <thetext>Attachment 247565 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/ParserTokens.h:97:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/parser/ParserTokens.h:98:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 2 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072892</commentid>
    <comment_count>11</comment_count>
      <attachid>247565</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-27 15:50:53 -0800</bug_when>
    <thetext>Comment on attachment 247565
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:264
&gt; +                OpInfo opInfo(m_graph.freezeStrong(value));

I guess that the value is guaranteed to be isDouble() if we have SourceCodeRepresentation::Double.  Can we assert it?

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:156
&gt; +            double number = node-&gt;asNumber();
&gt; +            if (number != number)
&gt; +                changed |= setPrediction(SpecDoublePureNaN);
&gt; +            else
&gt; +                changed |= setPrediction(SpecFullRealNumber);

Why can&apos;t this be speculationFromValue()?

&gt; Source/JavaScriptCore/dfg/DFGValidate.cpp:558
&gt; +    void validateEdgeWithDoubleResultIfNecessary(Node* node, Edge edge)
&gt; +    {
&gt; +        if (!edge-&gt;hasDoubleResult())
&gt; +            return;
&gt; +
&gt; +        // The only case were an edge can have a DoubleResult without having a number-type useKind()
&gt; +        // for constants that appear as double in the source code (e.g. 42.0e2).
&gt; +        if (edge-&gt;op() == DoubleConstant)
&gt; +            VALIDATE((node, edge), edge.useKind() == UntypedUse || edge.useKind() == DoubleRepUse || edge.useKind() == DoubleRepRealUse || edge.useKind() == DoubleRepMachineIntUse);
&gt; +        else
&gt; +            VALIDATE((node, edge), edge.useKind() == DoubleRepUse || edge.useKind() == DoubleRepRealUse || edge.useKind() == DoubleRepMachineIntUse);
&gt; +    }

I&apos;m super uncomfortable with this change.  It&apos;s undesirable because after FixupPhase, we *will* have DoubleRepUse (or its friends) for every DoubleResult node, and we must assert that this is true - otherwise for example we&apos;ll crash while lowering to LLVM, or while emitting machine code in DFGSpeculativeJIT.

There are probably three OK solutions:

- Make the representation validation contingent upon FixupPhase having run.  It&apos;s OK to have a m_fixupDidRun bool in Graph, or better yet make it an enum.  We have a bunch of such enums in Graph.

- Have ByteCodeParser plant a DoubleRepUse on DoubleConstant.  This would be easy; you could probably make it work by changing code like this in ByteCodeParser:

    Node* addToGraph(NodeType op, Node* child1 = 0, Node* child2 = 0, Node* child3 = 0)
    {
        Node* result = m_graph.addNode(
            SpecNone, op, currentNodeOrigin(), Edge(child1), Edge(child2),
            Edge(child3));

to instead do:

        Node* result = m_graph.addNode(
            SpecNone, op, currentNodeOrigin(), child1-&gt;defaultEdge(), child2-&gt;defaultEdge(),
            child3-&gt;defaultEdge());

- Go back to using JSConstant and use a NodeFlag to indicate representation.

I think I like the second one the best if it &quot;just works&quot;, otherwise the third one feels most right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072909</commentid>
    <comment_count>12</comment_count>
      <attachid>247565</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-27 16:12:34 -0800</bug_when>
    <thetext>Comment on attachment 247565
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:113
&gt; +        * bytecode/SpeculatedType.cpp:
&gt; +        (JSC::speculationFromValue):
&gt; +        This is where the magic comes in. When integer values were represented as double,
&gt; +        speculate full number instead of Int32/Int52.

You no longer have this change. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072922</commentid>
    <comment_count>13</comment_count>
      <attachid>247575</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-27 16:36:50 -0800</bug_when>
    <thetext>Created attachment 247575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072949</commentid>
    <comment_count>14</comment_count>
      <attachid>247578</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-27 18:17:42 -0800</bug_when>
    <thetext>Created attachment 247578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072950</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-27 18:19:23 -0800</bug_when>
    <thetext>Attachment 247578 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/ParserTokens.h:97:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/parser/ParserTokens.h:98:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 2 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072961</commentid>
    <comment_count>16</comment_count>
      <attachid>247578</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-27 19:21:53 -0800</bug_when>
    <thetext>Comment on attachment 247578
Patch

Clearing flags on attachment: 247578

Committed r180813: &lt;http://trac.webkit.org/changeset/180813&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072962</commentid>
    <comment_count>17</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-27 19:21:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247491</attachid>
            <date>2015-02-26 20:39:34 -0800</date>
            <delta_ts>2015-02-27 15:40:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142072-20150226203920.patch</filename>
            <type>text/plain</type>
            <size>73466</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MzZlMjI5ODVkMmQ5ZmE4ZjkzN2JkNzVlYTRlYjJiNGEyNDA4MTQ1Li5kNGY0YWZiNGQ5OTE3NGMy
ZWE2ZDYzOTEzZmIwODM4N2M0YWQyZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjYgQEAKKzIwMTUtMDItMjYgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0pTQ10gVXNlIHRoZSB3YXkgbnVtYmVyIGNvbnN0YW50cyBhcmUg
d3JpdHRlbiB0byBoZWxwIHR5cGUgc3BlY3VsYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjA3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgd2UgaW50ZXJw
cmV0IG51bWVyaWMgY29uc3RhbnQgYmFzZWQgb24gaG93IHRoZXkgYXBwZWFyCisgICAgICAgIGlu
IHRoZSBzb3VyY2UuCisKKyAgICAgICAgQ29uc3RhbnRzIHRoYXQgYXJlIGludGVnZXJzIGJ1dCB3
cml0dGVuIHdpdGggYSBkZWNpbWFsIHBvaW50IG5vdyBjYXJyeSB0aGF0IGluZm9ybWF0aW9uCisg
ICAgICAgIHRvIHRoZSBvcHRpbWl6YXRpbmcgdGllcnMuIEZyb20gdGhlcmUsIHdlIHVzZSB0aGF0
IHRvIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCB0eXBpbmcKKyAgICAgICAgbWF0aCBvcGVyYXRp
b25zIHRvd2FyZCBkb3VibGUgb3BlcmF0aW9ucy4KKworICAgICAgICBGb3IgZXhhbXBsZSwgaW46
CisgICAgICAgICAgICB2YXIgYSA9IHggKyAxLjA7CisgICAgICAgICAgICB2YXIgYiA9IHkgKyAx
OworICAgICAgICBUaGUgQWRkIGZvciBhIHdvdWxkIGJlIGJpYXNlZCB0b3dhcmQgZG91Ymxlcywg
dGhlIEFkZCBmb3IgYiB3b3VsZCBzcGVjdWxhdGUKKyAgICAgICAgaW50ZWdlciBhcyB1c3VhbC4K
KworCisgICAgICAgIFRoZSBnYWlucyBhcmUgdGlueSBidXQgdGhpcyBpcyBhIHByZXJlcXVpc2l0
ZSB0byBtYWtlIG15IG5leHQgcGF0Y2ggdXNlZnVsOgorICAgICAgICAtU3VuU3BpZGVyJ3MgYWNj
ZXNzLWZhbm5rdWNoOiBkZWZpbml0ZWx5IDEuMDY2MXggZmFzdGVyCisgICAgICAgIC1TdW5TcGlk
ZXIncyBtYXRoLWNvcmRpYzogZGVmaW5pdGVseSAxLjAyNjZ4IHNsb3dlcgorICAgICAgICAgICAg
b3ZlcmFsOiBtaWdodCBiZSAxLjAwNjZ4IHNsb3dlci4KKyAgICAgICAgLUtyYWtlbidzIGltYWdp
bmctZGFya3Jvb206IGRlZmluaXRlbHkgMS4wMzMzeCBmYXN0ZXIuCisKKyAgICAgICAgKiBwYXJz
ZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjp0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2Vu
KToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OmxleCk6CisgICAgICAgIFRoZSBsZXhlciBub3cg
Y3JlYXRlIHR3byB0eXBlcyBvZiB0b2tlbnMgZm9yIG51bWJlcjogSU5URUdFUiBhbmQgRE9VQkxF
LgorICAgICAgICBUaG9zZSB0b2tlbiB0eXBlcyBvbmx5IGNhcnJ5IGluZm9ybWF0aW9uIGFib3V0
IGhvdyB0aGUgdmFsdWVzIHdlcmUKKyAgICAgICAgZW50ZXJlZCwgYW4gSU5URUdFUiBkb2VzIG5v
dCBoYXZlIHRvIGJlIGFuIGludGVnZXIsIGl0IGlzIG9ubHkgd3JpdHRlbiBsaWtlIG9uZS4KKyAg
ICAgICAgTGFyZ2UgaW50ZWdlciBzdGlsbCBlbmQgdXAgcmVwcmVzZW50ZWQgYXMgZG91YmxlIGlu
IG1lbW9yeS4KKworICAgICAgICBPbmUgdHJhcCBJIGZlbGwgaW50byB3YXMgdHlwaW5nIG51bWJl
cnMgbGlrZSAxMmUzIGFzIGRvdWJsZS4gVGhpcyBraW5kIG9mIGxpdGVyYWwKKyAgICAgICAgaXMg
ZnJlcXVlbnRseSB1c2VkIGluIGludGVnZXItdHlwZWQgY29kZSwgd2hpbGUgMTIuZTMgd291bGQg
YXBwZWFyIGluIGRvdWJsZS10eXBlZAorICAgICAgICBjb2RlLgorICAgICAgICBCZWNhdXNlIG9m
IHRoYXQsIHRoZSBvbmx5IHNpZ25hbHMgZm9yIGRvdWJsZSBhcmU6IGRlY2ltYWwgcG9pbnQsIG5l
Z2F0aXZlIHplcm8sCisgICAgICAgIGFuZCByaWRpY3Vsb3VzbHkgbGFyZ2UgdmFsdWVzLgorCisg
ICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6RG91Ymxl
Tm9kZTo6RG91YmxlTm9kZSk6CisgICAgICAgIChKU0M6OkludGVnZXJOb2RlOjpJbnRlZ2VyTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6Ok51bWJlck5vZGU6
OnZhbHVlKToKKyAgICAgICAgKEpTQzo6TnVtYmVyTm9kZTo6c2V0VmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICBOdW1iZXIgZ2V0IHNwZWNpYWxpemVkIGluIHR3byBuZXcga2luZCBvZiBub2RlcyBp
biB0aGUgQVNUOiBJbnRlZ2VyTm9kZSBhbmQgRG91YmxlTm9kZS4KKworICAgICAgICAqIGJ5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG91YmxlRXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZUludGVnZXJFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
SW50ZWdlckxpa2VOdW1iZXIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3Vi
bGVMaWtlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlTnVtYmVyRnJv
bUJpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJl
ckZyb21VbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdh
dGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtl
TW9kTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VS
aWdodFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlm
dE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZU51bWJlckV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVO
dW1iZXIpOiBEZWxldGVkLgorICAgICAgICBUaGUgQVNUIGhhcyBzb21lIG9wdGltaXphdGlvbiB0
byByZXNvbHZlIGNvbnN0YW50cyBiZWZvcmUgZW1pdHRpbmcgYnl0ZWNvZGUuCisgICAgICAgIElu
IHRoZSBuZXcgY29kZSwgdGhlIGludGdlciByZXByZXNlbnRhdGlvbiBpcyBrZXB0IGlmIGJvdGgg
b3BlcmFuZHMgd2hlcmUKKyAgICAgICAgYWxzbyByZXByZXNlbnRlZCBhcyBpbnRlZ2Vycy4KKwor
ICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4pOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnByaW50VW5leHBlY3RlZFRva2VuVGV4dCk6CisgICAgICAgICogcGFyc2VyL1BhcnNlclRv
a2Vucy5oOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZURvdWJsZUV4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjpjcmVhdGVJbnRlZ2VyRXhwcik6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
OmNyZWF0ZU51bWJlckV4cHIpOiBEZWxldGVkLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdpc3Rlck5hbWUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50TmFtZSk6CisgICAgICAgIENoYW5nZSBjb25zdGFu
dE5hbWUociwgZ2V0Q29uc3RhbnQocikpIC0+IGNvbnN0YW50TmFtZShyKSB0byBzaW1wbGlmeQor
ICAgICAgICB0aGUgZHVtcCBjb2RlLgorCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5
dGVjb2RlKToKKyAgICAgICAgRHVtcCB0aHJlIHNvdXJlIHJlcHJlc2VudGF0aW9uIGluZm9ybWF0
aW9uIHdlIGhhdmUgd2l0aCBlYWNoIGNvbnN0YW50LgorCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6Cisg
ICAgICAgIChKU0M6OmNvbnN0YW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnRMYXppbHkpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisKKyAgICAgICAgKiBi
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJv
bVZhbHVlKToKKyAgICAgICAgVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgY29tZXMgaW4uIFdoZW4g
aW50ZWdlciB2YWx1ZXMgd2VyZSByZXByZXNlbnRlZCBhcyBkb3VibGUsCisgICAgICAgIHNwZWN1
bGF0ZSBmdWxsIG51bWJlciBpbnN0ZWFkIG9mIEludDMyL0ludDUyLgorCisgICAgICAgICogYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNocmlua1RvRml0
KToKKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgV2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRl
IGJldHdlZW4gY29uc3RhbnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYnV0IGFyZQorICAg
ICAgICByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiB0aGUgc291cmNlLiBWYWx1ZXMgbGlrZSAx
LjAgYW5kIDEgbm93IGVuZCB1cAorICAgICAgICBhcyBkaWZmZXJlbnQgY29uc3RhbnRzLgorCisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
YWRkQ29uc3RhbnRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckZyb3plblZhbHVlcyk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZFNwZWN1bGF0aW9uTW9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0
ZUludDMyKToKKyAgICAgICAgQXJpdGhBZGQgaXMgdmVyeSBhZ2dyZXNzaXZlIHRvd2FyZCB1c2lu
ZyBJbnQ1Miwgd2hpY2ggaXMgcXVpdGUgdXNlZnVsCisgICAgICAgIGluIG1hbnkgYmVuY2htYXJr
cy4KKworICAgICAgICBIZXJlIHdlIG5lZWQgdG8gc3BlY2lhbGl6ZSB0byBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgZm9yY2Ugb3VyIGxpdGVyYWxzCisgICAgICAgIHRvIEludDUyIGlmIHRoZXJlIHdlcmUg
cmVwcmVzZW50ZWQgYXMgZG91YmxlLgorCisgICAgICAgIFRoZXJlIGlzIG9uZSBleGNlcHRpb24g
dG8gdGhhdCBydWxlOiB3aGVuIHRoZSBvdGhlciBvcGVyYW5kIGlzIGd1YXJhbnRlZWQKKyAgICAg
ICAgdG8gY29tZSBmcm9tIGEgTm9kZVJlc3VsdEludDMyLiBUaGlzIGlzIGJlY2F1c2UgdGhlcmUg
aXMgc29tZSB3ZWlyZCBjb2RlCisgICAgICAgIGRvaW5nIHN0dWZmIGxpa2U6CisgICAgICAgICAg
ICB2YXIgYiA9IGF8MDsKKyAgICAgICAgICAgIHZhciBjID0gYioyLjA7CisKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnNldE9wQW5kRGVmYXVsdEZsYWdzKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGRmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlLmg6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFz
aFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJl
cHJlc2VudGF0aW9uSGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6RW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb25IYXNoVHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9u
SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0
aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcml0aC1hZGQtd2l0aC1j
b25zdGFudHMuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcml0aC1tdWwtd2l0
aC1jb25zdGFudHMuanM6IEFkZGVkLgorCiAyMDE1LTAyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIFNTQSBzdGFjayBhY2Nlc3NlcyBzaG91bGRuJ3Qg
c3BlYWsgb2YgVmFyaWFibGVBY2Nlc3NEYXRhcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBlZjBhZDRlNjIyYjY4YTI1MzBhMThlYTJhODdiOTRm
YzI5M2NiZThkLi5jMWEyMGNiMjgxNjVkZGUxNjJhYjUzZDQzZWM4NDVjZDlkZTQ0MzlhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTcyLDEx
ICsxNzIsNiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgIGR1bXBBc3N1bWluZ0pJVFR5cGUob3V0LCBqaXRUeXBlKCkpOwogfQogCi1zdGF0aWMgQ1N0
cmluZyBjb25zdGFudE5hbWUoaW50IGssIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
Q1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIoayksICIpIik7Ci19Ci0KIHN0YXRp
YyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAg
ICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwoKSwgIihAaWQiLCBpZDAsICIpIik7CkBAIC0x
ODUsMTEgKzE4MCwxNyBAQCBzdGF0aWMgQ1N0cmluZyBpZE5hbWUoaW50IGlkMCwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpCiBDU3RyaW5nIENvZGVCbG9jazo6cmVnaXN0ZXJOYW1lKGludCByKSBj
b25zdAogewogICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChyKSkKLSAgICAgICAgcmV0
dXJuIGNvbnN0YW50TmFtZShyLCBnZXRDb25zdGFudChyKSk7CisgICAgICAgIHJldHVybiBjb25z
dGFudE5hbWUocik7CiAKICAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7
CiB9CiAKK0NTdHJpbmcgQ29kZUJsb2NrOjpjb25zdGFudE5hbWUoaW50IGluZGV4KSBjb25zdAor
eworICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25zdGFudChpbmRleCk7CisgICAgcmV0dXJuIHRv
Q1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLCAiKSIpOworfQorCiBz
dGF0aWMgQ1N0cmluZyByZWdleHBUb1NvdXJjZVN0cmluZyhSZWdFeHAqIHJlZ0V4cCkKIHsKICAg
ICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwgMCB9OwpAQCAtNjA2LDcgKzYwNywx
OSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
ICAgIG91dC5wcmludGYoIlxuQ29uc3RhbnRzOlxuIik7CiAgICAgICAgIHNpemVfdCBpID0gMDsK
ICAgICAgICAgZG8gewotICAgICAgICAgICAgb3V0LnByaW50ZigiICAgayV1ID0gJXNcbiIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgdG9DU3RyaW5nKG1fY29uc3RhbnRSZWdpc3RlcnNbaV0u
Z2V0KCkpLmRhdGEoKSk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb25EZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHN3aXRjaCAobV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb25baV0pIHsKKyAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgICAgICAgICAgc291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uRGVzY3JpcHRpb24gPSAiOiBpbiBzb3VyY2UgYXMgZG91YmxlIjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJ
bnRlZ2VyOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0
aW9uID0gIjogaW4gc291cmNlIGFzIGludGVnZXIiOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgorICAgICAg
ICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gIiI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIgICBrJXUgPSAlcyVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSksIHRvQ1N0cmluZyht
X2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKS5kYXRhKCksIHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbkRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8
IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICB9CkBAIC0xNDQ5LDcgKzE0NjIsNyBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgaW50IGswID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBKU05hbWVTY29wZTo6VHlwZSBzY29wZVR5cGUg
PSAoSlNOYW1lU2NvcGU6OlR5cGUpKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXNoX25hbWVfc2NvcGUi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgY29uc3RhbnROYW1lKGswLCBn
ZXRDb25zdGFudChrMCkpLmRhdGEoKSwgKHNjb3BlVHlwZSA9PSBKU05hbWVTY29wZTo6RnVuY3Rp
b25OYW1lU2NvcGUpID8gImZ1bmN0aW9uU2NvcGUiIDogKChzY29wZVR5cGUgPT0gSlNOYW1lU2Nv
cGU6OkNhdGNoU2NvcGUpID8gImNhdGNoU2NvcGUiIDogInVua25vd25TY29wZVR5cGUiKSk7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGNvbnN0YW50TmFtZShrMCkuZGF0YSgp
LCAoc2NvcGVUeXBlID09IEpTTmFtZVNjb3BlOjpGdW5jdGlvbk5hbWVTY29wZSkgPyAiZnVuY3Rp
b25TY29wZSIgOiAoKHNjb3BlVHlwZSA9PSBKU05hbWVTY29wZTo6Q2F0Y2hTY29wZSkgPyAiY2F0
Y2hTY29wZSIgOiAidW5rbm93blNjb3BlVHlwZSIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKQEAgLTE0NjYsNyArMTQ3OSw3IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBpbnQgazAgPSAoKytpdCkt
PnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBrMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhy
b3dfc3RhdGljX2Vycm9yIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCBjb25z
dGFudE5hbWUoazAsIGdldENvbnN0YW50KGswKSkuZGF0YSgpLCBrMSA/ICJ0cnVlIiA6ICJmYWxz
ZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgY29uc3RhbnROYW1lKGswKS5k
YXRhKCksIGsxID8gInRydWUiIDogImZhbHNlIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CkBAIC0xNjM5LDYgKzE2NTIsNyBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCiAg
ICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5tX2ZpcnN0TGluZUNvbHVtbk9mZnNl
dCkKICAgICAsIG1fY29kZVR5cGUob3RoZXIubV9jb2RlVHlwZSkKICAgICAsIG1fY29uc3RhbnRS
ZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykKKyAgICAsIG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKICAg
ICAsIG1fZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1bmN0aW9uRXhwcnMpCiAgICAgLCBtX29zckV4
aXRDb3VudGVyKDApCkBAIC0xNzMwLDcgKzE3NDQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxp
bgogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2Zp
bGVyKCkpCiAgICAgICAgIHZtKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5yZW1vdmVV
bmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIG1fb3duZXJFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgbV9vd25lckV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAKLSAgICBzZXRDb25zdGFudFJlZ2lzdGVycyh1bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSk7CisgICAgc2V0Q29uc3RhbnRSZWdp
c3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSk7CiAgICAgaWYgKHVu
bGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCiAgICAgICAgIG1fY29uc3RhbnRS
ZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25z
dGFudEluZGV4KCldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVjdC5n
ZXQoKSk7CiAgICAgbV9mdW5jdGlvbkRlY2xzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CkBAIC0yOTgwLDYgKzI5OTQsNyBAQCB2b2lkIENv
ZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQogICAgIAogICAgIGlm
IChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24uc2hyaW5rVG9GaXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3JhcmVEYXRhKSB7
CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCAwNzI5
M2UwM2QwN2RhNWM3NzBmMmQyOTg4NzVjMjliNTk0OGRlNzc3Li42MWFiM2JkYjM5ZGEzZTgzODJh
YTA2Yzk5MzcwZDZlOTRlM2ZlYzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCkBAIC02MjgsMTIgKzYyOCwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMoKSB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzOyB9CisgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRS
ZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgfQog
ICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikKICAgICB7CiAgICAgICAgIHVuc2ln
bmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0
YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CiAgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgbV9vd25l
ckV4ZWN1dGFibGUuZ2V0KCksIHYpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC02NDEsNiArNjQzLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXpl
KCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtu
b3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBw
ZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIApAQCAtNjQ5LDYgKzY1Miw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CiAgICAg
QUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29u
c3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhd
LmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2wo
aW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAg
aW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXpl
KCk7IH0KQEAgLTk4MywxMiArOTg3LDE0IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUFs
bFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7
CiAKLSAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudHMpCisgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhj
b25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0
b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbnN0YW50cy5zaXplKCkgPT0gY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNpemUoKSk7CiAgICAgICAgIHNpemVfdCBjb3Vu
dCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVzaXpl
KGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAg
ICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJs
ZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKICAgICB9
CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZSgKQEAgLTk5Niw2ICsxMDAyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExp
bmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKIAogICAgIENTdHJpbmcgcmVnaXN0ZXJO
YW1lKGludCByKSBjb25zdDsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNv
bnN0OwogICAgIHZvaWQgcHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50
IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAgdm9p
ZCBwcmludEJpbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBj
b25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAgdm9pZCBwcmludENvbmRp
dGlvbmFsSnVtcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiwgaW50IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCk7CkBAIC0x
MDkzLDYgKzExMDAsNyBAQCBwcml2YXRlOgogICAgIC8vIFRPRE86IFRoaXMgY291bGQganVzdCBi
ZSBhIHBvaW50ZXIgdG8gbV91bmxpbmtlZENvZGVCbG9jaydzIGRhdGEsIGJ1dCB0aGUgREZHIG11
dGF0ZXMKICAgICAvLyBpdCwgc28gd2UncmUgc3R1Y2sgd2l0aCBpdCBmb3Igbm93LgogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgVmVj
dG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBt
X2Z1bmN0aW9uRGVjbHM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFi
bGU+PiBtX2Z1bmN0aW9uRXhwcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCmluZGV4IDQ4ZDFmZmFjYzdiY2I2MDhlN2I5NTBlZGRi
NmVlY2E0MDAyZGZjYTAuLmIxZTFkNGYyZWY4ZmI1MzBjMTI2NTAwYTQ5YWM4YzA3MGUyOWUwZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmNwcApAQCAtMzQyLDggKzM0MiwxOSBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21D
ZWxsKEpTQ2VsbCogY2VsbCkKICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKGNl
bGwtPnN0cnVjdHVyZSgpKTsKIH0KIAotU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVmFs
dWUoSlNWYWx1ZSB2YWx1ZSkKK1NwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpT
VmFsdWUgdmFsdWUsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pCiB7CisgICAgaWYgKHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9PSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkRvdWJsZSkgeworICAgICAgICBpZiAodmFsdWUuaXNNYWNoaW5lSW50
KCkpCisgICAgICAgICAgICByZXR1cm4gU3BlY0Z1bGxSZWFsTnVtYmVyOworCisgICAgICAgIGRv
dWJsZSBudW1iZXIgPSB2YWx1ZS5hc051bWJlcigpOworICAgICAgICBpZiAobnVtYmVyICE9IG51
bWJlcikKKyAgICAgICAgICAgIHJldHVybiBTcGVjRG91YmxlUHVyZU5hTjsKKworICAgICAgICBy
ZXR1cm4gU3BlY05vbkludEFzRG91YmxlOworICAgIH0KKwogICAgIGlmICh2YWx1ZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBTcGVjRW1wdHk7CiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKaW5k
ZXggZjczYzJhNDExMDUzMmI0NTMzZTc4ZWFkZjRlNjQ5MTA4ZTFkYTlkNy4uZTQ5MzY1ZDQyODYy
Y2QyMmQ1MTIzMWIzMDQ4MzhhZTg1YTIwMDgwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKQEAgLTM5Niw3ICszOTYsNyBAQCBpbmxpbmUg
Ym9vbCBzcGVjdWxhdGlvbkNoZWNrZWQoU3BlY3VsYXRlZFR5cGUgYWN0dWFsLCBTcGVjdWxhdGVk
VHlwZSBkZXNpcmVkKQogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvKGNv
bnN0IENsYXNzSW5mbyopOwogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJl
KFN0cnVjdHVyZSopOwogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2VsbChKU0NlbGwq
KTsKLVNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmFsdWUpOworU3BlY3Vs
YXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVmFsdWUoSlNWYWx1ZSwgU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CiAKIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uRnJvbVR5cGVkQXJyYXlUeXBlKFR5cGVkQXJyYXlUeXBlKTsgLy8gb25s
eSB2YWxpZCBmb3IgdHlwZWQgdmlld3MuCiBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZy
b21TcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDA4YzcyOTczNjUyOWIxMzdi
ZGMzYjRhOTA0M2E5OWNkN2M2MTA1ZjYuLmM3ZDJkYTU1MWUzNzk4MGIyYjBhNzMxMjM0ZDRkOGFj
ZWQ1NWRmMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCkBAIC0zMTgsMTEgKzMxOCwxMiBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRp
ZmllcnM7IH0KIAogICAgIHNpemVfdCBudW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCBhZGRD
b25zdGFudChKU1ZhbHVlIHYpCisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcikKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CiAgICAgICAgIG1fY29uc3RhbnRS
ZWdpc3RlcnMubGFzdCgpLnNldCgqbV92bSwgdGhpcywgdik7CisgICAgICAgIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24p
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICB1bnNpZ25lZCBhZGRPckZpbmRD
b25zdGFudChKU1ZhbHVlKTsKQEAgLTMzMCw2ICszMzEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4XTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVy
biBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCiAgICAgLy8gSnVtcHMK
ICAgICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRh
cmdldHMuc2l6ZSgpOyB9CkBAIC0zNDcsNiArMzQ5LDcgQEAgcHVibGljOgogICAgICAgICBtX2p1
bXBUYXJnZXRzLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1faWRlbnRpZmllcnMuc2hyaW5rVG9G
aXQoKTsKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5zaHJpbmtUb0ZpdCgpOwogICAg
ICAgICBtX2Z1bmN0aW9uRGVjbHMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9mdW5jdGlvbkV4
cHJzLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMu
c2hyaW5rVG9GaXQoKTsKQEAgLTU0NCw2ICs1NDcsNyBAQCBwcml2YXRlOgogICAgIC8vIENvbnN0
YW50IFBvb2xzCiAgICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CiAgICAgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKKyAgICBWZWN0
b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7CiAgICAgRnVuY3Rpb25FeHBy
ZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0
b3IgbV9mdW5jdGlvbkV4cHJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCAyMTQwMmViZWVkMTUxYTVh
ZmQwMjU1ZjQzZTI4M2MwYmU4MGFmZmYzLi5jMGIwYmJjOTM2ZmNiMDE3ZmMxNzYwOTFmNzM4YmFi
MmFjY2JlZDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtOTgyLDE3ICs5ODIsMTkgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50RW1wdHlWYWx1ZSgpCiAgICAgcmV0
dXJuIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShKU1ZhbHVlIHYpCitSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiB7CiAgICAgaWYgKCF2KQogICAgICAgICBy
ZXR1cm4gYWRkQ29uc3RhbnRFbXB0eVZhbHVlKCk7CiAKICAgICBpbnQgaW5kZXggPSBtX25leHRD
b25zdGFudE9mZnNldDsKLSAgICBKU1ZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9qc1Zh
bHVlTWFwLmFkZChKU1ZhbHVlOjplbmNvZGUodiksIG1fbmV4dENvbnN0YW50T2Zmc2V0KTsKKwor
ICAgIEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uIHZhbHVlTWFwS2V5IHsgSlNWYWx1
ZTo6ZW5jb2RlKHYpLCBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gfTsKKyAgICBKU1ZhbHVlTWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9qc1ZhbHVlTWFwLmFkZCh2YWx1ZU1hcEtleSwgbV9uZXh0
Q29uc3RhbnRPZmZzZXQpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBt
X2NvbnN0YW50UG9vbFJlZ2lzdGVycy5hcHBlbmQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgg
KyBtX25leHRDb25zdGFudE9mZnNldCk7CiAgICAgICAgICsrbV9uZXh0Q29uc3RhbnRPZmZzZXQ7
Ci0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRDb25zdGFudCh2KTsKKyAgICAgICAgbV9jb2RlQmxv
Y2stPmFkZENvbnN0YW50KHYsIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CiAgICAgfSBlbHNl
CiAgICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICByZXR1cm4gJm1f
Y29uc3RhbnRQb29sUmVnaXN0ZXJzW2luZGV4XTsKQEAgLTExNjUsOSArMTE2Nyw5IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1ZShzdHJp
bmdJbk1hcCkpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQo
UmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlIHYpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiB7Ci0gICAgUmVnaXN0ZXJJRCogY29u
c3RhbnRJRCA9IGFkZENvbnN0YW50VmFsdWUodik7CisgICAgUmVnaXN0ZXJJRCogY29uc3RhbnRJ
RCA9IGFkZENvbnN0YW50VmFsdWUodiwgc291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKICAgICBp
ZiAoZHN0KQogICAgICAgICByZXR1cm4gZW1pdE1vdmUoZHN0LCBjb25zdGFudElEKTsKICAgICBy
ZXR1cm4gY29uc3RhbnRJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCBlNGMzMTExNWZkYmM5MzQ2MGU4M2I0
NTY4ZDE2NzY2Zjg5ZjU5ZjFjLi4yNTQ2YmJmOGNkYjUzMTYwYzdiYmY4ZWY1MmY1YjUwYjc3Mjkz
NWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCkBAIC00NDMsNyArNDQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlm
aWVyJik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNW
YWx1ZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNW
YWx1ZSwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpPdGhlcik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkR2xvYmFsT2JqZWN0KFJlZ2lz
dGVySUQqIGRzdCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5T3AoT3Bjb2RlSUQs
IFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKQEAgLTY1NCw3ICs2NTQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGhhc0NvbnN0YW50KGNvbnN0IElkZW50aWZp
ZXImKSBjb25zdDsKICAgICAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoY29uc3QgSWRlbnRpZmll
ciYpOwotICAgICAgICBSZWdpc3RlcklEKiBhZGRDb25zdGFudFZhbHVlKEpTVmFsdWUpOworICAg
ICAgICBSZWdpc3RlcklEKiBhZGRDb25zdGFudFZhbHVlKEpTVmFsdWUsIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiA9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwogICAgICAgICBS
ZWdpc3RlcklEKiBhZGRDb25zdGFudEVtcHR5VmFsdWUoKTsKICAgICAgICAgdW5zaWduZWQgYWRk
UmVnRXhwKFJlZ0V4cCopOwogCkBAIC04MDAsNiArODAwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIAogICAgICAgICAvLyBDb25zdGFudCBwb29sCiAgICAgICAgIElkZW50aWZpZXJNYXAg
bV9pZGVudGlmaWVyTWFwOworCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxFbmNvZGVkSlNWYWx1
ZVdpdGhSZXByZXNlbnRhdGlvbiwgdW5zaWduZWQsIEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2Vu
dGF0aW9uSGFzaCwgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb25IYXNoVHJhaXRzPiBK
U1ZhbHVlTWFwOwogICAgICAgICBKU1ZhbHVlTWFwIG1fanNWYWx1ZU1hcDsKICAgICAgICAgSWRl
bnRpZmllclN0cmluZ01hcCBtX3N0cmluZ01hcDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDAwYWNjZjlmMDRiY2M3
MjBkNWIwYmY5NGZmNjJkNWUwNzIxZTk4NjQuLmI0MmVjYjc1ZDkyNDI0NWI1ZWY3YzNiMDlmMDk4
MTQzZmQxZTRlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTEyMiw2ICsxMjIsMTUgQEAgSlNWYWx1ZSBTdHJpbmdO
b2RlOjpqc1ZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpIGNvbnN0CiAgICAgcmV0
dXJuIGdlbmVyYXRvci5hZGRTdHJpbmdDb25zdGFudChtX3ZhbHVlKTsKIH0KIAorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBOdW1iZXJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGlmIChk
c3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVmFsdWUoZ2VuZXJhdG9yKSwg
aXNJbnRlZ2VyTm9kZSgpID8gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyIDogU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGUpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUmVnRXhwTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCAyYzg1YTg2MTBjZDQ0MzM2MGI4
YTM5YjM3MjRkOTZkMjMzMmYxNTBlLi42MWExMzdmYmJlMWY0YjA0MTljMTM1MGVkOTk1M2I1Mjhl
ZDRmZGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcApAQCAtMjUyLDE0ICsyNTIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVuc2ln
bmVkIGNvbnN0YW50SW5kZXggPSBvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpOwogICAgICAgICAg
ICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRzLnNpemUoKTsKICAgICAgICAgICAgIGlm
IChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhd
KSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICptX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jazsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0
YW50KG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gID0gY29kZUJsb2NrLmNvbnN0YW50U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9j
b25zdGFudHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY29uc3RhbnRzW2ldID0gbnVsbHB0cjsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0gPQot
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBo
LmZyZWV6ZVN0cm9uZyh2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RhbnRU
b0dyYXBoKE9wSW5mbyhtX2dyYXBoLmZyZWV6ZVN0cm9uZyh2YWx1ZSkpLCBzb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKG1fY29uc3Rh
bnRzW2NvbnN0YW50SW5kZXhdKTsKICAgICAgICAgICAgIHJldHVybiBtX2NvbnN0YW50c1tjb25z
dGFudEluZGV4XTsKQEAgLTY2NSw2ICs2NjcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
KyAgICBOb2RlKiBhZGRDb25zdGFudFRvR3JhcGgoT3BJbmZvIGluZm8sIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCisgICAgeworICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIE5vZGVPcmlnaW4oY3VycmVudENv
ZGVPcmlnaW4oKSksIGluZm8sIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CiAgICAgCiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5vZGVUeXBl
IG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGU3OTAxZDhiNTNiNDM5Y2Q5YTU5YmZmMzk3MTI0NmFh
MTc4N2NiNjAuLmE1ZTllNWU1YjFjNDFhOGI1MGQ0ZTM4MDU3OTBlNzIyMTcwMGZkMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0xMDUzLDYgKzEwNTMsNyBAQCBK
U0FycmF5QnVmZmVyVmlldyogR3JhcGg6OnRyeUdldEZvbGRhYmxlVmlld0ZvckNoaWxkMShOb2Rl
KiBub2RlKQogdm9pZCBHcmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogewogICAgIG1fY29k
ZUJsb2NrLT5jb25zdGFudHMoKS5yZXNpemUoMCk7CisgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpLnJlc2l6ZSgwKTsKICAgICBmb3IgKEZyb3plblZh
bHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+c3RydWN0
dXJlKCkpCiAgICAgICAgICAgICBBU1NFUlQobV9wbGFuLndlYWtSZWZlcmVuY2VzLmNvbnRhaW5z
KHZhbHVlLT5zdHJ1Y3R1cmUoKSkpOwpAQCAtMTA3OCw2ICsxMDc5LDcgQEAgdm9pZCBHcmFwaDo6
cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgICAgICB9IH0KICAgICB9CiAgICAgbV9jb2RlQmxv
Y2stPmNvbnN0YW50cygpLnNocmlua1RvRml0KCk7CisgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpLnNocmlua1RvRml0KCk7CiB9CiAKIHZvaWQgR3Jh
cGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKaW5kZXggMDFkMWFhNmYzM2U2OTU1ZTk5MzhiZTc1MDUyNGU1NDRiOTEz
YzM3ZC4uY2JiNzBiYWM5N2FkMmQ5NWRjN2NhYzU4NzQwMjkwNzY1NDQ5YzYxNSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtMjE3LDkgKzIxNyw5IEBAIHB1YmxpYzoKICAg
ICAgICAgTm9kZSogcmlnaHQgPSBhZGQtPmNoaWxkMigpLm5vZGUoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChsZWZ0LT5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZEltbWVk
aWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKGFkZCwgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnQzMiwg
bGVmdCwgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVj
dWxhdGVJbnQzMihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIsIHJpZ2h0LCBsZWZ0LCBz
b3VyY2UpOwogICAgICAgICBpZiAocmlnaHQtPmhhc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIoYWRkLCBsZWZ0U2hvdWxkU3Bl
Y3VsYXRlSW50MzIsIHJpZ2h0LCBzb3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIGFkZEltbWVk
aWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKGFkZCwgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMyLCBs
ZWZ0LCByaWdodCwgc291cmNlKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiAobGVmdFNob3Vs
ZFNwZWN1bGF0ZUludDMyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIgJiYgYWRkLT5jYW5T
cGVjdWxhdGVJbnQzMihzb3VyY2UpKSA/IFNwZWN1bGF0ZUludDMyIDogRG9udFNwZWN1bGF0ZUlu
dDMyOwogICAgIH0KQEAgLTg1MSwxMyArODUxLDE3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNp
Y0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vzc29yKTsKICAgICAKLSAgICBBZGRTcGVjdWxhdGlv
bk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIoTm9kZSogYWRkLCBib29sIHZh
cmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50MzIsIE5vZGUqIGltbWVkaWF0ZSwgUmFyZUNhc2VQcm9m
aWxpbmdTb3VyY2Ugc291cmNlKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVT
aG91bGRTcGVjdWxhdGVJbnQzMihOb2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxh
dGVJbnQzMiwgTm9kZSogb3BlcmFuZCwgTm9kZSogaW1tZWRpYXRlLCBSYXJlQ2FzZVByb2ZpbGlu
Z1NvdXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLT5oYXNDb25z
dGFudCgpKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1l
ZGlhdGUtPmFzSlNWYWx1ZSgpOwogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVy
KCkgJiYgIWltbWVkaWF0ZVZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICAgICAgcmV0dXJuIERv
bnRTcGVjdWxhdGVJbnQzMjsKKworICAgICAgICBOb2RlRmxhZ3Mgb3BlcmFuZFJlc3VsdFR5cGUg
PSBvcGVyYW5kLT5yZXN1bHQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmRSZXN1bHRUeXBlICE9IE5v
ZGVSZXN1bHRJbnQzMiAmJiBvcGVyYW5kUmVzdWx0VHlwZSAhPSBOb2RlUmVzdWx0SW50NTIgJiYg
aW1tZWRpYXRlLT5zb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSA9PSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkRvdWJsZSkKKyAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50MzI7
CiAgICAgICAgIAogICAgICAgICBpZiAoIXZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50MzIpCiAg
ICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludDMyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAppbmRleCBkYWZhYjJjYjNjNjVjNmY0NGZmYWE1ZjFlMjA5MGY3ZWVlZDQ1NGFh
Li4xOThmMzU3NTJjODk3MWYyNDlmZDkyYzIyNDYxMTVkMjczNjdlOTQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjY2LDYgKzI2NiwyMyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgIH0KIAorICAg
IE5vZGUoTm9kZU9yaWdpbiBub2RlT3JpZ2luLCBPcEluZm8gaW1tLCBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQorICAgICAgICA6IG9yaWdpbihub2Rl
T3JpZ2luKQorICAgICAgICAsIGNoaWxkcmVuKCkKKyAgICAgICAgLCBtX2NvbnN0YW50U291cmNl
UmVwcmVzZW50YXRpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbikpCisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCisg
ICAgICAgICwgbV9yZWZDb3VudCgxKQorICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
KyAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKKyAgICAgICAgLCBtX29wSW5mbzIoMCkK
KyAgICAgICAgLCByZXBsYWNlbWVudChudWxscHRyKQorICAgICAgICAsIG93bmVyKG51bGxwdHIp
CisgICAgeworICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhKU0NvbnN0YW50KTsKKyAgICAg
ICAgbV9jb25zdGFudFNvdXJjZVJlcHJlc2VudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBO
b2RlSGFzVmFyQXJncykpOworICAgIH0KKwogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1
cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlRmxhZ3Mg
cmVzdWx0LCBOb2RlVHlwZSBvcCwgTm9kZU9yaWdpbiBub2RlT3JpZ2luLCBFZGdlIGNoaWxkMSA9
IEVkZ2UoKSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAg
ICAgICA6IG9yaWdpbihub2RlT3JpZ2luKQpAQCAtNDAzLDYgKzQyMCw3IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICB7CiAgICAgICAgIG1fb3AgPSBvcDsKICAgICAgICAgbV9mbGFncyA9IGRlZmF1bHRG
bGFncyhvcCk7CisgICAgICAgIG1fY29uc3RhbnRTb3VyY2VSZXByZXNlbnRhdGlvbiA9IDA7CiAg
ICAgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tKCkKQEAgLTYyNyw3ICs2NDUsMjEgQEAg
c3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnN0YW50KCktPnZhbHVlKCk7
CiAgICAgfQotICAgICAKKworICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2NvbnN0YW50
U291cmNlUmVwcmVzZW50YXRpb24pIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgcmV0
dXJuIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI7CisgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgIHJldHVybiBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI7CisgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkRvdWJsZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI7CisgICAgfQorCiAgICAg
Ym9vbCBpc0ludDMyQ29uc3RhbnQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQo
KSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzSW50MzIoKTsKQEAgLTE4OTgsNiArMTkzMCw3IEBA
IHN0cnVjdCBOb2RlIHsKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9vcCA6IDEwOyAvLyByZWFs
IHR5cGUgaXMgTm9kZVR5cGUKICAgICB1bnNpZ25lZCBtX2ZsYWdzIDogMjI7CisgICAgdW5zaWdu
ZWQgbV9jb25zdGFudFNvdXJjZVJlcHJlc2VudGF0aW9uOiAyOwogICAgIC8vIFRoZSB2aXJ0dWFs
IHJlZ2lzdGVyIG51bWJlciAoc3BpbGwgbG9jYXRpb24pIGFzc29jaWF0ZWQgd2l0aCB0aGlzIC4K
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgLy8gVGhlIG51bWJl
ciBvZiB1c2VzIG9mIHRoZSByZXN1bHQgb2YgdGhpcyBvcGVyYXRpb24gKCsxIGZvciAnbXVzdCBn
ZW5lcmF0ZScgbm9kZXMsIHdoaWNoIGhhdmUgc2lkZS1lZmZlY3RzKS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKaW5kZXggZjVjOWVjNDM2OWNiYTU3NmUxZmVjNGZjODUyYTc2OWE0MzhhNGUyMi4uM2Rk
MjE3NTllZjk4YjFkY2IzMDYyYjJiMmQ3M2JjNmZiMzExZTgxNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc3dp
dGNoIChvcCkgewogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6IHsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHR5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShub2RlLT5hc0pTVmFsdWUoKSk7
CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUo
bm9kZS0+YXNKU1ZhbHVlKCksIG5vZGUtPnNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpKTsKICAg
ICAgICAgICAgIGlmICh0eXBlID09IFNwZWNJbnQ1MkFzRG91YmxlICYmIGVuYWJsZUludDUyKCkp
CiAgICAgICAgICAgICAgICAgdHlwZSA9IFNwZWNJbnQ1MjsKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gc2V0UHJlZGljdGlvbih0eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RC
dWlsZGVyLmgKaW5kZXggODg0MThmMTZhMjAwMjZiMmE2YzAxZjNlMjY4MWQ2MGNkNWNmNzk5Ni4u
ZmE2NDk1MWE5ZGYyYjZiNjQ1MDVmYTFlYTM3YTEwMDRiOWE4ZDk5NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTE5MiwxMCArMTkyLDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBBcnJheU5vZGUobG9jYXRpb24sIGVsaXNpb25zLCBlbGVtcyk7CiAgICAgfQot
ICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdW1iZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIGRvdWJsZSBkKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVEb3VibGVF
eHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSBkKQogICAgIHsKICAg
ICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IE51bWJlck5vZGUobG9jYXRpb24sIGQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hKSBEb3VibGVOb2RlKGxvY2F0aW9uLCBkKTsKKyAgICB9CisgICAgRXhwcmVzc2lvbk5vZGUq
IGNyZWF0ZUludGVnZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJs
ZSBkKQorICAgIHsKKyAgICAgICAgaW5jQ29uc3RhbnRzKCk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIEludGVnZXJOb2RlKGxvY2F0aW9uLCBkKTsKICAgICB9CiAKICAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlU3RyaW5nKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXIqIHN0cmluZykKQEAgLTc0OCwxMSArNzUzLDI3IEBAIHByaXZh
dGU6CiAgICAgICAgIG1fZXZhbENvdW50Kys7CiAgICAgICAgIG1fc2NvcGUubV9mZWF0dXJlcyB8
PSBFdmFsRmVhdHVyZTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51bWJlcihj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKKyAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgZG91YmxlIGQpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBOdW1iZXJOb2RlKGxvY2F0aW9uLCBkKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgSW50ZWdlck5vZGUobG9jYXRpb24sIGQpOwogICAgIH0KLSAgICAKKyAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlRG91YmxlTGlrZU51bWJlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBkb3VibGUgZCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEpIERvdWJsZU5vZGUobG9jYXRpb24sIGQpOworICAgIH0KKyAgICBFeHByZXNzaW9uTm9kZSog
Y3JlYXRlTnVtYmVyRnJvbUJpbmFyeU9wZXJhdGlvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBkb3VibGUgdmFsdWUsIGNvbnN0IE51bWJlck5vZGUmIG9yaWdpbmFsTm9kZUEsIGNv
bnN0IE51bWJlck5vZGUmIG9yaWdpbmFsTm9kZUIpCisgICAgeworICAgICAgICBpZiAob3JpZ2lu
YWxOb2RlQS5pc0ludGVnZXJOb2RlKCkgJiYgb3JpZ2luYWxOb2RlQi5pc0ludGVnZXJOb2RlKCkp
CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZURvdWJsZUxpa2VOdW1iZXIobG9jYXRpb24sIHZh
bHVlKTsKKyAgICB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51bWJlckZyb21VbmFyeU9w
ZXJhdGlvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgdmFsdWUsIGNv
bnN0IE51bWJlck5vZGUmIG9yaWdpbmFsTm9kZSkKKyAgICB7CisgICAgICAgIGlmIChvcmlnaW5h
bE5vZGUuaXNJbnRlZ2VyTm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJM
aWtlTnVtYmVyKGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVEb3VibGVM
aWtlTnVtYmVyKGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgfQorCiAgICAgVk0qIG1fdm07CiAgICAg
UGFyc2VyQXJlbmEmIG1fcGFyc2VyQXJlbmE7CiAgICAgU291cmNlQ29kZSogbV9zb3VyY2VDb2Rl
OwpAQCAtNzkzLDkgKzgxNCw4IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGVs
ZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiBFeHByZXNzaW9u
Tm9kZSogQVNUQnVpbGRlcjo6bWFrZU5lZ2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIG4pCiB7CiAgICAgaWYgKG4tPmlzTnVtYmVyKCkpIHsK
LSAgICAgICAgTnVtYmVyTm9kZSogbnVtYmVyTm9kZSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUq
PihuKTsKLSAgICAgICAgbnVtYmVyTm9kZS0+c2V0VmFsdWUoLW51bWJlck5vZGUtPnZhbHVlKCkp
OwotICAgICAgICByZXR1cm4gbnVtYmVyTm9kZTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYg
bnVtYmVyTm9kZSA9IHN0YXRpY19jYXN0PGNvbnN0IE51bWJlck5vZGUmPigqbik7CisgICAgICAg
IHJldHVybiBjcmVhdGVOdW1iZXJGcm9tVW5hcnlPcGVyYXRpb24obG9jYXRpb24sIC1udW1iZXJO
b2RlLnZhbHVlKCksIG51bWJlck5vZGUpOwogICAgIH0KIAogICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIE5lZ2F0ZU5vZGUobG9jYXRpb24sIG4pOwpAQCAtODA0LDcgKzgyNCw3IEBAIEV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTmVnYXRlTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJp
dHdpc2VOb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBleHByKQogewogICAgIGlmIChleHByLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4g
Y3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB+dG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4o
ZXhwciktPnZhbHVlKCkpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVy
KGxvY2F0aW9uLCB+dG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwciktPnZhbHVl
KCkpKTsKICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXR3aXNlTm90Tm9kZShsb2Nh
dGlvbiwgZXhwcik7CiB9CiAKQEAgLTgxMyw4ICs4MzMsMTEgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VNdWx0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXMKICAgICBleHByMSA9IGV4cHIxLT5zdHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIyID0g
ZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7CiAKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYg
ZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24s
IHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgKiBzdGF0aWNfY2FzdDxO
dW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkg
JiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVy
RXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3Qg
TnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIy
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlckZyb21CaW5hcnlPcGVyYXRpb24obG9jYXRp
b24sIG51bWJlckV4cHIxLnZhbHVlKCkgKiBudW1iZXJFeHByMi52YWx1ZSgpLCBudW1iZXJFeHBy
MSwgbnVtYmVyRXhwcjIpOworICAgIH0KIAogICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpID09IDEpCiAgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFVuYXJ5UGx1c05vZGUobG9jYXRpb24sIGV4cHIyKTsK
QEAgLTgzMCw4ICs4NTMsMTQgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEaXZO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3MKICAgICBleHByMSA9
IGV4cHIxLT5zdHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQ
bHVzKCk7CiAKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkp
Ci0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJl
ck5vZGUqPihleHByMSktPnZhbHVlKCkgLyBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIp
LT52YWx1ZSgpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVy
KCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2Fz
dDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVy
RXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgZG91Ymxl
IHJlc3VsdCA9IG51bWJlckV4cHIxLnZhbHVlKCkgLyBudW1iZXJFeHByMi52YWx1ZSgpOworICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVzdWx0KSA9PSByZXN1bHQpCisgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlTnVtYmVyRnJvbUJpbmFyeU9wZXJhdGlvbihsb2NhdGlvbiwgcmVz
dWx0LCBudW1iZXJFeHByMSwgbnVtYmVyRXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlRG91
YmxlTGlrZU51bWJlcihsb2NhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgRGl2Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKIH0KIApAQCAtODM5LDE2ICs4NjgsMjMgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VNb2ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4
cHJlc3MKIHsKICAgICBleHByMSA9IGV4cHIxLT5zdHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIy
ID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7Ci0gICAgCi0gICAgaWYgKGV4cHIxLT5pc051bWJl
cigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxv
Y2F0aW9uLCBmbW9kKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCksIHN0
YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKKworICAgIGlmIChleHBy
MS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1i
ZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOwor
ICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJl
ck5vZGUmPigqZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIo
bG9jYXRpb24sIGZtb2QobnVtYmVyRXhwcjEudmFsdWUoKSwgbnVtYmVyRXhwcjIudmFsdWUoKSkp
OworICAgIH0KICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBNb2ROb2RlKGxvY2F0aW9u
LCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZUFkZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cykKIHsKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjIt
PmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHN0YXRp
Y19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKKworICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBl
eHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHBy
MSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBjb25zdCBOdW1i
ZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIpOwor
ICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyRnJvbUJpbmFyeU9wZXJhdGlvbihsb2NhdGlvbiwg
bnVtYmVyRXhwcjEudmFsdWUoKSArIG51bWJlckV4cHIyLnZhbHVlKCksIG51bWJlckV4cHIxLCBu
dW1iZXJFeHByMik7CisgICAgfQogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFkZE5v
ZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKQEAg
LTg1Nyw1MCArODkzLDcxIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlU3ViTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzCiAgICAgZXhwcjEgPSBl
eHByMS0+c3RyaXBVbmFyeVBsdXMoKTsKICAgICBleHByMiA9IGV4cHIyLT5zdHJpcFVuYXJ5UGx1
cygpOwogCi0gICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQot
ICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlKj4oZXhwcjEpLT52YWx1ZSgpIC0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+
dmFsdWUoKSk7CisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigp
KSB7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8
TnVtYmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4
cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAgIHJldHVybiBj
cmVhdGVOdW1iZXJGcm9tQmluYXJ5T3BlcmF0aW9uKGxvY2F0aW9uLCBudW1iZXJFeHByMS52YWx1
ZSgpIC0gbnVtYmVyRXhwcjIudmFsdWUoKSwgbnVtYmVyRXhwcjEsIG51bWJlckV4cHIyKTsKKyAg
ICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgU3ViTm9kZShsb2NhdGlvbiwgZXhw
cjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VMZWZ0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMpCiB7Ci0gICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIy
LT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB0b0lu
dDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpIDw8ICh0b1VJbnQz
MihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKKyAg
ICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAg
Y29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4o
KmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNf
Y2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJM
aWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51bWJlckV4cHIxLnZhbHVlKCkpIDw8ICh0b1VJ
bnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICB9CiAgICAgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYSkgTGVmdFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VSaWdodFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzKQogewotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIo
KSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihzdGF0aWNf
Y2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSA+PiAodG9VSW50MzIoc3RhdGljX2Nh
c3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkgJiAweDFmKSk7CisgICAgaWYgKGV4cHIx
LT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKSB7CisgICAgICAgIGNvbnN0IE51bWJl
ck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMSk7Cisg
ICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVy
Tm9kZSY+KCpleHByMik7CisgICAgICAgIHJldHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihs
b2NhdGlvbiwgdG9JbnQzMihudW1iZXJFeHByMS52YWx1ZSgpKSA+PiAodG9VSW50MzIobnVtYmVy
RXhwcjIudmFsdWUoKSkgJiAweDFmKSk7CisgICAgfQogICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFJpZ2h0U2hpZnROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNz
aWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVVSaWdodFNo
aWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQog
ewotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgPj4gKHRvVUludDMyKHN0YXRpY19jYXN0PE51bWJl
ck5vZGUqPihleHByMiktPnZhbHVlKCkpICYgMHgxZikpOworICAgIGlmIChleHByMS0+aXNOdW1i
ZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBu
dW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBj
b25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigq
ZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24s
IHRvVUludDMyKG51bWJlckV4cHIxLnZhbHVlKCkpID4+ICh0b1VJbnQzMihudW1iZXJFeHByMi52
YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkg
VW5zaWduZWRSaWdodFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXRPck5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIx
LCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKLSAg
ICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJl
dHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSo+KGV4cHIxKS0+dmFsdWUoKSkgfCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihl
eHByMiktPnZhbHVlKCkpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlz
TnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0
aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYg
bnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51bWJlckV4
cHIxLnZhbHVlKCkpIHwgdG9JbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSk7CisgICAgfQogICAg
IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4
cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VCaXRBbmROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMpCiB7Ci0gICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJl
cigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKHN0YXRp
Y19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpICYgdG9JbnQzMihzdGF0aWNfY2Fz
dDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSk7CisgICAgaWYgKGV4cHIxLT5pc051bWJl
cigpICYmIGV4cHIyLT5pc051bWJlcigpKSB7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51
bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNv
bnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpl
eHByMik7CisgICAgICAgIHJldHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihsb2NhdGlvbiwg
dG9JbnQzMihudW1iZXJFeHByMS52YWx1ZSgpKSAmIHRvSW50MzIobnVtYmVyRXhwcjIudmFsdWUo
KSkpOworICAgIH0KICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXRBbmROb2RlKGxv
Y2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNz
aW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkg
JiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRp
b24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgXiB0
b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKKyAgICBp
ZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29u
c3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4
cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2Fz
dDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJMaWtl
TnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51bWJlckV4cHIxLnZhbHVlKCkpIF4gdG9JbnQzMihu
dW1iZXJFeHByMi52YWx1ZSgpKSk7CisgICAgfQogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEpIEJpdFhPck5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50
cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKaW5kZXggZjEzZmU0
ZGVhYzBlZGUwNDM3YzQ5MTdiYTQ4ZjRmMGI5NjUwOWMwZS4uMWVjNjdkZjFiOGU4YzBkNzMxOTQ5
YjEyNzJhOWJjNzVmZmY4MDE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9MZXhlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5j
cHAKQEAgLTQ5NSw2ICs0OTUsMTMgQEAgTGV4ZXI8VD46OkxleGVyKFZNKiB2bSwgSlNQYXJzZXJT
dHJpY3RuZXNzIHN0cmljdG5lc3MpCiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNUb2tlblR5cGUg
dG9rZW5UeXBlRm9ySW50ZWdlckxpa2VUb2tlbihkb3VibGUgZG91YmxlVmFsdWUpCit7CisgICAg
aWYgKChkb3VibGVWYWx1ZSB8fCAhc3RkOjpzaWduYml0KGRvdWJsZVZhbHVlKSkgJiYgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oZG91YmxlVmFsdWUpID09IGRvdWJsZVZhbHVlKQorICAgICAgICByZXR1
cm4gSU5URUdFUjsKKyAgICByZXR1cm4gRE9VQkxFOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KIExleGVyPFQ+Ojp+TGV4ZXIoKQogewpAQCAtMTY4Nyw3ICsxNjk0LDcgQEAgc3RhcnQ6CiAg
ICAgICAgICAgICAgICAgdG9rZW4gPSBJTlZBTElEX0hFWF9OVU1CRVJfRVJST1JUT0s7CiAgICAg
ICAgICAgICAgICAgZ290byByZXR1cm5FcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRva2VuID0gTlVNQkVSOworICAgICAgICAgICAgdG9rZW4gPSB0b2tlblR5cGVGb3JJbnRlZ2Vy
TGlrZVRva2VuKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpOwogICAgICAgICAgICAgbV9idWZmZXI4
LnJlc2l6ZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNzAwLDE3ICsx
NzA3LDE5IEBAIHN0YXJ0OgogICAgICAgICB9CiAgICAgICAgIGlmIChpc0FTQ0lJT2N0YWxEaWdp
dChtX2N1cnJlbnQpKSB7CiAgICAgICAgICAgICBpZiAocGFyc2VPY3RhbCh0b2tlbkRhdGEtPmRv
dWJsZVZhbHVlKSkgewotICAgICAgICAgICAgICAgIHRva2VuID0gTlVNQkVSOworICAgICAgICAg
ICAgICAgIHRva2VuID0gdG9rZW5UeXBlRm9ySW50ZWdlckxpa2VUb2tlbih0b2tlbkRhdGEtPmRv
dWJsZVZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBGQUxMVEhST1VH
SDsKICAgICBjYXNlIENoYXJhY3Rlck51bWJlcjoKLSAgICAgICAgaWYgKExJS0VMWSh0b2tlbiAh
PSBOVU1CRVIpKSB7CisgICAgICAgIGlmIChMSUtFTFkodG9rZW4gIT0gSU5URUdFUiAmJiB0b2tl
biAhPSBET1VCTEUpKSB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlRGVjaW1hbCh0b2tlbkRhdGEt
PmRvdWJsZVZhbHVlKSkgeworICAgICAgICAgICAgICAgIHRva2VuID0gSU5URUdFUjsKICAgICAg
ICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJykgewogICAgICAgICAgICAgICAgICAgICBz
aGlmdCgpOwogaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAgICAgICAgICAgICAgICAg
cGFyc2VOdW1iZXJBZnRlckRlY2ltYWxQb2ludCgpOworICAgICAgICAgICAgICAgICAgICB0b2tl
biA9IERPVUJMRTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKChtX2N1
cnJlbnQgfCAweDIwKSA9PSAnZScpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZU51
bWJlckFmdGVyRXhwb25lbnRJbmRpY2F0b3IoKSkgewpAQCAtMTcyMSw4ICsxNzMwLDEwIEBAIGlu
TnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CiAgICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5kb3Vi
bGVWYWx1ZSA9IHBhcnNlRG91YmxlKG1fYnVmZmVyOC5kYXRhKCksIG1fYnVmZmVyOC5zaXplKCks
IHBhcnNlZExlbmd0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b2tlbiA9IE5VTUJF
UjsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gSU5URUdFUikKKyAgICAgICAgICAgICAg
ICAgICAgdG9rZW4gPSB0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2VuKHRva2VuRGF0YS0+ZG91
YmxlVmFsdWUpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdG9rZW4gPSB0
b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2VuKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gTm8gaWRlbnRpZmllcnMgYWxsb3dlZCBkaXJlY3RseSBhZnRl
ciBudW1lcmljIGxpdGVyYWwsIGUuZy4gIjNpbiIgaXMgYmFkLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAppbmRleCA5NTA0MDlhYjgxZmVjOTg5
OWU2MWRhNWM3ODY4ZWQ1ODM0NzNlOWVjLi4xMmUzZDRkNmI4OTUyYTAwMWI0NmEzMThiMDA3NDgz
Yjc1NzZlNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVD
b25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25z
dHJ1Y3RvcnMuaApAQCAtODQsNiArODQsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAg
IH0KIAorICAgIGlubGluZSBEb3VibGVOb2RlOjpEb3VibGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBOdW1iZXJOb2RlKGxvY2F0
aW9uLCB2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgaW5saW5lIEludGVnZXJOb2RlOjpJbnRl
Z2VyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgdmFsdWUpCisg
ICAgICAgIDogRG91YmxlTm9kZShsb2NhdGlvbiwgdmFsdWUpCisgICAgeworICAgIH0KKwogICAg
IGlubGluZSBTdHJpbmdOb2RlOjpTdHJpbmdOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIGNvbnN0IElkZW50aWZpZXImIHZhbHVlKQogICAgICAgICA6IENvbnN0YW50Tm9kZShs
b2NhdGlvbiwgUmVzdWx0VHlwZTo6c3RyaW5nVHlwZSgpKQogICAgICAgICAsIG1fdmFsdWUodmFs
dWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggMjdiYzNmODQzNTRjNDQw
Y2JhOThmZjBlZDAwMTc3ODU4NmQ5ZjViNi4uMzBlZGIwYWUwYzJkYTUzZjNiNDBmODk0NjAzMzhm
MTllOTA5OTI5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMjM2LDE2
ICsyMzYsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTnVtYmVyTm9kZSA6IHB1Ymxp
YyBDb25zdGFudE5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgTnVtYmVyTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBkb3VibGUgdmFsdWUpOwotICAgICAgICBkb3VibGUgdmFsdWUoKSB7
IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0VmFsdWUoZG91YmxlIHZhbHVlKSB7
IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgICAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJOb2RlKCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGUgZmluYWw7CiAKICAgICBwcml2YXRl
OgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNOdW1iZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc051bWJlcigpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgdmlydHVhbCBKU1ZhbHVlIGpzVmFsdWUo
Qnl0ZWNvZGVHZW5lcmF0b3ImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBqc051bWJlcihtX3Zh
bHVlKTsgfQogCiAgICAgICAgIGRvdWJsZSBtX3ZhbHVlOwogICAgIH07CiAKKyAgICBjbGFzcyBE
b3VibGVOb2RlIDogcHVibGljIE51bWJlck5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRG91
YmxlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBkb3VibGUgdmFsdWUpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzSW50ZWdlck5vZGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIH07CisKKyAgICAvLyBBbiBpbnRlZ2VyIG5vZGUgcmVw
cmVzZW50IGEgbnVtYmVyIHJlcHJlc2VudGVkIGFzIGFuIGludGVnZXIgKGUuZy4gNDIgaW5zdGVh
ZCBvZiA0Mi4sIDQyLjAsIDQyZTApCisgICAgY2xhc3MgSW50ZWdlck5vZGUgOiBwdWJsaWMgRG91
YmxlTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBJbnRlZ2VyTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBkb3VibGUgdmFsdWUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlZ2Vy
Tm9kZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB9OworCiAg
ICAgY2xhc3MgU3RyaW5nTm9kZSA6IHB1YmxpYyBDb25zdGFudE5vZGUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgU3RyaW5nTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5kZXggZjRjNGJj
NWQ0ZTNmNzJmNjA1MTJiZmM2MDcwMTU2ZDMxNmZhYWJhYy4uNjMxOGZkNjM2YmViM2U3YjkxZDI4
ZjY0OTZhZWQ5YWY3YmQ4NzE4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmNwcApAQCAtNjI5LDcgKzYyOSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZURlY29uc3RydWN0aW9uUGF0dGVybiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VECiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEpTVG9rZW5UeXBlIHRva2VuVHlwZSA9IG1f
dG9rZW4ubV90eXBlOwogICAgICAgICAgICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsK
LSAgICAgICAgICAgICAgICBjYXNlIE5VTUJFUjoKKyAgICAgICAgICAgICAgICBjYXNlIERPVUJM
RToKKyAgICAgICAgICAgICAgICBjYXNlIElOVEVHRVI6CiAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20obV92bSwgbV90b2tlbi5tX2RhdGEuZG91Ymxl
VmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNl
IFNUUklORzoKQEAgLTE5NDUsNyArMTk0Niw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVByb3BlcnR5KFRyZWVCCiAg
ICAgICAgICAgICBmYWlsV2l0aE1lc3NhZ2UoIkV4cGVjdGVkIGEgJzonIGZvbGxvd2luZyB0aGUg
cHJvcGVydHkgbmFtZSAnIiwgaWRlbnQtPmltcGwoKSwgIiciKTsKICAgICAgICAgcmV0dXJuIHBh
cnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGNvbXBsZXRlLCB0eXBlLCBnZXR0ZXJPclNldHRlclN0
YXJ0T2Zmc2V0KTsKICAgICB9Ci0gICAgY2FzZSBOVU1CRVI6IHsKKyAgICBjYXNlIERPVUJMRToK
KyAgICBjYXNlIElOVEVHRVI6IHsKICAgICAgICAgZG91YmxlIHByb3BlcnR5TmFtZSA9IG1fdG9r
ZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGNvbnN1bWVP
ckZhaWwoQ09MT04sICJFeHBlY3RlZCAnOicgYWZ0ZXIgcHJvcGVydHkgbmFtZSIpOwpAQCAtMTk3
OSw3ICsxOTgxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkg
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2V0dGVyU2V0dGVyKFQKICAgICBkb3VibGUgbnVtZXJp
Y1Byb3BlcnR5TmFtZSA9IDA7CiAgICAgaWYgKG1fdG9rZW4ubV90eXBlID09IElERU5UIHx8IG1f
dG9rZW4ubV90eXBlID09IFNUUklORykKICAgICAgICAgc3RyaW5nUHJvcGVydHlOYW1lID0gbV90
b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgZWxzZSBpZiAobV90b2tlbi5tX3R5cGUgPT0gTlVNQkVS
KQorICAgIGVsc2UgaWYgKG1fdG9rZW4ubV90eXBlID09IERPVUJMRSB8fCBtX3Rva2VuLm1fdHlw
ZSA9PSBJTlRFR0VSKQogICAgICAgICBudW1lcmljUHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2Rh
dGEuZG91YmxlVmFsdWU7CiAgICAgZWxzZQogICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9r
ZW4oKTsKQEAgLTIyMjEsMTEgKzIyMjMsMTcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmUKICAg
ICAgICAgbmV4dCgpOwogICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVTdHJpbmcobG9jYXRp
b24sIGlkZW50KTsKICAgICB9Ci0gICAgY2FzZSBOVU1CRVI6IHsKKyAgICBjYXNlIERPVUJMRTog
ewogICAgICAgICBkb3VibGUgZCA9IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwogICAgICAg
ICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAgICAgbmV4
dCgpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVOdW1iZXJFeHByKGxvY2F0aW9uLCBk
KTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRG91YmxlRXhwcihsb2NhdGlvbiwgZCk7
CisgICAgfQorICAgIGNhc2UgSU5URUdFUjogeworICAgICAgICBkb3VibGUgZCA9IG1fdG9rZW4u
bV9kYXRhLmRvdWJsZVZhbHVlOworICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9r
ZW5Mb2NhdGlvbigpKTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVJbnRlZ2VyRXhwcihsb2NhdGlvbiwgZCk7CiAgICAgfQogICAgIGNhc2UgTlVMTFRPS0VO
OiB7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwpA
QCAtMjU3Nyw3ICsyNTg1LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4gdm9pZCBQ
YXJzZXI8TGV4ZXJUeXBlPjo6cHJpbnRVbmV4cGVjdGVkVG9rZW5UZXh0KFcKICAgICBjYXNlIFNU
UklORzoKICAgICAgICAgb3V0LnByaW50KCJVbmV4cGVjdGVkIHN0cmluZyBsaXRlcmFsICIsIGdl
dFRva2VuKCkpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBOVU1CRVI6CisgICAgY2FzZSBJ
TlRFR0VSOgorICAgIGNhc2UgRE9VQkxFOgogICAgICAgICBvdXQucHJpbnQoIlVuZXhwZWN0ZWQg
bnVtYmVyICciLCBnZXRUb2tlbigpLCAiJyIpOwogICAgICAgICByZXR1cm47CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAppbmRleCA2NTIwNTVhNThl
ZDRlYjNkZWM4ZWFkY2RhYmM0MWJjZWFiYWYwOTFlLi4zZmYyNzk4NjZhZjZlMjg2OTBiYzA3YzVm
NzIxYmM3YTM4MDU2ZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlclRva2Vucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
VG9rZW5zLmgKQEAgLTk0LDcgKzk0LDggQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAgICAgQ0xPU0VC
UkFDS0VULAogICAgIENPTU1BLAogICAgIFFVRVNUSU9OLAotICAgIE5VTUJFUiwKKyAgICBJTlRF
R0VSLAorICAgIERPVUJMRSwKICAgICBJREVOVCwKICAgICBTVFJJTkcsCiAgICAgU0VNSUNPTE9O
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2Vy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAppbmRleCA2
M2IxMzQ4ZmUzMDVkYzQ2OWE2MTFmYmNjNDEwNmFiMzg4M2YwZGEyLi41ODg0ZmIyODJlNzU2MWE2
NTg2ZDBmNmUxZGE1OTE1MWI4ZDU0YTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1N5bnRheENoZWNrZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBl
ZGVmIFN5bnRheENoZWNrZXIgRnVuY3Rpb25Cb2R5QnVpbGRlcjsKICAgICBlbnVtIHsgTm9uZUV4
cHIgPSAwLAotICAgICAgICBSZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVFeHByLCBOdW1iZXJFeHBy
LCBTdHJpbmdFeHByLAorICAgICAgICBSZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVFeHByLCBJbnRl
Z2VyRXhwciwgRG91YmxlRXhwciwgU3RyaW5nRXhwciwKICAgICAgICAgVGhpc0V4cHIsIE51bGxF
eHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0ZXJhbEV4cHIsCiAgICAgICAgIEZ1
bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCiAg
ICAgICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIs
CkBAIC0xNTEsNyArMTUxLDggQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9i
amVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVybiBPYmplY3RM
aXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gQXJyYXlMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7
IHJldHVybiBBcnJheUxpdGVyYWxFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTnVt
YmVyRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBkb3VibGUpIHsgcmV0dXJuIE51bWJlckV4
cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVEb3VibGVFeHByKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGRvdWJsZSkgeyByZXR1cm4gRG91YmxlRXhwcjsgfQorICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZUludGVnZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGRvdWJsZSkgeyBy
ZXR1cm4gSW50ZWdlckV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTdHJpbmcoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciopIHsgcmV0dXJuIFN0cmluZ0V4
cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVCb29sZWFuKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGJvb2wpIHsgcmV0dXJuIEJvb2xFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3Jl
YXRlTnVsbChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBOdWxsRXhwcjsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCmluZGV4IGFjYWIzZmE2MjQw
YTExMTJhYTEwZTI5MzFlNmZkYzExNWEwM2JkZjEuLjhhMjYxZTNiYTM5NzFlOTFkM2UwMThmYmZl
YzRmZTFhNjgyY2QxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1Zh
bHVlLmgKQEAgLTEyNCw4ICsxMjQsMTUgQEAgaW5saW5lIHVpbnQzMl90IHRvVUludDMyKGRvdWJs
ZSBudW1iZXIpCiBpbnQ2NF90IHRyeUNvbnZlcnRUb0ludDUyKGRvdWJsZSk7CiBib29sIGlzSW50
NTIoZG91YmxlKTsKIAorZW51bSBjbGFzcyBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24geworICAg
IE90aGVyLAorICAgIEludGVnZXIsCisgICAgRG91YmxlCit9OworCiBjbGFzcyBKU1ZhbHVlIHsK
ICAgICBmcmllbmQgc3RydWN0IEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0czsKKyAgICBmcmllbmQg
c3RydWN0IEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaFRyYWl0czsKICAgICBm
cmllbmQgY2xhc3MgQXNzZW1ibHlIZWxwZXJzOwogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAg
ZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKQEAgLTQ0OCw3ICs0NTUsMjYgQEAgc3RydWN0
IEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8RW5jb2RlZEpTVmFsdWU+IHsK
IH07CiAjZW5kaWYKIAotdHlwZWRlZiBIYXNoTWFwPEVuY29kZWRKU1ZhbHVlLCB1bnNpZ25lZCwg
RW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHM+IEpTVmFsdWVNYXA7
Cit0eXBlZGVmIHN0ZDo6cGFpcjxFbmNvZGVkSlNWYWx1ZSwgU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uPiBFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlvbjsKKworc3RydWN0IEVuY29kZWRK
U1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8RW5jb2RlZEpT
VmFsdWVXaXRoUmVwcmVzZW50YXRpb24+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2Vu
dGF0aW9uIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7IH0KKyAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVz
ZW50YXRpb24mIHNsb3QpIHsgc2xvdCA9IHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkpLCBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246Ok90aGVyKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEVuY29k
ZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBzdGQ6
Om1ha2VfcGFpcihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWUpKSwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7IH0KK307CisKK3N0
cnVjdCBFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKEVuY29kZWRKU1ZhbHVl
SGFzaDo6aGFzaCh2YWx1ZS5maXJzdCksIEludEhhc2g8U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
Pjo6aGFzaCh2YWx1ZS5zZWNvbmQpKTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24mIGEsIGNvbnN0IEVuY29kZWRKU1Zh
bHVlV2l0aFJlcHJlc2VudGF0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsK
KyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKIAogLy8gU3RhbmQtYWxvbmUgaGVscGVyIGZ1bmN0aW9ucy4KIGlubGlu
ZSBKU1ZhbHVlIGpzTnVsbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2FyaXRoLWFkZC13aXRoLWNvbnN0YW50cy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvYXJpdGgtYWRkLXdpdGgtY29uc3RhbnRzLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI3YmU0MjgyZTgwODkxODQyMWMyM2U2MzhlZjU0MGY2YTM3NWM2ZTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FyaXRoLWFkZC13aXRoLWNv
bnN0YW50cy5qcwpAQCAtMCwwICsxLDIyMiBAQAorLy8gVGVzdCB2YWx1ZSArIDAuCitmdW5jdGlv
biBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcih4KSB7CisgICAgdmFyIGEgPSB4ICsg
MDsKKyAgICB2YXIgYiA9IDAgKyB4OworICAgIGlmICghKGlzTmFOKHgpICYmIGlzTmFOKGEpICYm
IGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3Igb24g
YXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIsIGEgPSAiICsgYSArICIgYiA9ICIgKyBi
OworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0lu
dGVnZXIpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIo
KSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVz
dWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoaSk7CisgICAgICAgIGlmIChy
ZXN1bHQgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRl
bkFzSW50ZWdlcihpKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAiICsgaTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKC0wKTsKKyAgICAg
ICAgaWYgKHJlc3VsdCAhPT0gLTApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50
aXR5V3JpdHRlbkFzSW50ZWdlcigtMCkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLTAiOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgewor
ICAgICAgICB2YXIgdGVzdFZhbHVlID0gaSArIC41OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJp
dGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIodGVzdFZhbHVlKTsKKyAgICAgICAgaWYgKHJl
c3VsdCAhPT0gdGVzdFZhbHVlKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0
eVdyaXR0ZW5Bc0ludGVnZXIoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiArIHRlc3RW
YWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50
ZWdlcihOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRo
cm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihOYU4pID0gIiArIHJlc3VsdCAr
ICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0
eVdyaXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0
KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2Vy
KEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAg
ICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoLUluZmluaXR5
KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAg
ICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigtSW5maW5pdHkp
ID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9
Cit9Cit0ZXN0QXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoKTsKKworCitmdW5jdGlv
biBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKHgpIHsKKyAgICB2YXIgYSA9IHggKyAw
LjA7CisgICAgdmFyIGIgPSAwLiArIHg7CisgICAgaWYgKCEoaXNOYU4oeCkgJiYgaXNOYU4oYSkg
JiYgaXNOYU4oYikpICYmIGEgIT09IGIpCisgICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvciBv
biBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlLCBhID0gIiArIGEgKyAiIGIgPSAiICsg
YjsKKyAgICByZXR1cm4gYTsKK30KK25vSW5saW5lKGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNE
b3VibGUpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgp
IHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKGkpOworICAgICAgICBpZiAocmVz
dWx0ICE9PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5B
c0RvdWJsZShpKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAiICsgaTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoLTApOworICAgICAgICBp
ZiAocmVzdWx0ICE9PSAtMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlX
cml0dGVuQXNEb3VibGUoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC0wICI7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAg
ICAgIHZhciB0ZXN0VmFsdWUgPSBpICsgLjU7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFk
ZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKHRlc3RWYWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQg
IT09IHRlc3RWYWx1ZSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0
dGVuQXNEb3VibGUoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiArIHRlc3RWYWx1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7
CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKE5h
Tik7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFy
aXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoTmFOKSA9ICIgKyByZXN1bHQgKyAiLCBleHBl
Y3RlZCBOYU4iOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
ZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVu
QXNEb3VibGUoSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSkgeworICAg
ICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoSW5maW5pdHkp
ID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIEluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1
bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKC1JbmZpbml0eSk7CisgICAgICAg
IGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJlc3VsdCA+PSAwKSB7CisgICAgICAgICAgICB0aHJv
dyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgtSW5maW5pdHkpID0gIiArIHJlc3Vs
dCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0QXJp
dGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgpOworCisKKy8vIFRlc3QgInZhbHVlICsgNDIi
LgorZnVuY3Rpb24gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoeCkgeworICAgIHZhciBhID0g
eCArIDQyOworICAgIHZhciBiID0gNDIgKyB4OworICAgIGlmICghKGlzTmFOKHgpICYmIGlzTmFO
KGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50ZXJuYWwgZXJy
b3Igb24gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIsIGEgPSAiICsgYSArICIgYiA9ICIgKyBi
OworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIp
OworCitmdW5jdGlvbiB0ZXN0QXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoKSB7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhB
ZGQ0MldyaXR0ZW5Bc0ludGVnZXIoMTMpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1NSkgewor
ICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKDEzKSA9ICIgKyBy
ZXN1bHQgKyAiLCBleHBlY3RlZCA1NSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQy
V3JpdHRlbkFzSW50ZWdlcigtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDQyKSB7CisgICAg
ICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoLTApID0gIiArIHJlc3Vs
dCArICIsIGV4cGVjdGVkIDQyIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0
dGVuQXNJbnRlZ2VyKDEzLjMpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1NS4zKSB7CisgICAg
ICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoMTMuMykgPSAiICsgcmVz
dWx0ICsgIiwgZXhwZWN0ZWQgNTUuMyI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0
MldyaXR0ZW5Bc0ludGVnZXIoTmFOKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKSB7Cisg
ICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoTmFOKSA9ICIgKyBy
ZXN1bHQgKyAiLCBleHBlY3RlZCBOYU4iOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRk
NDJXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3Vs
dCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcihJbmZp
bml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgSW5maW5pdHkiOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKC1JbmZpbml0eSk7CisgICAgICAg
IGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJlc3VsdCA+PSAwKSB7CisgICAgICAgICAgICB0aHJv
dyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAi
LCBleHBlY3RlZCAtSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorfQordGVzdEFyaXRoQWRk
NDJXcml0dGVuQXNJbnRlZ2VyKCk7CisKKworZnVuY3Rpb24gYXJpdGhBZGQ0MldyaXR0ZW5Bc0Rv
dWJsZSh4KSB7CisgICAgdmFyIGEgPSB4ICsgNDIuMDsKKyAgICB2YXIgYiA9IDQyLiArIHg7Cisg
ICAgaWYgKCEoaXNOYU4oeCkgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpICYmIGEgIT09IGIpCisg
ICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvciBvbiBhcml0aEFkZDQyV3JpdHRlbkFzRG91Ymxl
LCBhID0gIiArIGEgKyAiIGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsKK30KK25vSW5saW5lKGFy
aXRoQWRkNDJXcml0dGVuQXNEb3VibGUpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhBZGQ0MldyaXR0
ZW5Bc0RvdWJsZSgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAg
ICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKDEzKTsKKyAgICAgICAg
aWYgKHJlc3VsdCAhPT0gNTUpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRl
bkFzRG91YmxlKGkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDU1IjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoLTApOworICAgICAgICBpZiAocmVz
dWx0ICE9PSA0MikgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkNDJXcml0dGVuQXNEb3Vi
bGUoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDQyIjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoMTMuMyk7CisgICAgICAgIGlmIChyZXN1bHQg
IT09IDU1LjMpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzRG91Ymxl
KDEzLjMpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDU1LjMiOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoTmFOKTsKKyAgICAgICAgaWYgKCFpc05h
TihyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJs
ZShOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVz
dWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSk7CisgICAgICAgIGlmIChp
c0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5B
c0RvdWJsZShJbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgSW5maW5pdHkiOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoLUluZmluaXR5
KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAg
ICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKC1JbmZpbml0eSkgPSAiICsg
cmVzdWx0ICsgIiwgZXhwZWN0ZWQgLUluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KK30KK3Rl
c3RBcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcml0aC1t
dWwtd2l0aC1jb25zdGFudHMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2FyaXRoLW11bC13aXRoLWNvbnN0YW50cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTZhYjc5ZTRlMzY1Zjc0
Y2Y0YTJmMjA3ZjRmNTMzMmEzMDcwZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcml0aC1tdWwtd2l0aC1jb25zdGFudHMuanMKQEAgLTAs
MCArMSwyMjIgQEAKKy8vIFRlc3QgdmFsdWUgKiAxLgorZnVuY3Rpb24gYXJpdGhNdWxJZGVudGl0
eVdyaXR0ZW5Bc0ludGVnZXIoeCkgeworICAgIHZhciBhID0geCAqIDE7CisgICAgdmFyIGIgPSAx
ICogeDsKKyAgICBpZiAoIShpc05hTih4KSAmJiBpc05hTihhKSAmJiBpc05hTihiKSkgJiYgYSAh
PT0gYikKKyAgICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yIG9uIGFyaXRoTXVsSWRlbnRpdHlX
cml0dGVuQXNJbnRlZ2VyLCBhID0gIiArIGEgKyAiIGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsK
K30KK25vSW5saW5lKGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKTsKKworZnVuY3Rp
b24gdGVzdEFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKCkgeworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRl
bnRpdHlXcml0dGVuQXNJbnRlZ2VyKGkpOworICAgICAgICBpZiAocmVzdWx0ICE9PSBpKSB7Cisg
ICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoaSkgPSAi
ICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiArIGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0
aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09
IC0wKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVn
ZXIoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC0wIjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHRlc3RW
YWx1ZSA9IGkgKyAuNTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0
dGVuQXNJbnRlZ2VyKHRlc3RWYWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IHRlc3RWYWx1
ZSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2Vy
KGkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkICIgKyB0ZXN0VmFsdWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2
YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoTmFOKTsKKyAgICAg
ICAgaWYgKCFpc05hTihyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJZGVu
dGl0eVdyaXR0ZW5Bc0ludGVnZXIoTmFOKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBOYU4i
OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkg
ezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2Vy
KEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkpIHsKKyAgICAgICAgICAg
IHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihJbmZpbml0eSkgPSAiICsg
cmVzdWx0ICsgIiwgZXhwZWN0ZWQgSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFy
aXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKC1JbmZpbml0eSk7CisgICAgICAgIGlmIChp
c0Zpbml0ZShyZXN1bHQpIHx8IHJlc3VsdCA+PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJp
dGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAi
LCBleHBlY3RlZCAtSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorfQordGVzdEFyaXRoTXVs
SWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKCk7CisKKworZnVuY3Rpb24gYXJpdGhNdWxJZGVudGl0
eVdyaXR0ZW5Bc0RvdWJsZSh4KSB7CisgICAgdmFyIGEgPSB4ICogMS4wOworICAgIHZhciBiID0g
MS4gKiB4OworICAgIGlmICghKGlzTmFOKHgpICYmIGlzTmFOKGEpICYmIGlzTmFOKGIpKSAmJiBh
ICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3Igb24gYXJpdGhNdWxJZGVudGl0
eVdyaXR0ZW5Bc0RvdWJsZSwgYSA9ICIgKyBhICsgIiBiID0gIiArIGI7CisgICAgcmV0dXJuIGE7
Cit9Citub0lubGluZShhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKTsKKworZnVuY3Rp
b24gdGVzdEFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVu
dGl0eVdyaXR0ZW5Bc0RvdWJsZShpKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gaSkgeworICAg
ICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoaSkgPSAiICsg
cmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiArIGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11
bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKC0wKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gLTAp
IHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKC0w
KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtMCAiOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgdGVzdFZhbHVl
ID0gaSArIC41OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5B
c0RvdWJsZSh0ZXN0VmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICE9PSB0ZXN0VmFsdWUpIHsK
KyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKGkpID0g
IiArIHJlc3VsdCArICIsIGV4cGVjdGVkICIgKyB0ZXN0VmFsdWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVz
dWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShOYU4pOworICAgICAgICBpZiAo
IWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3Jp
dHRlbkFzRG91YmxlKE5hTikgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgTmFOIjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAg
ICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKEluZmluaXR5
KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJh
cml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAi
LCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVu
dGl0eVdyaXR0ZW5Bc0RvdWJsZSgtSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVz
dWx0KSB8fCByZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRp
dHlXcml0dGVuQXNEb3VibGUoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAt
SW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorfQordGVzdEFyaXRoTXVsSWRlbnRpdHlXcml0
dGVuQXNEb3VibGUoKTsKKworCisvLyBUZXN0ICJ2YWx1ZSAqIDQyIi4KK2Z1bmN0aW9uIGFyaXRo
TXVsNDJXcml0dGVuQXNJbnRlZ2VyKHgpIHsKKyAgICB2YXIgYSA9IHggKiA0MjsKKyAgICB2YXIg
YiA9IDQyICogeDsKKyAgICBpZiAoIShpc05hTih4KSAmJiBpc05hTihhKSAmJiBpc05hTihiKSkg
JiYgYSAhPT0gYikKKyAgICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yIG9uIGFyaXRoTXVsNDJX
cml0dGVuQXNJbnRlZ2VyLCBhID0gIiArIGEgKyAiIGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsK
K30KK25vSW5saW5lKGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKTsKKworZnVuY3Rpb24gdGVz
dEFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNJbnRl
Z2VyKDEzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNTQ2KSB7CisgICAgICAgICAgICB0aHJv
dyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoMTMpID0gIiArIHJlc3VsdCArICIsIGV4cGVj
dGVkIDU0NiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdl
cigtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IC0wKSB7CisgICAgICAgICAgICB0aHJvdyAi
YXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVk
IC0wIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKDEz
LjMpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1NTguNikgeworICAgICAgICAgICAgdGhyb3cg
ImFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKDEzLjMpID0gIiArIHJlc3VsdCArICIsIGV4cGVj
dGVkIDU1OC42IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzSW50
ZWdlcihOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRo
cm93ICJhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcihOYU4pID0gIiArIHJlc3VsdCArICIsIGV4
cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0lu
dGVnZXIoSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSkgeworICAgICAg
ICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5KSA9ICIgKyBy
ZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJp
dGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRl
KHJlc3VsdCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQy
V3JpdHRlbkFzSW50ZWdlcigtSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1J
bmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhNdWw0MldyaXR0ZW5Bc0lu
dGVnZXIoKTsKKworCitmdW5jdGlvbiBhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKHgpIHsKKyAg
ICB2YXIgYSA9IHggKiA0Mi4wOworICAgIHZhciBiID0gNDIuICogeDsKKyAgICBpZiAoIShpc05h
Tih4KSAmJiBpc05hTihhKSAmJiBpc05hTihiKSkgJiYgYSAhPT0gYikKKyAgICAgICAgdGhyb3cg
IkludGVybmFsIGVycm9yIG9uIGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUsIGEgPSAiICsgYSAr
ICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhNdWw0MldyaXR0
ZW5Bc0RvdWJsZSk7CisKK2Z1bmN0aW9uIHRlc3RBcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKCkg
eworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoMTMpOworICAgICAgICBpZiAocmVzdWx0ICE9
PSA1NDYpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKGkp
ID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDU0NiI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBh
cml0aE11bDQyV3JpdHRlbkFzRG91YmxlKC0wKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gLTAp
IHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKC0wKSA9ICIg
KyByZXN1bHQgKyAiLCBleHBlY3RlZCAtMCI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11
bDQyV3JpdHRlbkFzRG91YmxlKDEzLjMpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1NTguNikg
eworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoMTMuMykgPSAi
ICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTU4LjYiOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFy
aXRoTXVsNDJXcml0dGVuQXNEb3VibGUoTmFOKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQp
KSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJsZShOYU4pID0g
IiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJp
dGhNdWw0MldyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShy
ZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJsZShJ
bmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgSW5maW5pdHkiOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoLUluZmluaXR5KTsKKyAgICAg
ICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRo
cm93ICJhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKC1JbmZpbml0eSkgPSAiICsgcmVzdWx0ICsg
IiwgZXhwZWN0ZWQgLUluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RBcml0aE11
bDQyV3JpdHRlbkFzRG91YmxlKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247564</attachid>
            <date>2015-02-27 15:40:17 -0800</date>
            <delta_ts>2015-02-27 15:42:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142072-20150227154002.patch</filename>
            <type>text/plain</type>
            <size>73441</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MzZlMjI5ODVkMmQ5ZmE4ZjkzN2JkNzVlYTRlYjJiNGEyNDA4MTQ1Li5kNGY0YWZiNGQ5OTE3NGMy
ZWE2ZDYzOTEzZmIwODM4N2M0YWQyZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjYgQEAKKzIwMTUtMDItMjYgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0pTQ10gVXNlIHRoZSB3YXkgbnVtYmVyIGNvbnN0YW50cyBhcmUg
d3JpdHRlbiB0byBoZWxwIHR5cGUgc3BlY3VsYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjA3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgd2UgaW50ZXJw
cmV0IG51bWVyaWMgY29uc3RhbnQgYmFzZWQgb24gaG93IHRoZXkgYXBwZWFyCisgICAgICAgIGlu
IHRoZSBzb3VyY2UuCisKKyAgICAgICAgQ29uc3RhbnRzIHRoYXQgYXJlIGludGVnZXJzIGJ1dCB3
cml0dGVuIHdpdGggYSBkZWNpbWFsIHBvaW50IG5vdyBjYXJyeSB0aGF0IGluZm9ybWF0aW9uCisg
ICAgICAgIHRvIHRoZSBvcHRpbWl6YXRpbmcgdGllcnMuIEZyb20gdGhlcmUsIHdlIHVzZSB0aGF0
IHRvIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCB0eXBpbmcKKyAgICAgICAgbWF0aCBvcGVyYXRp
b25zIHRvd2FyZCBkb3VibGUgb3BlcmF0aW9ucy4KKworICAgICAgICBGb3IgZXhhbXBsZSwgaW46
CisgICAgICAgICAgICB2YXIgYSA9IHggKyAxLjA7CisgICAgICAgICAgICB2YXIgYiA9IHkgKyAx
OworICAgICAgICBUaGUgQWRkIGZvciBhIHdvdWxkIGJlIGJpYXNlZCB0b3dhcmQgZG91Ymxlcywg
dGhlIEFkZCBmb3IgYiB3b3VsZCBzcGVjdWxhdGUKKyAgICAgICAgaW50ZWdlciBhcyB1c3VhbC4K
KworCisgICAgICAgIFRoZSBnYWlucyBhcmUgdGlueSBidXQgdGhpcyBpcyBhIHByZXJlcXVpc2l0
ZSB0byBtYWtlIG15IG5leHQgcGF0Y2ggdXNlZnVsOgorICAgICAgICAtU3VuU3BpZGVyJ3MgYWNj
ZXNzLWZhbm5rdWNoOiBkZWZpbml0ZWx5IDEuMDY2MXggZmFzdGVyCisgICAgICAgIC1TdW5TcGlk
ZXIncyBtYXRoLWNvcmRpYzogZGVmaW5pdGVseSAxLjAyNjZ4IHNsb3dlcgorICAgICAgICAgICAg
b3ZlcmFsOiBtaWdodCBiZSAxLjAwNjZ4IHNsb3dlci4KKyAgICAgICAgLUtyYWtlbidzIGltYWdp
bmctZGFya3Jvb206IGRlZmluaXRlbHkgMS4wMzMzeCBmYXN0ZXIuCisKKyAgICAgICAgKiBwYXJz
ZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjp0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2Vu
KToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OmxleCk6CisgICAgICAgIFRoZSBsZXhlciBub3cg
Y3JlYXRlIHR3byB0eXBlcyBvZiB0b2tlbnMgZm9yIG51bWJlcjogSU5URUdFUiBhbmQgRE9VQkxF
LgorICAgICAgICBUaG9zZSB0b2tlbiB0eXBlcyBvbmx5IGNhcnJ5IGluZm9ybWF0aW9uIGFib3V0
IGhvdyB0aGUgdmFsdWVzIHdlcmUKKyAgICAgICAgZW50ZXJlZCwgYW4gSU5URUdFUiBkb2VzIG5v
dCBoYXZlIHRvIGJlIGFuIGludGVnZXIsIGl0IGlzIG9ubHkgd3JpdHRlbiBsaWtlIG9uZS4KKyAg
ICAgICAgTGFyZ2UgaW50ZWdlciBzdGlsbCBlbmQgdXAgcmVwcmVzZW50ZWQgYXMgZG91YmxlIGlu
IG1lbW9yeS4KKworICAgICAgICBPbmUgdHJhcCBJIGZlbGwgaW50byB3YXMgdHlwaW5nIG51bWJl
cnMgbGlrZSAxMmUzIGFzIGRvdWJsZS4gVGhpcyBraW5kIG9mIGxpdGVyYWwKKyAgICAgICAgaXMg
ZnJlcXVlbnRseSB1c2VkIGluIGludGVnZXItdHlwZWQgY29kZSwgd2hpbGUgMTIuZTMgd291bGQg
YXBwZWFyIGluIGRvdWJsZS10eXBlZAorICAgICAgICBjb2RlLgorICAgICAgICBCZWNhdXNlIG9m
IHRoYXQsIHRoZSBvbmx5IHNpZ25hbHMgZm9yIGRvdWJsZSBhcmU6IGRlY2ltYWwgcG9pbnQsIG5l
Z2F0aXZlIHplcm8sCisgICAgICAgIGFuZCByaWRpY3Vsb3VzbHkgbGFyZ2UgdmFsdWVzLgorCisg
ICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6RG91Ymxl
Tm9kZTo6RG91YmxlTm9kZSk6CisgICAgICAgIChKU0M6OkludGVnZXJOb2RlOjpJbnRlZ2VyTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6Ok51bWJlck5vZGU6
OnZhbHVlKToKKyAgICAgICAgKEpTQzo6TnVtYmVyTm9kZTo6c2V0VmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICBOdW1iZXIgZ2V0IHNwZWNpYWxpemVkIGluIHR3byBuZXcga2luZCBvZiBub2RlcyBp
biB0aGUgQVNUOiBJbnRlZ2VyTm9kZSBhbmQgRG91YmxlTm9kZS4KKworICAgICAgICAqIGJ5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG91YmxlRXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZUludGVnZXJFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
SW50ZWdlckxpa2VOdW1iZXIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3Vi
bGVMaWtlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlTnVtYmVyRnJv
bUJpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJl
ckZyb21VbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdh
dGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtl
TW9kTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VS
aWdodFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlm
dE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZU51bWJlckV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVO
dW1iZXIpOiBEZWxldGVkLgorICAgICAgICBUaGUgQVNUIGhhcyBzb21lIG9wdGltaXphdGlvbiB0
byByZXNvbHZlIGNvbnN0YW50cyBiZWZvcmUgZW1pdHRpbmcgYnl0ZWNvZGUuCisgICAgICAgIElu
IHRoZSBuZXcgY29kZSwgdGhlIGludGdlciByZXByZXNlbnRhdGlvbiBpcyBrZXB0IGlmIGJvdGgg
b3BlcmFuZHMgd2hlcmUKKyAgICAgICAgYWxzbyByZXByZXNlbnRlZCBhcyBpbnRlZ2Vycy4KKwor
ICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4pOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnByaW50VW5leHBlY3RlZFRva2VuVGV4dCk6CisgICAgICAgICogcGFyc2VyL1BhcnNlclRv
a2Vucy5oOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZURvdWJsZUV4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjpjcmVhdGVJbnRlZ2VyRXhwcik6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
OmNyZWF0ZU51bWJlckV4cHIpOiBEZWxldGVkLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdpc3Rlck5hbWUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50TmFtZSk6CisgICAgICAgIENoYW5nZSBjb25zdGFu
dE5hbWUociwgZ2V0Q29uc3RhbnQocikpIC0+IGNvbnN0YW50TmFtZShyKSB0byBzaW1wbGlmeQor
ICAgICAgICB0aGUgZHVtcCBjb2RlLgorCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5
dGVjb2RlKToKKyAgICAgICAgRHVtcCB0aHJlIHNvdXJlIHJlcHJlc2VudGF0aW9uIGluZm9ybWF0
aW9uIHdlIGhhdmUgd2l0aCBlYWNoIGNvbnN0YW50LgorCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6Cisg
ICAgICAgIChKU0M6OmNvbnN0YW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnRMYXppbHkpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisKKyAgICAgICAgKiBi
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJv
bVZhbHVlKToKKyAgICAgICAgVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgY29tZXMgaW4uIFdoZW4g
aW50ZWdlciB2YWx1ZXMgd2VyZSByZXByZXNlbnRlZCBhcyBkb3VibGUsCisgICAgICAgIHNwZWN1
bGF0ZSBmdWxsIG51bWJlciBpbnN0ZWFkIG9mIEludDMyL0ludDUyLgorCisgICAgICAgICogYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNocmlua1RvRml0
KToKKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgV2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRl
IGJldHdlZW4gY29uc3RhbnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYnV0IGFyZQorICAg
ICAgICByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiB0aGUgc291cmNlLiBWYWx1ZXMgbGlrZSAx
LjAgYW5kIDEgbm93IGVuZCB1cAorICAgICAgICBhcyBkaWZmZXJlbnQgY29uc3RhbnRzLgorCisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
YWRkQ29uc3RhbnRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckZyb3plblZhbHVlcyk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZFNwZWN1bGF0aW9uTW9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0
ZUludDMyKToKKyAgICAgICAgQXJpdGhBZGQgaXMgdmVyeSBhZ2dyZXNzaXZlIHRvd2FyZCB1c2lu
ZyBJbnQ1Miwgd2hpY2ggaXMgcXVpdGUgdXNlZnVsCisgICAgICAgIGluIG1hbnkgYmVuY2htYXJr
cy4KKworICAgICAgICBIZXJlIHdlIG5lZWQgdG8gc3BlY2lhbGl6ZSB0byBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgZm9yY2Ugb3VyIGxpdGVyYWxzCisgICAgICAgIHRvIEludDUyIGlmIHRoZXJlIHdlcmUg
cmVwcmVzZW50ZWQgYXMgZG91YmxlLgorCisgICAgICAgIFRoZXJlIGlzIG9uZSBleGNlcHRpb24g
dG8gdGhhdCBydWxlOiB3aGVuIHRoZSBvdGhlciBvcGVyYW5kIGlzIGd1YXJhbnRlZWQKKyAgICAg
ICAgdG8gY29tZSBmcm9tIGEgTm9kZVJlc3VsdEludDMyLiBUaGlzIGlzIGJlY2F1c2UgdGhlcmUg
aXMgc29tZSB3ZWlyZCBjb2RlCisgICAgICAgIGRvaW5nIHN0dWZmIGxpa2U6CisgICAgICAgICAg
ICB2YXIgYiA9IGF8MDsKKyAgICAgICAgICAgIHZhciBjID0gYioyLjA7CisKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnNldE9wQW5kRGVmYXVsdEZsYWdzKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGRmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlLmg6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFz
aFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJl
cHJlc2VudGF0aW9uSGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6RW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb25IYXNoVHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9u
SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0
aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcml0aC1hZGQtd2l0aC1j
b25zdGFudHMuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcml0aC1tdWwtd2l0
aC1jb25zdGFudHMuanM6IEFkZGVkLgorCiAyMDE1LTAyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIFNTQSBzdGFjayBhY2Nlc3NlcyBzaG91bGRuJ3Qg
c3BlYWsgb2YgVmFyaWFibGVBY2Nlc3NEYXRhcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBlZjBhZDRlNjIyYjY4YTI1MzBhMThlYTJhODdiOTRm
YzI5M2NiZThkLi5jMWEyMGNiMjgxNjVkZGUxNjJhYjUzZDQzZWM4NDVjZDlkZTQ0MzlhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTcyLDEx
ICsxNzIsNiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgIGR1bXBBc3N1bWluZ0pJVFR5cGUob3V0LCBqaXRUeXBlKCkpOwogfQogCi1zdGF0aWMgQ1N0
cmluZyBjb25zdGFudE5hbWUoaW50IGssIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
Q1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIoayksICIpIik7Ci19Ci0KIHN0YXRp
YyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAg
ICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwoKSwgIihAaWQiLCBpZDAsICIpIik7CkBAIC0x
ODUsMTEgKzE4MCwxNyBAQCBzdGF0aWMgQ1N0cmluZyBpZE5hbWUoaW50IGlkMCwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpCiBDU3RyaW5nIENvZGVCbG9jazo6cmVnaXN0ZXJOYW1lKGludCByKSBj
b25zdAogewogICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChyKSkKLSAgICAgICAgcmV0
dXJuIGNvbnN0YW50TmFtZShyLCBnZXRDb25zdGFudChyKSk7CisgICAgICAgIHJldHVybiBjb25z
dGFudE5hbWUocik7CiAKICAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7
CiB9CiAKK0NTdHJpbmcgQ29kZUJsb2NrOjpjb25zdGFudE5hbWUoaW50IGluZGV4KSBjb25zdAor
eworICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25zdGFudChpbmRleCk7CisgICAgcmV0dXJuIHRv
Q1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLCAiKSIpOworfQorCiBz
dGF0aWMgQ1N0cmluZyByZWdleHBUb1NvdXJjZVN0cmluZyhSZWdFeHAqIHJlZ0V4cCkKIHsKICAg
ICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwgMCB9OwpAQCAtNjA2LDcgKzYwNywx
OSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
ICAgIG91dC5wcmludGYoIlxuQ29uc3RhbnRzOlxuIik7CiAgICAgICAgIHNpemVfdCBpID0gMDsK
ICAgICAgICAgZG8gewotICAgICAgICAgICAgb3V0LnByaW50ZigiICAgayV1ID0gJXNcbiIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgdG9DU3RyaW5nKG1fY29uc3RhbnRSZWdpc3RlcnNbaV0u
Z2V0KCkpLmRhdGEoKSk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb25EZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHN3aXRjaCAobV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb25baV0pIHsKKyAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgICAgICAgICAgc291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uRGVzY3JpcHRpb24gPSAiOiBpbiBzb3VyY2UgYXMgZG91YmxlIjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJ
bnRlZ2VyOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0
aW9uID0gIjogaW4gc291cmNlIGFzIGludGVnZXIiOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgorICAgICAg
ICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gIiI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIgICBrJXUgPSAlcyVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSksIHRvQ1N0cmluZyht
X2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKS5kYXRhKCksIHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbkRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8
IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICB9CkBAIC0xNDQ5LDcgKzE0NjIsNyBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgaW50IGswID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBKU05hbWVTY29wZTo6VHlwZSBzY29wZVR5cGUg
PSAoSlNOYW1lU2NvcGU6OlR5cGUpKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXNoX25hbWVfc2NvcGUi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgY29uc3RhbnROYW1lKGswLCBn
ZXRDb25zdGFudChrMCkpLmRhdGEoKSwgKHNjb3BlVHlwZSA9PSBKU05hbWVTY29wZTo6RnVuY3Rp
b25OYW1lU2NvcGUpID8gImZ1bmN0aW9uU2NvcGUiIDogKChzY29wZVR5cGUgPT0gSlNOYW1lU2Nv
cGU6OkNhdGNoU2NvcGUpID8gImNhdGNoU2NvcGUiIDogInVua25vd25TY29wZVR5cGUiKSk7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGNvbnN0YW50TmFtZShrMCkuZGF0YSgp
LCAoc2NvcGVUeXBlID09IEpTTmFtZVNjb3BlOjpGdW5jdGlvbk5hbWVTY29wZSkgPyAiZnVuY3Rp
b25TY29wZSIgOiAoKHNjb3BlVHlwZSA9PSBKU05hbWVTY29wZTo6Q2F0Y2hTY29wZSkgPyAiY2F0
Y2hTY29wZSIgOiAidW5rbm93blNjb3BlVHlwZSIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKQEAgLTE0NjYsNyArMTQ3OSw3IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBpbnQgazAgPSAoKytpdCkt
PnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBrMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhy
b3dfc3RhdGljX2Vycm9yIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCBjb25z
dGFudE5hbWUoazAsIGdldENvbnN0YW50KGswKSkuZGF0YSgpLCBrMSA/ICJ0cnVlIiA6ICJmYWxz
ZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgY29uc3RhbnROYW1lKGswKS5k
YXRhKCksIGsxID8gInRydWUiIDogImZhbHNlIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CkBAIC0xNjM5LDYgKzE2NTIsNyBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCiAg
ICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5tX2ZpcnN0TGluZUNvbHVtbk9mZnNl
dCkKICAgICAsIG1fY29kZVR5cGUob3RoZXIubV9jb2RlVHlwZSkKICAgICAsIG1fY29uc3RhbnRS
ZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykKKyAgICAsIG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKICAg
ICAsIG1fZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1bmN0aW9uRXhwcnMpCiAgICAgLCBtX29zckV4
aXRDb3VudGVyKDApCkBAIC0xNzMwLDcgKzE3NDQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxp
bgogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2Zp
bGVyKCkpCiAgICAgICAgIHZtKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5yZW1vdmVV
bmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIG1fb3duZXJFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgbV9vd25lckV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAKLSAgICBzZXRDb25zdGFudFJlZ2lzdGVycyh1bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSk7CisgICAgc2V0Q29uc3RhbnRSZWdp
c3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSk7CiAgICAgaWYgKHVu
bGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCiAgICAgICAgIG1fY29uc3RhbnRS
ZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25z
dGFudEluZGV4KCldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVjdC5n
ZXQoKSk7CiAgICAgbV9mdW5jdGlvbkRlY2xzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CkBAIC0yOTgwLDYgKzI5OTQsNyBAQCB2b2lkIENv
ZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQogICAgIAogICAgIGlm
IChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24uc2hyaW5rVG9GaXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3JhcmVEYXRhKSB7
CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCAwNzI5
M2UwM2QwN2RhNWM3NzBmMmQyOTg4NzVjMjliNTk0OGRlNzc3Li42MWFiM2JkYjM5ZGEzZTgzODJh
YTA2Yzk5MzcwZDZlOTRlM2ZlYzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCkBAIC02MjgsMTIgKzYyOCwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMoKSB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzOyB9CisgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRS
ZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgfQog
ICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikKICAgICB7CiAgICAgICAgIHVuc2ln
bmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0
YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CiAgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgbV9vd25l
ckV4ZWN1dGFibGUuZ2V0KCksIHYpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC02NDEsNiArNjQzLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXpl
KCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtu
b3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBw
ZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIApAQCAtNjQ5LDYgKzY1Miw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CiAgICAg
QUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29u
c3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhd
LmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2wo
aW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAg
aW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXpl
KCk7IH0KQEAgLTk4MywxMiArOTg3LDE0IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUFs
bFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7
CiAKLSAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudHMpCisgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhj
b25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0
b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbnN0YW50cy5zaXplKCkgPT0gY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNpemUoKSk7CiAgICAgICAgIHNpemVfdCBjb3Vu
dCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVzaXpl
KGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAg
ICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJs
ZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKICAgICB9
CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZSgKQEAgLTk5Niw2ICsxMDAyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExp
bmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKIAogICAgIENTdHJpbmcgcmVnaXN0ZXJO
YW1lKGludCByKSBjb25zdDsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNv
bnN0OwogICAgIHZvaWQgcHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50
IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAgdm9p
ZCBwcmludEJpbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBj
b25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAgdm9pZCBwcmludENvbmRp
dGlvbmFsSnVtcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiwgaW50IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCk7CkBAIC0x
MDkzLDYgKzExMDAsNyBAQCBwcml2YXRlOgogICAgIC8vIFRPRE86IFRoaXMgY291bGQganVzdCBi
ZSBhIHBvaW50ZXIgdG8gbV91bmxpbmtlZENvZGVCbG9jaydzIGRhdGEsIGJ1dCB0aGUgREZHIG11
dGF0ZXMKICAgICAvLyBpdCwgc28gd2UncmUgc3R1Y2sgd2l0aCBpdCBmb3Igbm93LgogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgVmVj
dG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBt
X2Z1bmN0aW9uRGVjbHM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFi
bGU+PiBtX2Z1bmN0aW9uRXhwcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMDhjNzI5NzM2NTI5YjEzN2JkYzNiNGE5
MDQzYTk5Y2Q3YzYxMDVmNi4uYzdkMmRhNTUxZTM3OTgwYjJiMGE3MzEyMzRkNGQ4YWNlZDU1ZGYw
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKQEAgLTMxOCwxMSArMzE4LDEyIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8
SWRlbnRpZmllcj4mIGlkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsg
fQogCiAgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50
KEpTVmFsdWUgdikKKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246Ok90aGVyKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBw
ZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVy
cy5sYXN0KCkuc2V0KCptX3ZtLCB0aGlzLCB2KTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHVuc2lnbmVkIGFkZE9yRmluZENvbnN0YW50
KEpTVmFsdWUpOwpAQCAtMzMwLDYgKzMzMSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhd
OyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7
IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICAvLyBKdW1wcwogICAgIHNp
emVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5z
aXplKCk7IH0KQEAgLTM0Nyw2ICszNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fanVtcFRhcmdl
dHMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9pZGVudGlmaWVycy5zaHJpbmtUb0ZpdCgpOwog
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1f
ZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuc2hy
aW5rVG9GaXQoKTsKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtU
b0ZpdCgpOwpAQCAtNTQ0LDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgLy8gQ29uc3RhbnQgUG9v
bHMKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKICAgICBWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOworICAgIFZlY3RvcjxTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OwogICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25W
ZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwogICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciBtX2Z1
bmN0aW9uRXhwcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDIxNDAyZWJlZWQxNTFhNWFmZDAyNTVm
NDNlMjgzYzBiZTgwYWZmZjMuLmMwYjBiYmM5MzZmY2IwMTdmYzE3NjA5MWY3MzhiYWIyYWNjYmVk
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC05ODIsMTcgKzk4MiwxOSBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRFbXB0eVZhbHVlKCkKICAgICByZXR1cm4gbV9l
bXB0eVZhbHVlUmVnaXN0ZXI7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBh
ZGRDb25zdGFudEVtcHR5VmFsdWUoKTsKIAogICAgIGludCBpbmRleCA9IG1fbmV4dENvbnN0YW50
T2Zmc2V0OwotICAgIEpTVmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2pzVmFsdWVNYXAu
YWRkKEpTVmFsdWU6OmVuY29kZSh2KSwgbV9uZXh0Q29uc3RhbnRPZmZzZXQpOworCisgICAgRW5j
b2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24gdmFsdWVNYXBLZXkgeyBKU1ZhbHVlOjplbmNv
ZGUodiksIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiB9OworICAgIEpTVmFsdWVNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtX2pzVmFsdWVNYXAuYWRkKHZhbHVlTWFwS2V5LCBtX25leHRDb25zdGFu
dE9mZnNldCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIG1fY29uc3Rh
bnRQb29sUmVnaXN0ZXJzLmFwcGVuZChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fbmV4
dENvbnN0YW50T2Zmc2V0KTsKICAgICAgICAgKyttX25leHRDb25zdGFudE9mZnNldDsKLSAgICAg
ICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50KHYpOworICAgICAgICBtX2NvZGVCbG9jay0+YWRk
Q29uc3RhbnQodiwgc291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKICAgICB9IGVsc2UKICAgICAg
ICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIHJldHVybiAmbV9jb25zdGFu
dFBvb2xSZWdpc3RlcnNbaW5kZXhdOwpAQCAtMTE2NSw5ICsxMTY3LDkgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQKICAgICByZXR1cm4gZW1pdExvYWQoZHN0LCBKU1ZhbHVlKHN0cmluZ0luTWFw
KSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3Rl
cklEKiBkc3QsIEpTVmFsdWUgdikKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKLSAgICBSZWdpc3RlcklEKiBjb25zdGFudElE
ID0gYWRkQ29uc3RhbnRWYWx1ZSh2KTsKKyAgICBSZWdpc3RlcklEKiBjb25zdGFudElEID0gYWRk
Q29uc3RhbnRWYWx1ZSh2LCBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOwogICAgIGlmIChkc3Qp
CiAgICAgICAgIHJldHVybiBlbWl0TW92ZShkc3QsIGNvbnN0YW50SUQpOwogICAgIHJldHVybiBj
b25zdGFudElEOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU0YzMxMTE1ZmRiYzkzNDYwZTgzYjQ1NjhkMTY3
NjZmODlmNTlmMWMuLjI1NDZiYmY4Y2RiNTMxNjBjN2JiZjhlZjUyZjViNTBiNzcyOTM1YjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKQEAgLTQ0Myw3ICs0NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImKTsK
LSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlLCBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVy
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWRHbG9iYWxPYmplY3QoUmVnaXN0ZXJJRCog
ZHN0KTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VW5hcnlPcChPcGNvZGVJRCwgUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwpAQCAtNjU0LDcgKzY1NCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIGJvb2wgaGFzQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpIGNv
bnN0OwogICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJik7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSk7CisgICAgICAgIFJl
Z2lzdGVySUQqIGFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSwgU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGFkZENvbnN0YW50RW1wdHlWYWx1ZSgpOwogICAgICAgICB1bnNpZ25lZCBhZGRSZWdFeHAo
UmVnRXhwKik7CiAKQEAgLTgwMCw2ICs4MDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIC8vIENvbnN0YW50IHBvb2wKICAgICAgICAgSWRlbnRpZmllck1hcCBtX2lkZW50
aWZpZXJNYXA7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEVuY29kZWRKU1ZhbHVlV2l0aFJl
cHJlc2VudGF0aW9uLCB1bnNpZ25lZCwgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb25I
YXNoLCBFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlvbkhhc2hUcmFpdHM+IEpTVmFsdWVN
YXA7CiAgICAgICAgIEpTVmFsdWVNYXAgbV9qc1ZhbHVlTWFwOwogICAgICAgICBJZGVudGlmaWVy
U3RyaW5nTWFwIG1fc3RyaW5nTWFwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggMDBhY2NmOWYwNGJjYzcyMGQ1YjBi
Zjk0ZmY2MmQ1ZTA3MjFlOTg2NC4uYjQyZWNiNzVkOTI0MjQ1YjVlZjdjM2IwOWYwOTgxNDNmZDFl
NGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcApAQCAtMTIyLDYgKzEyMiwxNSBAQCBKU1ZhbHVlIFN0cmluZ05vZGU6Ompz
VmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikgY29uc3QKICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmFkZFN0cmluZ0NvbnN0YW50KG1fdmFsdWUpOwogfQogCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK1JlZ2lzdGVySUQqIE51bWJlck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBn
ZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNWYWx1ZShnZW5lcmF0b3IpLCBpc0ludGVn
ZXJOb2RlKCkgPyBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXIgOiBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkRvdWJsZSk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBSZWdFeHBOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCA4NTg1
OWQyOGIyZDhhNDI4ODVlZDg0ZmEwOTdhNTY2NzU4MTRlZmE0Li42ZTZlODQyMWFkN2I4ZDAyYjgz
MDZhYWYxODRiMDU2YTFkNjkxMjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTk1LDcgKzk1
LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxpbnQgcG93ZXI+CiAgICAgYm9vbCBpc1dpdGhp
blBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgIGlmICghbm9kZS0+aXNOdW1iZXJDb25z
dGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gaXNXaXRo
aW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQ8cG93ZXI+KG5vZGUpOwogICAgIH0KQEAgLTEwNCw3ICsx
MDQsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGUqIG5vZGUp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBKU0Nv
bnN0YW50OiB7CisgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgSlND
b25zdGFudDoKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50NTI6IHsKICAgICAgICAgICAgIHJl
dHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudDxwb3dlcj4obm9kZSk7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtMTI4LDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHNoaWZ0
QW1vdW50ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOwotICAgICAgICAgICAgaWYgKHNoaWZ0QW1v
dW50LT5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmlzTnVtYmVy
Q29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBK
U1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQtPmFzSlNWYWx1ZSgpOwogICAgICAg
ICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDJjODVhODYxMGNkNDQzMzYw
YjhhMzliMzcyNGQ5NmQyMzMyZjE1MGUuLjM3OTJlNDBjNjE2Y2MyNTE3NjI4ZDE0Y2IwNDRhMTVj
N2M4OTJlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCkBAIC0yNTIsMTQgKzI1MiwyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgdW5z
aWduZWQgY29uc3RhbnRJbmRleCA9IG9wZXJhbmQudG9Db25zdGFudEluZGV4KCk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFudHMuc2l6ZSgpOwogICAgICAgICAgICAg
aWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFudHNbY29uc3RhbnRJbmRl
eF0pIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgIGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrID0gKm1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0Q29u
c3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiAgPSBjb2RlQmxvY2suY29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBt
X2NvbnN0YW50cy5ncm93KGNvbnN0YW50SW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFudHNbaV0gPSBudWxscHRyOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSA9
Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3Jh
cGguZnJlZXplU3Ryb25nKHZhbHVlKSkpOworCisgICAgICAgICAgICAgICAgT3BJbmZvIG9wSW5m
byhtX2dyYXBoLmZyZWV6ZVN0cm9uZyh2YWx1ZSkpOworICAgICAgICAgICAgICAgIE5vZGUqIGNv
bnN0YW50Tm9kZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZSkKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnROb2RlID0gYWRkVG9HcmFwaChEb3VibGVDb25zdGFudCwgb3BJ
bmZvKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
Tm9kZSA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgb3BJbmZvKTsKKyAgICAgICAgICAgICAgICBt
X2NvbnN0YW50c1tjb25zdGFudEluZGV4XSA9IGNvbnN0YW50Tm9kZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSk7CiAgICAgICAg
ICAgICByZXR1cm4gbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhNTM3NDU1YzVlYjY3MjY4ZmU0MWY2
NjljYjU3YThkNDRmYmJjZTRkLi4xMzVlOGJmMDgxMzBjM2IzNjY2YzE1YTIzNjZhMDU1NzI4ZGZm
OTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAg
LTEwNDksNyArMTA0OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRG91YmxlUmVwOgogICAg
ICAgICBjYXNlIFZhbHVlUmVwOgogICAgICAgICBjYXNlIEludDUyUmVwOgotICAgICAgICBjYXNl
IERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNh
c2UgSWRlbnRpdHk6IC8vIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgogICAgICAg
ICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKQEAgLTEyMTIsNiArMTIxMSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2Jv
ZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNl
IFNldEFyZ3VtZW50OgogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgRG91
YmxlQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgIGNhc2UgR2V0Q2Fs
bGVlOgogICAgICAgICBjYXNlIEZsdXNoOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAppbmRleCBlNzkwMWQ4YjUzYjQzOWNkOWE1OWJmZjM5NzEyNDZhYTE3ODdjYjYwLi5hNWU5
ZTVlNWIxYzQxYThiNTBkNGUzODA1NzkwZTcyMjE3MDBmZDExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMTA1Myw2ICsxMDUzLDcgQEAgSlNBcnJheUJ1ZmZlclZp
ZXcqIEdyYXBoOjp0cnlHZXRGb2xkYWJsZVZpZXdGb3JDaGlsZDEoTm9kZSogbm9kZSkKIHZvaWQg
R3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKIHsKICAgICBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRzKCkucmVzaXplKDApOworICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKS5yZXNpemUoMCk7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBt
X2Zyb3plblZhbHVlcykgewogICAgICAgICBpZiAodmFsdWUtPnN0cnVjdHVyZSgpKQogICAgICAg
ICAgICAgQVNTRVJUKG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5jb250YWlucyh2YWx1ZS0+c3RydWN0
dXJlKCkpKTsKQEAgLTEwNzgsNiArMTA3OSw3IEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVu
VmFsdWVzKCkKICAgICAgICAgfSB9CiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaHJpbmtUb0ZpdCgpOworICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKS5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIEdyYXBoOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CmluZGV4IDAxZDFhYTZmMzNlNjk1NWU5OTM4YmU3NTA1MjRlNTQ0YjkxM2MzN2QuLmYzMjQzZGQ5
ZjUxYjVhMGQwN2UxZjBlOGRkYTc4YTQ2NmViODIxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKQEAgLTIxNyw5ICsyMTcsOSBAQCBwdWJsaWM6CiAgICAgICAgIE5vZGUqIHJp
Z2h0ID0gYWRkLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAobGVmdC0+
aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVj
dWxhdGVJbnQzMihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIsIGxlZnQsIHNvdXJjZSk7
CisgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIoYWRk
LCByaWdodFNob3VsZFNwZWN1bGF0ZUludDMyLCByaWdodCwgbGVmdCwgc291cmNlKTsKICAgICAg
ICAgaWYgKHJpZ2h0LT5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZEltbWVk
aWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKGFkZCwgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMyLCBy
aWdodCwgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVj
dWxhdGVJbnQzMihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnQzMiwgbGVmdCwgcmlnaHQsIHNv
dXJjZSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnQz
MiAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludDMyICYmIGFkZC0+Y2FuU3BlY3VsYXRlSW50MzIo
c291cmNlKSkgPyBTcGVjdWxhdGVJbnQzMiA6IERvbnRTcGVjdWxhdGVJbnQzMjsKICAgICB9CkBA
IC04NTEsNyArODUxLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3Nv
cihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IpOwogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlh
dGVTaG91bGRTcGVjdWxhdGVJbnQzMihOb2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVj
dWxhdGVJbnQzMiwgTm9kZSogaW1tZWRpYXRlLCBSYXJlQ2FzZVByb2ZpbGluZ1NvdXJjZSBzb3Vy
Y2UpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUlu
dDMyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludDMyLCBOb2RlKiBv
cGVyYW5kLCBOb2RlKmltbWVkaWF0ZSwgUmFyZUNhc2VQcm9maWxpbmdTb3VyY2Ugc291cmNlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS0+aGFzQ29uc3RhbnQoKSk7CiAgICAgICAg
IApAQCAtODYxLDYgKzg2MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKCF2
YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludDMyKQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVj
dWxhdGVJbnQzMjsKKworICAgICAgICAvLyBJbnRlZ2VyIGNvbnN0YW50cyBjYW4gYmUgdHlwZWQg
RG91YmxlIGlmIHRoZXkgYXJlIHdyaXR0ZW4gbGlrZSBhIGRvdWJsZSBpbiB0aGUgc291cmNlIGNv
ZGUgKGUuZy4gNDIuMCkuCisgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgd2Ugc3RheSBjb25zZXJ2
YXRpdmUgdW5sZXNzIHRoZSBvdGhlciBvcGVyYW5kIHdhcyBleHBsaWNpdGx5IHR5cGVkIGFzIGlu
dGVnZXIuCisgICAgICAgIE5vZGVGbGFncyBvcGVyYW5kUmVzdWx0VHlwZSA9IG9wZXJhbmQtPnJl
c3VsdCgpOworICAgICAgICBpZiAob3BlcmFuZFJlc3VsdFR5cGUgIT0gTm9kZVJlc3VsdEludDMy
ICYmIGltbWVkaWF0ZS0+b3AoKSA9PSBEb3VibGVDb25zdGFudCkKKyAgICAgICAgICAgIHJldHVy
biBEb250U3BlY3VsYXRlSW50MzI7CiAgICAgICAgIAogICAgICAgICBpZiAoaW1tZWRpYXRlVmFs
dWUuaXNJbnQzMigpIHx8IGltbWVkaWF0ZVZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICAgICAg
cmV0dXJuIGFkZC0+Y2FuU3BlY3VsYXRlSW50MzIoc291cmNlKSA/IFNwZWN1bGF0ZUludDMyIDog
RG9udFNwZWN1bGF0ZUludDMyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBmNWM5ZWM0MzY5
Y2JhNTc2ZTFmZWM0ZmM4NTJhNzY5YTQzOGE0ZTIyLi4zY2UwZjVkZGRjYWYwYjNhMTI2NjkxZTdm
NDBiNzZlNGQ5OGEzZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtMTQ4LDYgKzE0OCwx
NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHR5cGUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBEb3VibGVDb25z
dGFudDogeworICAgICAgICAgICAgZG91YmxlIG51bWJlciA9IG5vZGUtPmFzTnVtYmVyKCk7Cisg
ICAgICAgICAgICBpZiAobnVtYmVyICE9IG51bWJlcikKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24oU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjRnVsbFJlYWxOdW1i
ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC01MzIsNyArNTQwLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBEb3VibGVSZXA6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6CiAg
ICAgICAgIGNhc2UgSW50NTJSZXA6Ci0gICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAg
ICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0eToKICAgICAgICAg
Y2FzZSBCb29sZWFuVG9OdW1iZXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCmluZGV4IDMyOWEwNzY4OTJhODU3M2IyYmY5ZmM2ODc1Y2U5N2QwYWUwNDI0OGYuLjUy
NWMxMWZhZDcyOTJhODA5MjM4OGZjMDA5MTQxNWE1MjU1ZGNkYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC0xMTgsOCArMTE4LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBtX215UmVmQ291bnRzLmZpbmQoZWRnZS5ub2RlKCkpLT52YWx1
ZSsrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSA9PSAoZWRnZS51c2VLaW5kKCkg
PT0gRG91YmxlUmVwVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IERvdWJsZVJlcFJlYWxVc2UgfHwg
ZWRnZS51c2VLaW5kKCkgPT0gRG91YmxlUmVwTWFjaGluZUludFVzZSkpOworCisgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRlRWRnZVdpdGhEb3VibGVSZXN1bHRJZk5lY2Vzc2FyeShub2RlLCBl
ZGdlKTsKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5o
YXNJbnQ1MlJlc3VsdCgpID09IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQ1MlJlcFVzZSkpOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3Jt
ID09IFNTQSkgewpAQCAtNTQzLDcgKzU0MywyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgdm9pZCB2YWxpZGF0ZUVkZ2VXaXRoRG91Ymxl
UmVzdWx0SWZOZWNlc3NhcnkoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
aWYgKCFlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBUaGUgb25seSBjYXNlIHdlcmUgYW4gZWRnZSBjYW4gaGF2ZSBhIERvdWJsZVJlc3Vs
dCB3aXRob3V0IGhhdmluZyBhIG51bWJlci10eXBlIHVzZUtpbmQoKQorICAgICAgICAvLyBmb3Ig
Y29uc3RhbnRzIHRoYXQgYXBwZWFyIGFzIGRvdWJsZSBpbiB0aGUgc291cmNlIGNvZGUgKGUuZy4g
NDIuMGUyKS4KKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgPT0gRG91YmxlQ29uc3RhbnQpCisgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRV
c2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlIHx8IGVkZ2UudXNlS2luZCgpID09
IERvdWJsZVJlcFJlYWxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gRG91YmxlUmVwTWFjaGluZUlu
dFVzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwg
ZWRnZS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IERvdWJs
ZVJlcFJlYWxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gRG91YmxlUmVwTWFjaGluZUludFVzZSk7
CisgICAgfQorCiAgICAgdm9pZCBjaGVja09wZXJhbmQoCiAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrLCBPcGVyYW5kczxzaXplX3Q+JiBnZXRMb2NhbFBvc2l0aW9ucywKICAgICAgICAgT3BlcmFu
ZHM8c2l6ZV90PiYgc2V0TG9jYWxQb3NpdGlvbnMsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCA4ODQxOGYxNmEy
MDAyNmIyYTZjMDFmM2UyNjgxZDYwY2Q1Y2Y3OTk2Li5mYTY0OTUxYTlkZjJiNmI2NDUwNWZhMWVh
MzdhMTAwNGI5YThkOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0FTVEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxk
ZXIuaApAQCAtMTkyLDEwICsxOTIsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgaW5jQ29uc3Rh
bnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFycmF5Tm9kZShsb2Nh
dGlvbiwgZWxpc2lvbnMsIGVsZW1zKTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0
ZU51bWJlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCisg
ICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZURvdWJsZUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewogICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAg
ICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTnVtYmVyTm9kZShsb2NhdGlvbiwgZCk7
CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIERvdWJsZU5vZGUobG9jYXRpb24s
IGQpOworICAgIH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlSW50ZWdlckV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCisgICAgeworICAgICAgICBpbmND
b25zdGFudHMoKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgSW50ZWdlck5v
ZGUobG9jYXRpb24sIGQpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVTdHJp
bmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogc3Ry
aW5nKQpAQCAtNzQ4LDExICs3NTMsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9ldmFsQ291bnQr
KzsKICAgICAgICAgbV9zY29wZS5tX2ZlYXR1cmVzIHw9IEV2YWxGZWF0dXJlOwogICAgIH0KLSAg
ICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTnVtYmVyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIGRvdWJsZSBkKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVJbnRlZ2VyTGlrZU51
bWJlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIE51bWJlck5vZGUobG9jYXRpb24sIGQp
OworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBJbnRlZ2VyTm9kZShsb2NhdGlv
biwgZCk7CiAgICAgfQotICAgIAorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVEb3VibGVMaWtl
TnVtYmVyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSBkKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRG91YmxlTm9kZShsb2NhdGlvbiwg
ZCk7CisgICAgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdW1iZXJGcm9tQmluYXJ5T3Bl
cmF0aW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSB2YWx1ZSwgY29u
c3QgTnVtYmVyTm9kZSYgb3JpZ2luYWxOb2RlQSwgY29uc3QgTnVtYmVyTm9kZSYgb3JpZ2luYWxO
b2RlQikKKyAgICB7CisgICAgICAgIGlmIChvcmlnaW5hbE5vZGVBLmlzSW50ZWdlck5vZGUoKSAm
JiBvcmlnaW5hbE5vZGVCLmlzSW50ZWdlck5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVh
dGVJbnRlZ2VyTGlrZU51bWJlcihsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICByZXR1cm4gY3Jl
YXRlRG91YmxlTGlrZU51bWJlcihsb2NhdGlvbiwgdmFsdWUpOworICAgIH0KKyAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlTnVtYmVyRnJvbVVuYXJ5T3BlcmF0aW9uKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIGRvdWJsZSB2YWx1ZSwgY29uc3QgTnVtYmVyTm9kZSYgb3JpZ2luYWxO
b2RlKQorICAgIHsKKyAgICAgICAgaWYgKG9yaWdpbmFsTm9kZS5pc0ludGVnZXJOb2RlKCkpCisg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIHZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZURvdWJsZUxpa2VOdW1iZXIobG9jYXRpb24sIHZhbHVl
KTsKKyAgICB9CisKICAgICBWTSogbV92bTsKICAgICBQYXJzZXJBcmVuYSYgbV9wYXJzZXJBcmVu
YTsKICAgICBTb3VyY2VDb2RlKiBtX3NvdXJjZUNvZGU7CkBAIC03OTMsOSArODE0LDggQEAgRXhw
cmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEV4cHIKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTmVn
YXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSog
bikKIHsKICAgICBpZiAobi0+aXNOdW1iZXIoKSkgewotICAgICAgICBOdW1iZXJOb2RlKiBudW1i
ZXJOb2RlID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KG4pOwotICAgICAgICBudW1iZXJOb2Rl
LT5zZXRWYWx1ZSgtbnVtYmVyTm9kZS0+dmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBudW1iZXJO
b2RlOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJOb2RlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgTnVtYmVyTm9kZSY+KCpuKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlckZyb21V
bmFyeU9wZXJhdGlvbihsb2NhdGlvbiwgLW51bWJlck5vZGUudmFsdWUoKSwgbnVtYmVyTm9kZSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTmVnYXRlTm9kZShsb2Nh
dGlvbiwgbik7CkBAIC04MDQsNyArODI0LDcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6
Om1ha2VOZWdhdGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHIKIEV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0d2lzZU5vdE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiB7CiAgICAgaWYgKGV4
cHItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIH50
b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByKS0+dmFsdWUoKSkpOworICAgICAg
ICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIH50b0ludDMyKHN0YXRp
Y19jYXN0PE51bWJlck5vZGUqPihleHByKS0+dmFsdWUoKSkpOwogICAgIHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEpIEJpdHdpc2VOb3ROb2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIApAQCAtODEz
LDggKzgzMywxMSBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlcwogICAgIGV4cHIxID0gZXhwcjEt
PnN0cmlwVW5hcnlQbHVzKCk7CiAgICAgZXhwcjIgPSBleHByMi0+c3RyaXBVbmFyeVBsdXMoKTsK
IAotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+
KGV4cHIxKS0+dmFsdWUoKSAqIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVl
KCkpOworICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgewor
ICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJl
ck5vZGUmPigqZXhwcjEpOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9
IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRl
TnVtYmVyRnJvbUJpbmFyeU9wZXJhdGlvbihsb2NhdGlvbiwgbnVtYmVyRXhwcjEudmFsdWUoKSAq
IG51bWJlckV4cHIyLnZhbHVlKCksIG51bWJlckV4cHIxLCBudW1iZXJFeHByMik7CisgICAgfQog
CiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihl
eHByMSktPnZhbHVlKCkgPT0gMSkKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkg
VW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhwcjIpOwpAQCAtODMwLDggKzg1MywxNCBAQCBFeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURpdk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzcwogICAgIGV4cHIxID0gZXhwcjEtPnN0cmlwVW5hcnlQbHVzKCk7
CiAgICAgZXhwcjIgPSBleHByMi0+c3RyaXBVbmFyeVBsdXMoKTsKIAotICAgIGlmIChleHByMS0+
aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51
bWJlcihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSAv
IHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpOworICAgIGlmIChleHBy
MS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1i
ZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOwor
ICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJl
ck5vZGUmPigqZXhwcjIpOworICAgICAgICBkb3VibGUgcmVzdWx0ID0gbnVtYmVyRXhwcjEudmFs
dWUoKSAvIG51bWJlckV4cHIyLnZhbHVlKCk7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ2
NF90PihyZXN1bHQpID09IHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXJG
cm9tQmluYXJ5T3BlcmF0aW9uKGxvY2F0aW9uLCByZXN1bHQsIG51bWJlckV4cHIxLCBudW1iZXJF
eHByMik7CisgICAgICAgIHJldHVybiBjcmVhdGVEb3VibGVMaWtlTnVtYmVyKGxvY2F0aW9uLCBy
ZXN1bHQpOworICAgIH0KICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBEaXZOb2RlKGxv
Y2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCkBAIC04Mzks
MTYgKzg2OCwyMyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU1vZE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzcwogewogICAgIGV4cHIxID0gZXhw
cjEtPnN0cmlwVW5hcnlQbHVzKCk7CiAgICAgZXhwcjIgPSBleHByMi0+c3RyaXBVbmFyeVBsdXMo
KTsKLSAgICAKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkp
Ci0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIGZtb2Qoc3RhdGljX2Nhc3Q8
TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4
cHIyKS0+dmFsdWUoKSkpOworCisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5p
c051bWJlcigpKSB7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3Rh
dGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUm
IG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAg
IHJldHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihsb2NhdGlvbiwgZm1vZChudW1iZXJFeHBy
MS52YWx1ZSgpLCBudW1iZXJFeHByMi52YWx1ZSgpKSk7CisgICAgfQogICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIE1vZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQWRkTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewotICAg
IGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIx
KS0+dmFsdWUoKSArIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpOwor
CisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKSB7CisgICAg
ICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIyID0gc3Rh
dGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAgIHJldHVybiBjcmVhdGVOdW1i
ZXJGcm9tQmluYXJ5T3BlcmF0aW9uKGxvY2F0aW9uLCBudW1iZXJFeHByMS52YWx1ZSgpICsgbnVt
YmVyRXhwcjIudmFsdWUoKSwgbnVtYmVyRXhwcjEsIG51bWJlckV4cHIyKTsKKyAgICB9CiAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQWRkTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIy
LCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIApAQCAtODU3LDUwICs4OTMsNzEgQEAgRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VTdWJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEV4cHJlc3MKICAgICBleHByMSA9IGV4cHIxLT5zdHJpcFVuYXJ5UGx1cygpOwog
ICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7CiAKLSAgICBpZiAoZXhwcjEtPmlz
TnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1i
ZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgLSBz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKKyAgICBpZiAoZXhwcjEt
PmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVy
Tm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAg
ICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlckZyb21CaW5hcnlPcGVy
YXRpb24obG9jYXRpb24sIG51bWJlckV4cHIxLnZhbHVlKCkgLSBudW1iZXJFeHByMi52YWx1ZSgp
LCBudW1iZXJFeHByMSwgbnVtYmVyRXhwcjIpOworICAgIH0KICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBTdWJOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUxlZnRTaGlmdE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIx
LCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKLSAg
ICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJl
dHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSo+KGV4cHIxKS0+dmFsdWUoKSkgPDwgKHRvVUludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUq
PihleHByMiktPnZhbHVlKCkpICYgMHgxZikpOworICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAm
JiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJF
eHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBjb25zdCBO
dW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIp
OworICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIHRvSW50
MzIobnVtYmVyRXhwcjEudmFsdWUoKSkgPDwgKHRvVUludDMyKG51bWJlckV4cHIyLnZhbHVlKCkp
ICYgMHgxZikpOworICAgIH0KICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBMZWZ0U2hp
ZnROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQog
CiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVJpZ2h0U2hpZnROb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7Ci0gICAgaWYgKGV4cHIx
LT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRl
TnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSkt
PnZhbHVlKCkpID4+ICh0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52
YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlz
TnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0
aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYg
bnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51bWJlckV4
cHIxLnZhbHVlKCkpID4+ICh0b1VJbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSAmIDB4MWYpKTsK
KyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUmlnaHRTaGlmdE5vZGUobG9j
YXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlVVJpZ2h0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7Ci0gICAgaWYgKGV4cHIxLT5pc051bWJl
cigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxv
Y2F0aW9uLCB0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgp
KSA+PiAodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkg
JiAweDFmKSk7CisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigp
KSB7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8
TnVtYmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4
cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAgIHJldHVybiBj
cmVhdGVJbnRlZ2VyTGlrZU51bWJlcihsb2NhdGlvbiwgdG9VSW50MzIobnVtYmVyRXhwcjEudmFs
dWUoKSkgPj4gKHRvVUludDMyKG51bWJlckV4cHIyLnZhbHVlKCkpICYgMHgxZikpOworICAgIH0K
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlKGxv
Y2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNz
aW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdE9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAm
JiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlv
biwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSB8IHRv
SW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOworICAgIGlm
IChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25z
dCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhw
cjEpOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0
PE51bWJlck5vZGUmPigqZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VO
dW1iZXIobG9jYXRpb24sIHRvSW50MzIobnVtYmVyRXhwcjEudmFsdWUoKSkgfCB0b0ludDMyKG51
bWJlckV4cHIyLnZhbHVlKCkpKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgQml0T3JOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMp
OwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNz
aW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKLSAgICBpZiAoZXhw
cjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVh
dGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIx
KS0+dmFsdWUoKSkgJiB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZh
bHVlKCkpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkp
IHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxO
dW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhw
cjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51bWJlckV4cHIxLnZhbHVl
KCkpICYgdG9JbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSk7CisgICAgfQogICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEJpdEFuZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmln
aHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtl
Qml0WE9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRz
KQogewotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihzdGF0aWNfY2FzdDxO
dW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSBeIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVy
Tm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOworICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBl
eHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHBy
MSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBjb25zdCBOdW1i
ZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIpOwor
ICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIHRvSW50MzIo
bnVtYmVyRXhwcjEudmFsdWUoKSkgXiB0b0ludDMyKG51bWJlckV4cHIyLnZhbHVlKCkpKTsKKyAg
ICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQml0WE9yTm9kZShsb2NhdGlvbiwg
ZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0xleGVyLmNwcAppbmRleCBmMTNmZTRkZWFjMGVkZTA0MzdjNDkxN2JhNDhmNGYw
Yjk2NTA5YzBlLi4xZWM2N2RmMWI4ZThjMGQ3MzE5NDliMTI3MmE5YmM3NWZmZjgwMTZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcApAQCAtNDk1LDYgKzQ5NSwxMyBAQCBM
ZXhlcjxUPjo6TGV4ZXIoVk0qIHZtLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcykKIHsK
IH0KIAorc3RhdGljIGlubGluZSBKU1Rva2VuVHlwZSB0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRv
a2VuKGRvdWJsZSBkb3VibGVWYWx1ZSkKK3sKKyAgICBpZiAoKGRvdWJsZVZhbHVlIHx8ICFzdGQ6
OnNpZ25iaXQoZG91YmxlVmFsdWUpKSAmJiBzdGF0aWNfY2FzdDxpbnQ2NF90Pihkb3VibGVWYWx1
ZSkgPT0gZG91YmxlVmFsdWUpCisgICAgICAgIHJldHVybiBJTlRFR0VSOworICAgIHJldHVybiBE
T1VCTEU7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogTGV4ZXI8VD46On5MZXhlcigpCiB7
CkBAIC0xNjg3LDcgKzE2OTQsNyBAQCBzdGFydDoKICAgICAgICAgICAgICAgICB0b2tlbiA9IElO
VkFMSURfSEVYX05VTUJFUl9FUlJPUlRPSzsKICAgICAgICAgICAgICAgICBnb3RvIHJldHVybkVy
cm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9rZW4gPSBOVU1CRVI7CisgICAgICAg
ICAgICB0b2tlbiA9IHRva2VuVHlwZUZvckludGVnZXJMaWtlVG9rZW4odG9rZW5EYXRhLT5kb3Vi
bGVWYWx1ZSk7CiAgICAgICAgICAgICBtX2J1ZmZlcjgucmVzaXplKDApOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTE3MDAsMTcgKzE3MDcsMTkgQEAgc3RhcnQ6CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzQVNDSUlPY3RhbERpZ2l0KG1fY3VycmVudCkpIHsKICAgICAgICAg
ICAgIGlmIChwYXJzZU9jdGFsKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpKSB7Ci0gICAgICAgICAg
ICAgICAgdG9rZW4gPSBOVU1CRVI7CisgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblR5cGVG
b3JJbnRlZ2VyTGlrZVRva2VuKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgQ2hhcmFjdGVyTnVt
YmVyOgotICAgICAgICBpZiAoTElLRUxZKHRva2VuICE9IE5VTUJFUikpIHsKKyAgICAgICAgaWYg
KExJS0VMWSh0b2tlbiAhPSBJTlRFR0VSICYmIHRva2VuICE9IERPVUJMRSkpIHsKICAgICAgICAg
ICAgIGlmICghcGFyc2VEZWNpbWFsKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gPSBJTlRFR0VSOwogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQg
PT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgIHNoaWZ0KCk7CiBpbk51bWJlckFmdGVyRGVj
aW1hbFBvaW50OgogICAgICAgICAgICAgICAgICAgICBwYXJzZU51bWJlckFmdGVyRGVjaW1hbFBv
aW50KCk7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gRE9VQkxFOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAoKG1fY3VycmVudCB8IDB4MjApID09ICdlJykgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyQWZ0ZXJFeHBvbmVudEluZGljYXRv
cigpKSB7CkBAIC0xNzIxLDggKzE3MzAsMTAgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsK
ICAgICAgICAgICAgICAgICB0b2tlbkRhdGEtPmRvdWJsZVZhbHVlID0gcGFyc2VEb3VibGUobV9i
dWZmZXI4LmRhdGEoKSwgbV9idWZmZXI4LnNpemUoKSwgcGFyc2VkTGVuZ3RoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHRva2VuID0gTlVNQkVSOworICAgICAgICAgICAgICAgIGlmICh0
b2tlbiA9PSBJTlRFR0VSKQorICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuVHlwZUZv
ckludGVnZXJMaWtlVG9rZW4odG9rZW5EYXRhLT5kb3VibGVWYWx1ZSk7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuVHlwZUZvckludGVnZXJMaWtlVG9r
ZW4odG9rZW5EYXRhLT5kb3VibGVWYWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBObyBp
ZGVudGlmaWVycyBhbGxvd2VkIGRpcmVjdGx5IGFmdGVyIG51bWVyaWMgbGl0ZXJhbCwgZS5nLiAi
M2luIiBpcyBiYWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0
cnVjdG9ycy5oCmluZGV4IDk1MDQwOWFiODFmZWM5ODk5ZTYxZGE1Yzc4NjhlZDU4MzQ3M2U5ZWMu
LjEyZTNkNGQ2Yjg5NTJhMDAxYjQ2YTMxOGIwMDc0ODNiNzU3NmU3MDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC04NCw2ICs4NCwx
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCisgICAgaW5saW5lIERvdWJsZU5v
ZGU6OkRvdWJsZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIHZh
bHVlKQorICAgICAgICA6IE51bWJlck5vZGUobG9jYXRpb24sIHZhbHVlKQorICAgIHsKKyAgICB9
CisKKyAgICBpbmxpbmUgSW50ZWdlck5vZGU6OkludGVnZXJOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBEb3VibGVOb2RlKGxvY2F0
aW9uLCB2YWx1ZSkKKyAgICB7CisgICAgfQorCiAgICAgaW5saW5lIFN0cmluZ05vZGU6OlN0cmlu
Z05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYg
dmFsdWUpCiAgICAgICAgIDogQ29uc3RhbnROb2RlKGxvY2F0aW9uLCBSZXN1bHRUeXBlOjpzdHJp
bmdUeXBlKCkpCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaAppbmRleCAyN2JjM2Y4NDM1NGM0NDBjYmE5OGZmMGVkMDAxNzc4NTg2ZDlmNWI2
Li4zMGVkYjBhZTBjMmRhNTNmM2I0MGY4OTQ2MDMzOGYxOWU5MDk5Mjk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0yMzYsMTYgKzIzNiwzMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBOdW1iZXJOb2RlIDogcHVibGljIENvbnN0YW50Tm9kZSB7CiAgICAgcHVi
bGljOgogICAgICAgICBOdW1iZXJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGRvdWJsZSB2
YWx1ZSk7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICAg
ICAgdm9pZCBzZXRWYWx1ZShkb3VibGUgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAg
ICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgdmly
dHVhbCBib29sIGlzSW50ZWdlck5vZGUoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBp
c051bWJlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVh
bCBib29sIGlzTnVtYmVyKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUganNWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGpzTnVtYmVyKG1fdmFsdWUpOyB9CiAKICAgICAgICAgZG91Ymxl
IG1fdmFsdWU7CiAgICAgfTsKIAorICAgIGNsYXNzIERvdWJsZU5vZGUgOiBwdWJsaWMgTnVtYmVy
Tm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBEb3VibGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGRvdWJsZSB2YWx1ZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNJbnRlZ2VyTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
fTsKKworICAgIC8vIEFuIGludGVnZXIgbm9kZSByZXByZXNlbnQgYSBudW1iZXIgcmVwcmVzZW50
ZWQgYXMgYW4gaW50ZWdlciAoZS5nLiA0MiBpbnN0ZWFkIG9mIDQyLiwgNDIuMCwgNDJlMCkKKyAg
ICBjbGFzcyBJbnRlZ2VyTm9kZSA6IHB1YmxpYyBEb3VibGVOb2RlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEludGVnZXJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGRvdWJsZSB2YWx1ZSk7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIH07CisKICAgICBjbGFzcyBTdHJpbmdOb2RlIDogcHVi
bGljIENvbnN0YW50Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBTdHJpbmdOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBmNGM0YmM1ZDRlM2Y3MmY2MDUxMmJmYzYwNzAxNTZk
MzE2ZmFhYmFjLi42MzE4ZmQ2MzZiZWIzZTdiOTFkMjhmNjQ5NmFlZDlhZjdiZDg3MThjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC02MjksNyArNjI5LDggQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIFBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZUQKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgSlNUb2tlblR5cGUgdG9rZW5UeXBlID0gbV90b2tlbi5tX3R5cGU7CiAgICAgICAgICAg
ICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgTlVN
QkVSOgorICAgICAgICAgICAgICAgIGNhc2UgRE9VQkxFOgorICAgICAgICAgICAgICAgIGNhc2Ug
SU5URUdFUjoKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbShtX3ZtLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU1RSSU5HOgpAQCAtMTk0NSw3ICsxOTQ2
LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlUHJvcGVydHkoVHJlZUIKICAgICAgICAgICAgIGZhaWxXaXRoTWVzc2Fn
ZSgiRXhwZWN0ZWQgYSAnOicgZm9sbG93aW5nIHRoZSBwcm9wZXJ0eSBuYW1lICciLCBpZGVudC0+
aW1wbCgpLCAiJyIpOwogICAgICAgICByZXR1cm4gcGFyc2VHZXR0ZXJTZXR0ZXIoY29udGV4dCwg
Y29tcGxldGUsIHR5cGUsIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwogICAgIH0KLSAgICBj
YXNlIE5VTUJFUjogeworICAgIGNhc2UgRE9VQkxFOgorICAgIGNhc2UgSU5URUdFUjogewogICAg
ICAgICBkb3VibGUgcHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CiAg
ICAgICAgIG5leHQoKTsKICAgICAgICAgY29uc3VtZU9yRmFpbChDT0xPTiwgIkV4cGVjdGVkICc6
JyBhZnRlciBwcm9wZXJ0eSBuYW1lIik7CkBAIC0xOTc5LDcgKzE5ODEsNyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VH
ZXR0ZXJTZXR0ZXIoVAogICAgIGRvdWJsZSBudW1lcmljUHJvcGVydHlOYW1lID0gMDsKICAgICBp
ZiAobV90b2tlbi5tX3R5cGUgPT0gSURFTlQgfHwgbV90b2tlbi5tX3R5cGUgPT0gU1RSSU5HKQog
ICAgICAgICBzdHJpbmdQcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICBl
bHNlIGlmIChtX3Rva2VuLm1fdHlwZSA9PSBOVU1CRVIpCisgICAgZWxzZSBpZiAobV90b2tlbi5t
X3R5cGUgPT0gRE9VQkxFIHx8IG1fdG9rZW4ubV90eXBlID09IElOVEVHRVIpCiAgICAgICAgIG51
bWVyaWNQcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZTsKICAgICBlbHNl
CiAgICAgICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOwpAQCAtMjIyMSwxMSArMjIyMywx
NyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZVByaW1hcnlFeHByZQogICAgICAgICBuZXh0KCk7CiAgICAgICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZVN0cmluZyhsb2NhdGlvbiwgaWRlbnQpOwogICAgIH0KLSAgICBj
YXNlIE5VTUJFUjogeworICAgIGNhc2UgRE9VQkxFOiB7CiAgICAgICAgIGRvdWJsZSBkID0gbV90
b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlv
bih0b2tlbkxvY2F0aW9uKCkpOwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZU51bWJlckV4cHIobG9jYXRpb24sIGQpOworICAgICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVEb3VibGVFeHByKGxvY2F0aW9uLCBkKTsKKyAgICB9CisgICAgY2FzZSBJTlRFR0VS
OiB7CisgICAgICAgIGRvdWJsZSBkID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CisgICAg
ICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOworICAgICAgICBu
ZXh0KCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUludGVnZXJFeHByKGxvY2F0aW9u
LCBkKTsKICAgICB9CiAgICAgY2FzZSBOVUxMVE9LRU46IHsKICAgICAgICAgSlNUb2tlbkxvY2F0
aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CkBAIC0yNTc3LDcgKzI1ODUsOCBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPiB2b2lkIFBhcnNlcjxMZXhlclR5cGU+OjpwcmludFVu
ZXhwZWN0ZWRUb2tlblRleHQoVwogICAgIGNhc2UgU1RSSU5HOgogICAgICAgICBvdXQucHJpbnQo
IlVuZXhwZWN0ZWQgc3RyaW5nIGxpdGVyYWwgIiwgZ2V0VG9rZW4oKSk7CiAgICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIE5VTUJFUjoKKyAgICBjYXNlIElOVEVHRVI6CisgICAgY2FzZSBET1VCTEU6
CiAgICAgICAgIG91dC5wcmludCgiVW5leHBlY3RlZCBudW1iZXIgJyIsIGdldFRva2VuKCksICIn
Iik7CiAgICAgICAgIHJldHVybjsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlclRva2Vucy5oCmluZGV4IDY1MjA1NWE1OGVkNGViM2RlYzhlYWRjZGFiYzQxYmNlYWJh
ZjA5MWUuLjNmZjI3OTg2NmFmNmUyODY5MGJjMDdjNWY3MjFiYzdhMzgwNTZlYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaApAQCAtOTQsNyArOTQsOCBA
QCBlbnVtIEpTVG9rZW5UeXBlIHsKICAgICBDTE9TRUJSQUNLRVQsCiAgICAgQ09NTUEsCiAgICAg
UVVFU1RJT04sCi0gICAgTlVNQkVSLAorICAgIElOVEVHRVIsCisgICAgRE9VQkxFLAogICAgIElE
RU5ULAogICAgIFNUUklORywKICAgICBTRU1JQ09MT04sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmluZGV4IDYzYjEzNDhmZTMwNWRjNDY5YTYxMWZiY2M0
MTA2YWIzODgzZjBkYTIuLjU4ODRmYjI4MmU3NTYxYTY1ODZkMGY2ZTFkYTU5MTUxYjhkNTRhNDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCkBAIC03
MSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgU3ludGF4Q2hlY2tlciBGdW5jdGlv
bkJvZHlCdWlsZGVyOwogICAgIGVudW0geyBOb25lRXhwciA9IDAsCi0gICAgICAgIFJlc29sdmVF
dmFsRXhwciwgUmVzb2x2ZUV4cHIsIE51bWJlckV4cHIsIFN0cmluZ0V4cHIsCisgICAgICAgIFJl
c29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4cHIsIEludGVnZXJFeHByLCBEb3VibGVFeHByLCBTdHJp
bmdFeHByLAogICAgICAgICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHByLCBSZWdFeHBFeHBy
LCBPYmplY3RMaXRlcmFsRXhwciwKICAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIEJy
YWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKICAgICAgICAgTmV3RXhwciwgUHJlRXhwciwg
UG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKQEAgLTE1MSw3ICsxNTEsOCBAQCBwdWJs
aWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9CiAgICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVy
biBBcnJheUxpdGVyYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXJyYXkoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIEFycmF5TGl0ZXJhbEV4cHI7
IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOdW1iZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGRvdWJsZSkgeyByZXR1cm4gTnVtYmVyRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBl
IGNyZWF0ZURvdWJsZUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgZG91YmxlKSB7IHJldHVy
biBEb3VibGVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlSW50ZWdlckV4cHIoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgZG91YmxlKSB7IHJldHVybiBJbnRlZ2VyRXhwcjsgfQogICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZVN0cmluZyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyKikgeyByZXR1cm4gU3RyaW5nRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBl
IGNyZWF0ZUJvb2xlYW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9vbCkgeyByZXR1cm4gQm9v
bEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOdWxsKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYpIHsgcmV0dXJuIE51bGxFeHByOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmgKaW5kZXggYWNhYjNmYTYyNDBhMTExMmFhMTBlMjkzMWU2ZmRjMTE1YTAz
YmRmMS4uOGEyNjFlM2JhMzk3MWU5MWQzZTAxOGZiZmVjNGZlMWE2ODJjZDE2MSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaApAQCAtMTI0LDggKzEyNCwxNSBA
QCBpbmxpbmUgdWludDMyX3QgdG9VSW50MzIoZG91YmxlIG51bWJlcikKIGludDY0X3QgdHJ5Q29u
dmVydFRvSW50NTIoZG91YmxlKTsKIGJvb2wgaXNJbnQ1Mihkb3VibGUpOwogCitlbnVtIGNsYXNz
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiB7CisgICAgT3RoZXIsCisgICAgSW50ZWdlciwKKyAg
ICBEb3VibGUKK307CisKIGNsYXNzIEpTVmFsdWUgewogICAgIGZyaWVuZCBzdHJ1Y3QgRW5jb2Rl
ZEpTVmFsdWVIYXNoVHJhaXRzOworICAgIGZyaWVuZCBzdHJ1Y3QgRW5jb2RlZEpTVmFsdWVXaXRo
UmVwcmVzZW50YXRpb25IYXNoVHJhaXRzOwogICAgIGZyaWVuZCBjbGFzcyBBc3NlbWJseUhlbHBl
cnM7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhD
YWxsOwpAQCAtNDQ4LDcgKzQ1NSwyNiBAQCBzdHJ1Y3QgRW5jb2RlZEpTVmFsdWVIYXNoVHJhaXRz
IDogSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4gewogfTsKICNlbmRpZgogCi10eXBlZGVmIEhh
c2hNYXA8RW5jb2RlZEpTVmFsdWUsIHVuc2lnbmVkLCBFbmNvZGVkSlNWYWx1ZUhhc2gsIEVuY29k
ZWRKU1ZhbHVlSGFzaFRyYWl0cz4gSlNWYWx1ZU1hcDsKK3R5cGVkZWYgc3RkOjpwYWlyPEVuY29k
ZWRKU1ZhbHVlLCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IEVuY29kZWRKU1ZhbHVlV2l0aFJl
cHJlc2VudGF0aW9uOworCitzdHJ1Y3QgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb25I
YXNoVHJhaXRzIDogSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlvbj4g
eworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBz
dGF0aWMgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24gZW1wdHlWYWx1ZSgpIHsgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpLCBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246Ok90aGVyKTsgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0
ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlvbiYgc2xvdCkgeyBzbG90ID0g
c3RkOjptYWtlX3BhaXIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlKSksIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOyB9CisgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRp
b24gdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkpLCBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246Ok90aGVyKTsgfQorfTsKKworc3RydWN0IEVuY29kZWRKU1ZhbHVlV2l0aFJl
cHJlc2VudGF0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRW5jb2Rl
ZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURjo6cGFpckludEhhc2goRW5jb2RlZEpTVmFsdWVIYXNoOjpoYXNoKHZhbHVlLmZpcnN0KSwg
SW50SGFzaDxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+OjpoYXNoKHZhbHVlLnNlY29uZCkpOwor
ICAgIH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBFbmNvZGVkSlNWYWx1ZVdpdGhSZXBy
ZXNlbnRhdGlvbiYgYSwgY29uc3QgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24mIGIp
CisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OwogCiAvLyBTdGFu
ZC1hbG9uZSBoZWxwZXIgZnVuY3Rpb25zLgogaW5saW5lIEpTVmFsdWUganNOdWxsKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJpdGgtYWRkLXdpdGgt
Y29uc3RhbnRzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcml0aC1h
ZGQtd2l0aC1jb25zdGFudHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdiZTQyODJlODA4OTE4NDIxYzIzZTYz
OGVmNTQwZjZhMzc1YzZlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvYXJpdGgtYWRkLXdpdGgtY29uc3RhbnRzLmpzCkBAIC0wLDAgKzEsMjIy
IEBACisvLyBUZXN0IHZhbHVlICsgMC4KK2Z1bmN0aW9uIGFyaXRoQWRkSWRlbnRpdHlXcml0dGVu
QXNJbnRlZ2VyKHgpIHsKKyAgICB2YXIgYSA9IHggKyAwOworICAgIHZhciBiID0gMCArIHg7Cisg
ICAgaWYgKCEoaXNOYU4oeCkgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpICYmIGEgIT09IGIpCisg
ICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvciBvbiBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFz
SW50ZWdlciwgYSA9ICIgKyBhICsgIiBiID0gIiArIGI7CisgICAgcmV0dXJuIGE7Cit9Citub0lu
bGluZShhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcik7CisKK2Z1bmN0aW9uIHRlc3RB
cml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3Jp
dHRlbkFzSW50ZWdlcihpKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gaSkgeworICAgICAgICAg
ICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKGkpID0gIiArIHJlc3Vs
dCArICIsIGV4cGVjdGVkICIgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVu
dGl0eVdyaXR0ZW5Bc0ludGVnZXIoLTApOworICAgICAgICBpZiAocmVzdWx0ICE9PSAtMCkgewor
ICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKC0wKSA9
ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtMCI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciB0ZXN0VmFsdWUgPSBp
ICsgLjU7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50
ZWdlcih0ZXN0VmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICE9PSB0ZXN0VmFsdWUpIHsKKyAg
ICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihpKSA9ICIg
KyByZXN1bHQgKyAiLCBleHBlY3RlZCAiICsgdGVzdFZhbHVlOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKE5hTik7CisgICAgICAgIGlmICgh
aXNOYU4ocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0
dGVuQXNJbnRlZ2VyKE5hTikgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgTmFOIjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAg
ICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihJbmZpbml0
eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAi
YXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpID0gIiArIHJlc3VsdCAr
ICIsIGV4cGVjdGVkIEluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElk
ZW50aXR5V3JpdHRlbkFzSW50ZWdlcigtSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUo
cmVzdWx0KSB8fCByZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRl
bnRpdHlXcml0dGVuQXNJbnRlZ2VyKC1JbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0
ZWQgLUluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RBcml0aEFkZElkZW50aXR5
V3JpdHRlbkFzSW50ZWdlcigpOworCisKK2Z1bmN0aW9uIGFyaXRoQWRkSWRlbnRpdHlXcml0dGVu
QXNEb3VibGUoeCkgeworICAgIHZhciBhID0geCArIDAuMDsKKyAgICB2YXIgYiA9IDAuICsgeDsK
KyAgICBpZiAoIShpc05hTih4KSAmJiBpc05hTihhKSAmJiBpc05hTihiKSkgJiYgYSAhPT0gYikK
KyAgICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yIG9uIGFyaXRoQWRkSWRlbnRpdHlXcml0dGVu
QXNEb3VibGUsIGEgPSAiICsgYSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9J
bmxpbmUoYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSk7CisKK2Z1bmN0aW9uIHRlc3RB
cml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0
dGVuQXNEb3VibGUoaSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IGkpIHsKKyAgICAgICAgICAg
IHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKGkpID0gIiArIHJlc3VsdCAr
ICIsIGV4cGVjdGVkICIgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0
eVdyaXR0ZW5Bc0RvdWJsZSgtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IC0wKSB7CisgICAg
ICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgtMCkgPSAiICsg
cmVzdWx0ICsgIiwgZXhwZWN0ZWQgLTAgIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHRlc3RWYWx1ZSA9IGkgKyAu
NTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUo
dGVzdFZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gdGVzdFZhbHVlKSB7CisgICAgICAg
ICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShpKSA9ICIgKyByZXN1
bHQgKyAiLCBleHBlY3RlZCAiICsgdGVzdFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFy
aXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoTmFOKTsKKyAgICAgICAgaWYgKCFpc05hTihy
ZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0Rv
dWJsZShOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIg
cmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSk7CisgICAg
ICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGRJ
ZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0
ZWQgSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0
dGVuQXNEb3VibGUoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwg
cmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRl
bkFzRG91YmxlKC1JbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLUluZmluaXR5
IjsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RBcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91
YmxlKCk7CisKKworLy8gVGVzdCAidmFsdWUgKyA0MiIuCitmdW5jdGlvbiBhcml0aEFkZDQyV3Jp
dHRlbkFzSW50ZWdlcih4KSB7CisgICAgdmFyIGEgPSB4ICsgNDI7CisgICAgdmFyIGIgPSA0MiAr
IHg7CisgICAgaWYgKCEoaXNOYU4oeCkgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpICYmIGEgIT09
IGIpCisgICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvciBvbiBhcml0aEFkZDQyV3JpdHRlbkFz
SW50ZWdlciwgYSA9ICIgKyBhICsgIiBiID0gIiArIGI7CisgICAgcmV0dXJuIGE7Cit9Citub0lu
bGluZShhcml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcik7CisKK2Z1bmN0aW9uIHRlc3RBcml0aEFk
ZDQyV3JpdHRlbkFzSW50ZWdlcigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcigxMyk7
CisgICAgICAgIGlmIChyZXN1bHQgIT09IDU1KSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhB
ZGQ0MldyaXR0ZW5Bc0ludGVnZXIoMTMpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDU1IjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKC0wKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPT0gNDIpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQy
V3JpdHRlbkFzSW50ZWdlcigtMCkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNDIiOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoMTMuMyk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT09IDU1LjMpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQy
V3JpdHRlbkFzSW50ZWdlcigxMy4zKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCA1NS4zIjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7
CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcihOYU4pOwor
ICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFk
ZDQyV3JpdHRlbkFzSW50ZWdlcihOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7
OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoSW5maW5p
dHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cg
ImFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBl
eHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0
ZW5Bc0ludGVnZXIoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwg
cmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzSW50
ZWdlcigtSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7Cisg
ICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoKTsKKwor
CitmdW5jdGlvbiBhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKHgpIHsKKyAgICB2YXIgYSA9IHgg
KyA0Mi4wOworICAgIHZhciBiID0gNDIuICsgeDsKKyAgICBpZiAoIShpc05hTih4KSAmJiBpc05h
TihhKSAmJiBpc05hTihiKSkgJiYgYSAhPT0gYikKKyAgICAgICAgdGhyb3cgIkludGVybmFsIGVy
cm9yIG9uIGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUsIGEgPSAiICsgYSArICIgYiA9ICIgKyBi
OworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZSk7
CisKK2Z1bmN0aW9uIHRlc3RBcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKCkgeworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRk
NDJXcml0dGVuQXNEb3VibGUoMTMpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1NSkgeworICAg
ICAgICAgICAgdGhyb3cgImFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoaSkgPSAiICsgcmVzdWx0
ICsgIiwgZXhwZWN0ZWQgNTUiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0
ZW5Bc0RvdWJsZSgtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDQyKSB7CisgICAgICAgICAg
ICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZSgtMCkgPSAiICsgcmVzdWx0ICsgIiwg
ZXhwZWN0ZWQgNDIiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0Rv
dWJsZSgxMy4zKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNTUuMykgeworICAgICAgICAgICAg
dGhyb3cgImFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoMTMuMykgPSAiICsgcmVzdWx0ICsgIiwg
ZXhwZWN0ZWQgNTUuMyI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5B
c0RvdWJsZShOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAg
IHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKE5hTikgPSAiICsgcmVzdWx0ICsgIiwg
ZXhwZWN0ZWQgTmFOIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQyV3JpdHRlbkFz
RG91YmxlKEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkpIHsKKyAgICAg
ICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKEluZmluaXR5KSA9ICIgKyBy
ZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJp
dGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZSgtSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUo
cmVzdWx0KSB8fCByZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkNDJX
cml0dGVuQXNEb3VibGUoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtSW5m
aW5pdHkiOworICAgICAgICB9CisgICAgfQorfQordGVzdEFyaXRoQWRkNDJXcml0dGVuQXNEb3Vi
bGUoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FyaXRoLW11bC13aXRoLWNvbnN0YW50cy5qcyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJpdGgtbXVsLXdpdGgtY29uc3RhbnRz
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjE1NmFiNzllNGUzNjVmNzRjZjRhMmYyMDdmNGY1MzMyYTMwNzBkOTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Fy
aXRoLW11bC13aXRoLWNvbnN0YW50cy5qcwpAQCAtMCwwICsxLDIyMiBAQAorLy8gVGVzdCB2YWx1
ZSAqIDEuCitmdW5jdGlvbiBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcih4KSB7Cisg
ICAgdmFyIGEgPSB4ICogMTsKKyAgICB2YXIgYiA9IDEgKiB4OworICAgIGlmICghKGlzTmFOKHgp
ICYmIGlzTmFOKGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50
ZXJuYWwgZXJyb3Igb24gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIsIGEgPSAiICsg
YSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhNdWxJZGVu
dGl0eVdyaXR0ZW5Bc0ludGVnZXIpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhNdWxJZGVudGl0eVdy
aXR0ZW5Bc0ludGVnZXIoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoaSk7
CisgICAgICAgIGlmIChyZXN1bHQgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11
bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihpKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAi
ICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRl
Z2VyKC0wKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gLTApIHsKKyAgICAgICAgICAgIHRocm93
ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigtMCkgPSAiICsgcmVzdWx0ICsgIiwg
ZXhwZWN0ZWQgLTAiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgdGVzdFZhbHVlID0gaSArIC41OworICAgICAgICB2
YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIodGVzdFZhbHVlKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAhPT0gdGVzdFZhbHVlKSB7CisgICAgICAgICAgICB0aHJvdyAi
YXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhw
ZWN0ZWQgIiArIHRlc3RWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50
aXR5V3JpdHRlbkFzSW50ZWdlcihOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsK
KyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihOYU4p
ID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0g
YXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpOworICAgICAgICBpZiAo
aXNGaW5pdGUocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlX
cml0dGVuQXNJbnRlZ2VyKEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZp
bml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsg
KytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0lu
dGVnZXIoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwgcmVzdWx0
ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50
ZWdlcigtSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7Cisg
ICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIo
KTsKKworCitmdW5jdGlvbiBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKHgpIHsKKyAg
ICB2YXIgYSA9IHggKiAxLjA7CisgICAgdmFyIGIgPSAxLiAqIHg7CisgICAgaWYgKCEoaXNOYU4o
eCkgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpICYmIGEgIT09IGIpCisgICAgICAgIHRocm93ICJJ
bnRlcm5hbCBlcnJvciBvbiBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlLCBhID0gIiAr
IGEgKyAiIGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsKK30KK25vSW5saW5lKGFyaXRoTXVsSWRl
bnRpdHlXcml0dGVuQXNEb3VibGUpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhNdWxJZGVudGl0eVdy
aXR0ZW5Bc0RvdWJsZSgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKGkpOwor
ICAgICAgICBpZiAocmVzdWx0ICE9PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJ
ZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShpKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAiICsg
aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUo
LTApOworICAgICAgICBpZiAocmVzdWx0ICE9PSAtMCkgeworICAgICAgICAgICAgdGhyb3cgImFy
aXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVj
dGVkIC0wICI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NDsgKytpKSB7CisgICAgICAgIHZhciB0ZXN0VmFsdWUgPSBpICsgLjU7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKHRlc3RWYWx1ZSk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT09IHRlc3RWYWx1ZSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRo
TXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQg
IiArIHRlc3RWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3Jp
dHRlbkFzRG91YmxlKE5hTik7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkgeworICAgICAg
ICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoTmFOKSA9ICIgKyBy
ZXN1bHQgKyAiLCBleHBlY3RlZCBOYU4iOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVs
SWRlbnRpdHlXcml0dGVuQXNEb3VibGUoSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUo
cmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNE
b3VibGUoSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIEluZmluaXR5IjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKC1JbmZp
bml0eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJlc3VsdCA+PSAwKSB7Cisg
ICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgtSW5maW5p
dHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7CisgICAgICAgIH0KKyAg
ICB9Cit9Cit0ZXN0QXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgpOworCisKKy8vIFRl
c3QgInZhbHVlICogNDIiLgorZnVuY3Rpb24gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoeCkg
eworICAgIHZhciBhID0geCAqIDQyOworICAgIHZhciBiID0gNDIgKiB4OworICAgIGlmICghKGlz
TmFOKHgpICYmIGlzTmFOKGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJv
dyAiSW50ZXJuYWwgZXJyb3Igb24gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIsIGEgPSAiICsg
YSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhNdWw0Mldy
aXR0ZW5Bc0ludGVnZXIpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVn
ZXIoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoMTMpOworICAgICAgICBpZiAocmVz
dWx0ICE9PSA1NDYpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzSW50
ZWdlcigxMykgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTQ2IjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKC0wKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPT0gLTApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdl
cigtMCkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLTAiOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoMTMuMyk7CisgICAgICAgIGlmIChyZXN1bHQg
IT09IDU1OC42KSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVn
ZXIoMTMuMykgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTU4LjYiOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKE5hTik7CisgICAgICAgIGlmICgh
aXNOYU4ocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNJ
bnRlZ2VyKE5hTikgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgTmFOIjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZh
ciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcihJbmZpbml0eSk7CisgICAgICAg
IGlmIChpc0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWw0Mldy
aXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIEluZmlu
aXR5IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcigt
SW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSB8fCByZXN1bHQgPj0gMCkg
eworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKC1JbmZpbml0
eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLUluZmluaXR5IjsKKyAgICAgICAgfQorICAg
IH0KK30KK3Rlc3RBcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcigpOworCisKK2Z1bmN0aW9uIGFy
aXRoTXVsNDJXcml0dGVuQXNEb3VibGUoeCkgeworICAgIHZhciBhID0geCAqIDQyLjA7CisgICAg
dmFyIGIgPSA0Mi4gKiB4OworICAgIGlmICghKGlzTmFOKHgpICYmIGlzTmFOKGEpICYmIGlzTmFO
KGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3Igb24gYXJpdGhN
dWw0MldyaXR0ZW5Bc0RvdWJsZSwgYSA9ICIgKyBhICsgIiBiID0gIiArIGI7CisgICAgcmV0dXJu
IGE7Cit9Citub0lubGluZShhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKTsKKworZnVuY3Rpb24g
dGVzdEFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0Rv
dWJsZSgxMyk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDU0NikgeworICAgICAgICAgICAgdGhy
b3cgImFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0
ZWQgNTQ2IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0
OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUo
LTApOworICAgICAgICBpZiAocmVzdWx0ICE9PSAtMCkgeworICAgICAgICAgICAgdGhyb3cgImFy
aXRoTXVsNDJXcml0dGVuQXNEb3VibGUoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC0w
IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoMTMuMyk7
CisgICAgICAgIGlmIChyZXN1bHQgIT09IDU1OC42KSB7CisgICAgICAgICAgICB0aHJvdyAiYXJp
dGhNdWw0MldyaXR0ZW5Bc0RvdWJsZSgxMy4zKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCA1
NTguNiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsg
KytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJsZShO
YU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJh
cml0aE11bDQyV3JpdHRlbkFzRG91YmxlKE5hTikgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQg
TmFOIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKElu
ZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRo
cm93ICJhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAi
LCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0Mldy
aXR0ZW5Bc0RvdWJsZSgtSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSB8
fCByZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNE
b3VibGUoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtSW5maW5pdHkiOwor
ICAgICAgICB9CisgICAgfQorfQordGVzdEFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoKTsKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247565</attachid>
            <date>2015-02-27 15:42:09 -0800</date>
            <delta_ts>2015-02-27 16:36:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142072-20150227154154.patch</filename>
            <type>text/plain</type>
            <size>73439</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MzZlMjI5ODVkMmQ5ZmE4ZjkzN2JkNzVlYTRlYjJiNGEyNDA4MTQ1Li5kNGY0YWZiNGQ5OTE3NGMy
ZWE2ZDYzOTEzZmIwODM4N2M0YWQyZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjYgQEAKKzIwMTUtMDItMjYgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0pTQ10gVXNlIHRoZSB3YXkgbnVtYmVyIGNvbnN0YW50cyBhcmUg
d3JpdHRlbiB0byBoZWxwIHR5cGUgc3BlY3VsYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjA3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgd2UgaW50ZXJw
cmV0IG51bWVyaWMgY29uc3RhbnQgYmFzZWQgb24gaG93IHRoZXkgYXBwZWFyCisgICAgICAgIGlu
IHRoZSBzb3VyY2UuCisKKyAgICAgICAgQ29uc3RhbnRzIHRoYXQgYXJlIGludGVnZXJzIGJ1dCB3
cml0dGVuIHdpdGggYSBkZWNpbWFsIHBvaW50IG5vdyBjYXJyeSB0aGF0IGluZm9ybWF0aW9uCisg
ICAgICAgIHRvIHRoZSBvcHRpbWl6YXRpbmcgdGllcnMuIEZyb20gdGhlcmUsIHdlIHVzZSB0aGF0
IHRvIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCB0eXBpbmcKKyAgICAgICAgbWF0aCBvcGVyYXRp
b25zIHRvd2FyZCBkb3VibGUgb3BlcmF0aW9ucy4KKworICAgICAgICBGb3IgZXhhbXBsZSwgaW46
CisgICAgICAgICAgICB2YXIgYSA9IHggKyAxLjA7CisgICAgICAgICAgICB2YXIgYiA9IHkgKyAx
OworICAgICAgICBUaGUgQWRkIGZvciBhIHdvdWxkIGJlIGJpYXNlZCB0b3dhcmQgZG91Ymxlcywg
dGhlIEFkZCBmb3IgYiB3b3VsZCBzcGVjdWxhdGUKKyAgICAgICAgaW50ZWdlciBhcyB1c3VhbC4K
KworCisgICAgICAgIFRoZSBnYWlucyBhcmUgdGlueSBidXQgdGhpcyBpcyBhIHByZXJlcXVpc2l0
ZSB0byBtYWtlIG15IG5leHQgcGF0Y2ggdXNlZnVsOgorICAgICAgICAtU3VuU3BpZGVyJ3MgYWNj
ZXNzLWZhbm5rdWNoOiBkZWZpbml0ZWx5IDEuMDY2MXggZmFzdGVyCisgICAgICAgIC1TdW5TcGlk
ZXIncyBtYXRoLWNvcmRpYzogZGVmaW5pdGVseSAxLjAyNjZ4IHNsb3dlcgorICAgICAgICAgICAg
b3ZlcmFsOiBtaWdodCBiZSAxLjAwNjZ4IHNsb3dlci4KKyAgICAgICAgLUtyYWtlbidzIGltYWdp
bmctZGFya3Jvb206IGRlZmluaXRlbHkgMS4wMzMzeCBmYXN0ZXIuCisKKyAgICAgICAgKiBwYXJz
ZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjp0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2Vu
KToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OmxleCk6CisgICAgICAgIFRoZSBsZXhlciBub3cg
Y3JlYXRlIHR3byB0eXBlcyBvZiB0b2tlbnMgZm9yIG51bWJlcjogSU5URUdFUiBhbmQgRE9VQkxF
LgorICAgICAgICBUaG9zZSB0b2tlbiB0eXBlcyBvbmx5IGNhcnJ5IGluZm9ybWF0aW9uIGFib3V0
IGhvdyB0aGUgdmFsdWVzIHdlcmUKKyAgICAgICAgZW50ZXJlZCwgYW4gSU5URUdFUiBkb2VzIG5v
dCBoYXZlIHRvIGJlIGFuIGludGVnZXIsIGl0IGlzIG9ubHkgd3JpdHRlbiBsaWtlIG9uZS4KKyAg
ICAgICAgTGFyZ2UgaW50ZWdlciBzdGlsbCBlbmQgdXAgcmVwcmVzZW50ZWQgYXMgZG91YmxlIGlu
IG1lbW9yeS4KKworICAgICAgICBPbmUgdHJhcCBJIGZlbGwgaW50byB3YXMgdHlwaW5nIG51bWJl
cnMgbGlrZSAxMmUzIGFzIGRvdWJsZS4gVGhpcyBraW5kIG9mIGxpdGVyYWwKKyAgICAgICAgaXMg
ZnJlcXVlbnRseSB1c2VkIGluIGludGVnZXItdHlwZWQgY29kZSwgd2hpbGUgMTIuZTMgd291bGQg
YXBwZWFyIGluIGRvdWJsZS10eXBlZAorICAgICAgICBjb2RlLgorICAgICAgICBCZWNhdXNlIG9m
IHRoYXQsIHRoZSBvbmx5IHNpZ25hbHMgZm9yIGRvdWJsZSBhcmU6IGRlY2ltYWwgcG9pbnQsIG5l
Z2F0aXZlIHplcm8sCisgICAgICAgIGFuZCByaWRpY3Vsb3VzbHkgbGFyZ2UgdmFsdWVzLgorCisg
ICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6RG91Ymxl
Tm9kZTo6RG91YmxlTm9kZSk6CisgICAgICAgIChKU0M6OkludGVnZXJOb2RlOjpJbnRlZ2VyTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6Ok51bWJlck5vZGU6
OnZhbHVlKToKKyAgICAgICAgKEpTQzo6TnVtYmVyTm9kZTo6c2V0VmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICBOdW1iZXIgZ2V0IHNwZWNpYWxpemVkIGluIHR3byBuZXcga2luZCBvZiBub2RlcyBp
biB0aGUgQVNUOiBJbnRlZ2VyTm9kZSBhbmQgRG91YmxlTm9kZS4KKworICAgICAgICAqIGJ5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG91YmxlRXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZUludGVnZXJFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
SW50ZWdlckxpa2VOdW1iZXIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3Vi
bGVMaWtlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlTnVtYmVyRnJv
bUJpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJl
ckZyb21VbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdh
dGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtl
TW9kTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VS
aWdodFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlm
dE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZU51bWJlckV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVO
dW1iZXIpOiBEZWxldGVkLgorICAgICAgICBUaGUgQVNUIGhhcyBzb21lIG9wdGltaXphdGlvbiB0
byByZXNvbHZlIGNvbnN0YW50cyBiZWZvcmUgZW1pdHRpbmcgYnl0ZWNvZGUuCisgICAgICAgIElu
IHRoZSBuZXcgY29kZSwgdGhlIGludGdlciByZXByZXNlbnRhdGlvbiBpcyBrZXB0IGlmIGJvdGgg
b3BlcmFuZHMgd2hlcmUKKyAgICAgICAgYWxzbyByZXByZXNlbnRlZCBhcyBpbnRlZ2Vycy4KKwor
ICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4pOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnByaW50VW5leHBlY3RlZFRva2VuVGV4dCk6CisgICAgICAgICogcGFyc2VyL1BhcnNlclRv
a2Vucy5oOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZURvdWJsZUV4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjpjcmVhdGVJbnRlZ2VyRXhwcik6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
OmNyZWF0ZU51bWJlckV4cHIpOiBEZWxldGVkLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdpc3Rlck5hbWUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50TmFtZSk6CisgICAgICAgIENoYW5nZSBjb25zdGFu
dE5hbWUociwgZ2V0Q29uc3RhbnQocikpIC0+IGNvbnN0YW50TmFtZShyKSB0byBzaW1wbGlmeQor
ICAgICAgICB0aGUgZHVtcCBjb2RlLgorCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5
dGVjb2RlKToKKyAgICAgICAgRHVtcCB0aHJlIHNvdXJlIHJlcHJlc2VudGF0aW9uIGluZm9ybWF0
aW9uIHdlIGhhdmUgd2l0aCBlYWNoIGNvbnN0YW50LgorCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6Cisg
ICAgICAgIChKU0M6OmNvbnN0YW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnRMYXppbHkpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisKKyAgICAgICAgKiBi
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJv
bVZhbHVlKToKKyAgICAgICAgVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgY29tZXMgaW4uIFdoZW4g
aW50ZWdlciB2YWx1ZXMgd2VyZSByZXByZXNlbnRlZCBhcyBkb3VibGUsCisgICAgICAgIHNwZWN1
bGF0ZSBmdWxsIG51bWJlciBpbnN0ZWFkIG9mIEludDMyL0ludDUyLgorCisgICAgICAgICogYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNocmlua1RvRml0
KToKKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgV2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRl
IGJldHdlZW4gY29uc3RhbnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYnV0IGFyZQorICAg
ICAgICByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiB0aGUgc291cmNlLiBWYWx1ZXMgbGlrZSAx
LjAgYW5kIDEgbm93IGVuZCB1cAorICAgICAgICBhcyBkaWZmZXJlbnQgY29uc3RhbnRzLgorCisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
YWRkQ29uc3RhbnRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckZyb3plblZhbHVlcyk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZFNwZWN1bGF0aW9uTW9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0
ZUludDMyKToKKyAgICAgICAgQXJpdGhBZGQgaXMgdmVyeSBhZ2dyZXNzaXZlIHRvd2FyZCB1c2lu
ZyBJbnQ1Miwgd2hpY2ggaXMgcXVpdGUgdXNlZnVsCisgICAgICAgIGluIG1hbnkgYmVuY2htYXJr
cy4KKworICAgICAgICBIZXJlIHdlIG5lZWQgdG8gc3BlY2lhbGl6ZSB0byBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgZm9yY2Ugb3VyIGxpdGVyYWxzCisgICAgICAgIHRvIEludDUyIGlmIHRoZXJlIHdlcmUg
cmVwcmVzZW50ZWQgYXMgZG91YmxlLgorCisgICAgICAgIFRoZXJlIGlzIG9uZSBleGNlcHRpb24g
dG8gdGhhdCBydWxlOiB3aGVuIHRoZSBvdGhlciBvcGVyYW5kIGlzIGd1YXJhbnRlZWQKKyAgICAg
ICAgdG8gY29tZSBmcm9tIGEgTm9kZVJlc3VsdEludDMyLiBUaGlzIGlzIGJlY2F1c2UgdGhlcmUg
aXMgc29tZSB3ZWlyZCBjb2RlCisgICAgICAgIGRvaW5nIHN0dWZmIGxpa2U6CisgICAgICAgICAg
ICB2YXIgYiA9IGF8MDsKKyAgICAgICAgICAgIHZhciBjID0gYioyLjA7CisKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnNldE9wQW5kRGVmYXVsdEZsYWdzKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGRmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlLmg6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFz
aFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJl
cHJlc2VudGF0aW9uSGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6RW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb25IYXNoVHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9u
SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0
aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcml0aC1hZGQtd2l0aC1j
b25zdGFudHMuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcml0aC1tdWwtd2l0
aC1jb25zdGFudHMuanM6IEFkZGVkLgorCiAyMDE1LTAyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIFNTQSBzdGFjayBhY2Nlc3NlcyBzaG91bGRuJ3Qg
c3BlYWsgb2YgVmFyaWFibGVBY2Nlc3NEYXRhcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBlZjBhZDRlNjIyYjY4YTI1MzBhMThlYTJhODdiOTRm
YzI5M2NiZThkLi5jMWEyMGNiMjgxNjVkZGUxNjJhYjUzZDQzZWM4NDVjZDlkZTQ0MzlhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTcyLDEx
ICsxNzIsNiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgIGR1bXBBc3N1bWluZ0pJVFR5cGUob3V0LCBqaXRUeXBlKCkpOwogfQogCi1zdGF0aWMgQ1N0
cmluZyBjb25zdGFudE5hbWUoaW50IGssIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
Q1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIoayksICIpIik7Ci19Ci0KIHN0YXRp
YyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAg
ICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwoKSwgIihAaWQiLCBpZDAsICIpIik7CkBAIC0x
ODUsMTEgKzE4MCwxNyBAQCBzdGF0aWMgQ1N0cmluZyBpZE5hbWUoaW50IGlkMCwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpCiBDU3RyaW5nIENvZGVCbG9jazo6cmVnaXN0ZXJOYW1lKGludCByKSBj
b25zdAogewogICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChyKSkKLSAgICAgICAgcmV0
dXJuIGNvbnN0YW50TmFtZShyLCBnZXRDb25zdGFudChyKSk7CisgICAgICAgIHJldHVybiBjb25z
dGFudE5hbWUocik7CiAKICAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7
CiB9CiAKK0NTdHJpbmcgQ29kZUJsb2NrOjpjb25zdGFudE5hbWUoaW50IGluZGV4KSBjb25zdAor
eworICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25zdGFudChpbmRleCk7CisgICAgcmV0dXJuIHRv
Q1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLCAiKSIpOworfQorCiBz
dGF0aWMgQ1N0cmluZyByZWdleHBUb1NvdXJjZVN0cmluZyhSZWdFeHAqIHJlZ0V4cCkKIHsKICAg
ICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwgMCB9OwpAQCAtNjA2LDcgKzYwNywx
OSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
ICAgIG91dC5wcmludGYoIlxuQ29uc3RhbnRzOlxuIik7CiAgICAgICAgIHNpemVfdCBpID0gMDsK
ICAgICAgICAgZG8gewotICAgICAgICAgICAgb3V0LnByaW50ZigiICAgayV1ID0gJXNcbiIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgdG9DU3RyaW5nKG1fY29uc3RhbnRSZWdpc3RlcnNbaV0u
Z2V0KCkpLmRhdGEoKSk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb25EZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHN3aXRjaCAobV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb25baV0pIHsKKyAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgICAgICAgICAgc291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uRGVzY3JpcHRpb24gPSAiOiBpbiBzb3VyY2UgYXMgZG91YmxlIjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJ
bnRlZ2VyOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0
aW9uID0gIjogaW4gc291cmNlIGFzIGludGVnZXIiOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgorICAgICAg
ICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gIiI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIgICBrJXUgPSAlcyVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSksIHRvQ1N0cmluZyht
X2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKS5kYXRhKCksIHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbkRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8
IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICB9CkBAIC0xNDQ5LDcgKzE0NjIsNyBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgaW50IGswID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBKU05hbWVTY29wZTo6VHlwZSBzY29wZVR5cGUg
PSAoSlNOYW1lU2NvcGU6OlR5cGUpKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXNoX25hbWVfc2NvcGUi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgY29uc3RhbnROYW1lKGswLCBn
ZXRDb25zdGFudChrMCkpLmRhdGEoKSwgKHNjb3BlVHlwZSA9PSBKU05hbWVTY29wZTo6RnVuY3Rp
b25OYW1lU2NvcGUpID8gImZ1bmN0aW9uU2NvcGUiIDogKChzY29wZVR5cGUgPT0gSlNOYW1lU2Nv
cGU6OkNhdGNoU2NvcGUpID8gImNhdGNoU2NvcGUiIDogInVua25vd25TY29wZVR5cGUiKSk7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGNvbnN0YW50TmFtZShrMCkuZGF0YSgp
LCAoc2NvcGVUeXBlID09IEpTTmFtZVNjb3BlOjpGdW5jdGlvbk5hbWVTY29wZSkgPyAiZnVuY3Rp
b25TY29wZSIgOiAoKHNjb3BlVHlwZSA9PSBKU05hbWVTY29wZTo6Q2F0Y2hTY29wZSkgPyAiY2F0
Y2hTY29wZSIgOiAidW5rbm93blNjb3BlVHlwZSIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKQEAgLTE0NjYsNyArMTQ3OSw3IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBpbnQgazAgPSAoKytpdCkt
PnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBrMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhy
b3dfc3RhdGljX2Vycm9yIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCBjb25z
dGFudE5hbWUoazAsIGdldENvbnN0YW50KGswKSkuZGF0YSgpLCBrMSA/ICJ0cnVlIiA6ICJmYWxz
ZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgY29uc3RhbnROYW1lKGswKS5k
YXRhKCksIGsxID8gInRydWUiIDogImZhbHNlIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CkBAIC0xNjM5LDYgKzE2NTIsNyBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCiAg
ICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5tX2ZpcnN0TGluZUNvbHVtbk9mZnNl
dCkKICAgICAsIG1fY29kZVR5cGUob3RoZXIubV9jb2RlVHlwZSkKICAgICAsIG1fY29uc3RhbnRS
ZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykKKyAgICAsIG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKICAg
ICAsIG1fZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1bmN0aW9uRXhwcnMpCiAgICAgLCBtX29zckV4
aXRDb3VudGVyKDApCkBAIC0xNzMwLDcgKzE3NDQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxp
bgogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2Zp
bGVyKCkpCiAgICAgICAgIHZtKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5yZW1vdmVV
bmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIG1fb3duZXJFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgbV9vd25lckV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAKLSAgICBzZXRDb25zdGFudFJlZ2lzdGVycyh1bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSk7CisgICAgc2V0Q29uc3RhbnRSZWdp
c3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSk7CiAgICAgaWYgKHVu
bGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCiAgICAgICAgIG1fY29uc3RhbnRS
ZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25z
dGFudEluZGV4KCldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVjdC5n
ZXQoKSk7CiAgICAgbV9mdW5jdGlvbkRlY2xzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CkBAIC0yOTgwLDYgKzI5OTQsNyBAQCB2b2lkIENv
ZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQogICAgIAogICAgIGlm
IChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24uc2hyaW5rVG9GaXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3JhcmVEYXRhKSB7
CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCAwNzI5
M2UwM2QwN2RhNWM3NzBmMmQyOTg4NzVjMjliNTk0OGRlNzc3Li42MWFiM2JkYjM5ZGEzZTgzODJh
YTA2Yzk5MzcwZDZlOTRlM2ZlYzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCkBAIC02MjgsMTIgKzYyOCwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMoKSB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzOyB9CisgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRS
ZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgfQog
ICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikKICAgICB7CiAgICAgICAgIHVuc2ln
bmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0
YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CiAgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgbV9vd25l
ckV4ZWN1dGFibGUuZ2V0KCksIHYpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC02NDEsNiArNjQzLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXpl
KCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtu
b3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBw
ZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIApAQCAtNjQ5LDYgKzY1Miw3IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CiAgICAg
QUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29u
c3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhd
LmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2wo
aW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAg
aW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXpl
KCk7IH0KQEAgLTk4MywxMiArOTg3LDE0IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUFs
bFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7
CiAKLSAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudHMpCisgICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhj
b25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0
b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbnN0YW50cy5zaXplKCkgPT0gY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNpemUoKSk7CiAgICAgICAgIHNpemVfdCBjb3Vu
dCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVzaXpl
KGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAg
ICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJs
ZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKICAgICB9
CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZSgKQEAgLTk5Niw2ICsxMDAyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExp
bmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKIAogICAgIENTdHJpbmcgcmVnaXN0ZXJO
YW1lKGludCByKSBjb25zdDsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNv
bnN0OwogICAgIHZvaWQgcHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50
IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAgdm9p
ZCBwcmludEJpbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBj
b25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAgdm9pZCBwcmludENvbmRp
dGlvbmFsSnVtcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiwgaW50IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCk7CkBAIC0x
MDkzLDYgKzExMDAsNyBAQCBwcml2YXRlOgogICAgIC8vIFRPRE86IFRoaXMgY291bGQganVzdCBi
ZSBhIHBvaW50ZXIgdG8gbV91bmxpbmtlZENvZGVCbG9jaydzIGRhdGEsIGJ1dCB0aGUgREZHIG11
dGF0ZXMKICAgICAvLyBpdCwgc28gd2UncmUgc3R1Y2sgd2l0aCBpdCBmb3Igbm93LgogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgVmVj
dG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBt
X2Z1bmN0aW9uRGVjbHM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFi
bGU+PiBtX2Z1bmN0aW9uRXhwcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMDhjNzI5NzM2NTI5YjEzN2JkYzNiNGE5
MDQzYTk5Y2Q3YzYxMDVmNi4uYzdkMmRhNTUxZTM3OTgwYjJiMGE3MzEyMzRkNGQ4YWNlZDU1ZGYw
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKQEAgLTMxOCwxMSArMzE4LDEyIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8
SWRlbnRpZmllcj4mIGlkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsg
fQogCiAgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50
KEpTVmFsdWUgdikKKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246Ok90aGVyKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBw
ZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVy
cy5sYXN0KCkuc2V0KCptX3ZtLCB0aGlzLCB2KTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHVuc2lnbmVkIGFkZE9yRmluZENvbnN0YW50
KEpTVmFsdWUpOwpAQCAtMzMwLDYgKzMzMSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhd
OyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7
IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICAvLyBKdW1wcwogICAgIHNp
emVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5z
aXplKCk7IH0KQEAgLTM0Nyw2ICszNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fanVtcFRhcmdl
dHMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9pZGVudGlmaWVycy5zaHJpbmtUb0ZpdCgpOwog
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1f
ZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuc2hy
aW5rVG9GaXQoKTsKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtU
b0ZpdCgpOwpAQCAtNTQ0LDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgLy8gQ29uc3RhbnQgUG9v
bHMKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKICAgICBWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOworICAgIFZlY3RvcjxTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OwogICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25W
ZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwogICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciBtX2Z1
bmN0aW9uRXhwcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDIxNDAyZWJlZWQxNTFhNWFmZDAyNTVm
NDNlMjgzYzBiZTgwYWZmZjMuLmMwYjBiYmM5MzZmY2IwMTdmYzE3NjA5MWY3MzhiYWIyYWNjYmVk
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC05ODIsMTcgKzk4MiwxOSBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRFbXB0eVZhbHVlKCkKICAgICByZXR1cm4gbV9l
bXB0eVZhbHVlUmVnaXN0ZXI7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBh
ZGRDb25zdGFudEVtcHR5VmFsdWUoKTsKIAogICAgIGludCBpbmRleCA9IG1fbmV4dENvbnN0YW50
T2Zmc2V0OwotICAgIEpTVmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2pzVmFsdWVNYXAu
YWRkKEpTVmFsdWU6OmVuY29kZSh2KSwgbV9uZXh0Q29uc3RhbnRPZmZzZXQpOworCisgICAgRW5j
b2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24gdmFsdWVNYXBLZXkgeyBKU1ZhbHVlOjplbmNv
ZGUodiksIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiB9OworICAgIEpTVmFsdWVNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtX2pzVmFsdWVNYXAuYWRkKHZhbHVlTWFwS2V5LCBtX25leHRDb25zdGFu
dE9mZnNldCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIG1fY29uc3Rh
bnRQb29sUmVnaXN0ZXJzLmFwcGVuZChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fbmV4
dENvbnN0YW50T2Zmc2V0KTsKICAgICAgICAgKyttX25leHRDb25zdGFudE9mZnNldDsKLSAgICAg
ICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50KHYpOworICAgICAgICBtX2NvZGVCbG9jay0+YWRk
Q29uc3RhbnQodiwgc291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKICAgICB9IGVsc2UKICAgICAg
ICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIHJldHVybiAmbV9jb25zdGFu
dFBvb2xSZWdpc3RlcnNbaW5kZXhdOwpAQCAtMTE2NSw5ICsxMTY3LDkgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQKICAgICByZXR1cm4gZW1pdExvYWQoZHN0LCBKU1ZhbHVlKHN0cmluZ0luTWFw
KSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3Rl
cklEKiBkc3QsIEpTVmFsdWUgdikKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKLSAgICBSZWdpc3RlcklEKiBjb25zdGFudElE
ID0gYWRkQ29uc3RhbnRWYWx1ZSh2KTsKKyAgICBSZWdpc3RlcklEKiBjb25zdGFudElEID0gYWRk
Q29uc3RhbnRWYWx1ZSh2LCBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOwogICAgIGlmIChkc3Qp
CiAgICAgICAgIHJldHVybiBlbWl0TW92ZShkc3QsIGNvbnN0YW50SUQpOwogICAgIHJldHVybiBj
b25zdGFudElEOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU0YzMxMTE1ZmRiYzkzNDYwZTgzYjQ1NjhkMTY3
NjZmODlmNTlmMWMuLjI1NDZiYmY4Y2RiNTMxNjBjN2JiZjhlZjUyZjViNTBiNzcyOTM1YjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKQEAgLTQ0Myw3ICs0NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImKTsK
LSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlLCBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVy
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWRHbG9iYWxPYmplY3QoUmVnaXN0ZXJJRCog
ZHN0KTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VW5hcnlPcChPcGNvZGVJRCwgUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwpAQCAtNjU0LDcgKzY1NCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIGJvb2wgaGFzQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpIGNv
bnN0OwogICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJik7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSk7CisgICAgICAgIFJl
Z2lzdGVySUQqIGFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSwgU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGFkZENvbnN0YW50RW1wdHlWYWx1ZSgpOwogICAgICAgICB1bnNpZ25lZCBhZGRSZWdFeHAo
UmVnRXhwKik7CiAKQEAgLTgwMCw2ICs4MDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIC8vIENvbnN0YW50IHBvb2wKICAgICAgICAgSWRlbnRpZmllck1hcCBtX2lkZW50
aWZpZXJNYXA7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEVuY29kZWRKU1ZhbHVlV2l0aFJl
cHJlc2VudGF0aW9uLCB1bnNpZ25lZCwgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb25I
YXNoLCBFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlvbkhhc2hUcmFpdHM+IEpTVmFsdWVN
YXA7CiAgICAgICAgIEpTVmFsdWVNYXAgbV9qc1ZhbHVlTWFwOwogICAgICAgICBJZGVudGlmaWVy
U3RyaW5nTWFwIG1fc3RyaW5nTWFwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggMDBhY2NmOWYwNGJjYzcyMGQ1YjBi
Zjk0ZmY2MmQ1ZTA3MjFlOTg2NC4uYjQyZWNiNzVkOTI0MjQ1YjVlZjdjM2IwOWYwOTgxNDNmZDFl
NGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcApAQCAtMTIyLDYgKzEyMiwxNSBAQCBKU1ZhbHVlIFN0cmluZ05vZGU6Ompz
VmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikgY29uc3QKICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmFkZFN0cmluZ0NvbnN0YW50KG1fdmFsdWUpOwogfQogCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK1JlZ2lzdGVySUQqIE51bWJlck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBn
ZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNWYWx1ZShnZW5lcmF0b3IpLCBpc0ludGVn
ZXJOb2RlKCkgPyBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXIgOiBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkRvdWJsZSk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBSZWdFeHBOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCA4NTg1
OWQyOGIyZDhhNDI4ODVlZDg0ZmEwOTdhNTY2NzU4MTRlZmE0Li40N2Q0YTVjMDBiOTU5N2VhYThl
ZDExNWU5NWE2YjA3MTg4OGIxYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTk1LDcgKzk1
LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxpbnQgcG93ZXI+CiAgICAgYm9vbCBpc1dpdGhp
blBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgIGlmICghbm9kZS0+aXNOdW1iZXJDb25z
dGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gaXNXaXRo
aW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQ8cG93ZXI+KG5vZGUpOwogICAgIH0KQEAgLTEwNCw3ICsx
MDQsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGUqIG5vZGUp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBKU0Nv
bnN0YW50OiB7CisgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgSlND
b25zdGFudDoKKyAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OiB7CiAgICAgICAgICAgICByZXR1
cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQ8cG93ZXI+KG5vZGUpOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTEyOCw3ICsxMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzaGlmdEFt
b3VudCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKLSAgICAgICAgICAgIGlmIChzaGlmdEFtb3Vu
dC0+b3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICAgICAgaWYgKCFub2RlLT5pc051bWJlckNv
bnN0YW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgSlNW
YWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LT5hc0pTVmFsdWUoKTsKICAgICAgICAg
ICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCAyYzg1YTg2MTBjZDQ0MzM2MGI4
YTM5YjM3MjRkOTZkMjMzMmYxNTBlLi4zNzkyZTQwYzYxNmNjMjUxNzYyOGQxNGNiMDQ0YTE1Yzdj
ODkyZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcApAQCAtMjUyLDE0ICsyNTIsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVuc2ln
bmVkIGNvbnN0YW50SW5kZXggPSBvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpOwogICAgICAgICAg
ICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRzLnNpemUoKTsKICAgICAgICAgICAgIGlm
IChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhd
KSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICptX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jazsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0
YW50KG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gID0gY29kZUJsb2NrLmNvbnN0YW50U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9j
b25zdGFudHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY29uc3RhbnRzW2ldID0gbnVsbHB0cjsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0gPQot
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBo
LmZyZWV6ZVN0cm9uZyh2YWx1ZSkpKTsKKworICAgICAgICAgICAgICAgIE9wSW5mbyBvcEluZm8o
bV9ncmFwaC5mcmVlemVTdHJvbmcodmFsdWUpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBjb25z
dGFudE5vZGUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGUpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50Tm9kZSA9IGFkZFRvR3JhcGgoRG91YmxlQ29uc3RhbnQsIG9wSW5m
byk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb25zdGFudE5v
ZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIG9wSW5mbyk7CisgICAgICAgICAgICAgICAgbV9j
b25zdGFudHNbY29uc3RhbnRJbmRleF0gPSBjb25zdGFudE5vZGU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0pOwogICAgICAgICAg
ICAgcmV0dXJuIG1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhdOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYTUzNzQ1NWM1ZWI2NzI2OGZlNDFmNjY5
Y2I1N2E4ZDQ0ZmJiY2U0ZC4uMTM1ZThiZjA4MTMwYzNiMzY2NmMxNWEyMzY2YTA1NTcyOGRmZjkx
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0x
MDQ5LDcgKzEwNDksNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIERvdWJsZVJlcDoKICAgICAg
ICAgY2FzZSBWYWx1ZVJlcDoKICAgICAgICAgY2FzZSBJbnQ1MlJlcDoKLSAgICAgICAgY2FzZSBE
b3VibGVDb25zdGFudDoKICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICBjYXNl
IElkZW50aXR5OiAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KICAgICAgICAg
Y2FzZSBCb29sZWFuVG9OdW1iZXI6CkBAIC0xMjEyLDYgKzEyMTEsNyBAQCBwcml2YXRlOgogICAg
ICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5
IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICBjYXNlIERvdWJs
ZUNvbnN0YW50OgogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICBjYXNlIEdldENhbGxl
ZToKICAgICAgICAgY2FzZSBGbHVzaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKaW5kZXggZTc5MDFkOGI1M2I0MzljZDlhNTliZmYzOTcxMjQ2YWExNzg3Y2I2MC4uYTVlOWU1
ZTViMWM0MWE4YjUwZDRlMzgwNTc5MGU3MjIxNzAwZmQxMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKQEAgLTEwNTMsNiArMTA1Myw3IEBAIEpTQXJyYXlCdWZmZXJWaWV3
KiBHcmFwaDo6dHJ5R2V0Rm9sZGFibGVWaWV3Rm9yQ2hpbGQxKE5vZGUqIG5vZGUpCiB2b2lkIEdy
YXBoOjpyZWdpc3RlckZyb3plblZhbHVlcygpCiB7CiAgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50
cygpLnJlc2l6ZSgwKTsKKyAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKCkucmVzaXplKDApOwogICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9m
cm96ZW5WYWx1ZXMpIHsKICAgICAgICAgaWYgKHZhbHVlLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAg
ICAgIEFTU0VSVChtX3BsYW4ud2Vha1JlZmVyZW5jZXMuY29udGFpbnModmFsdWUtPnN0cnVjdHVy
ZSgpKSk7CkBAIC0xMDc4LDYgKzEwNzksNyBAQCB2b2lkIEdyYXBoOjpyZWdpc3RlckZyb3plblZh
bHVlcygpCiAgICAgICAgIH0gfQogICAgIH0KICAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCku
c2hyaW5rVG9GaXQoKTsKKyAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsKIH0KIAogdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApp
bmRleCAwMWQxYWE2ZjMzZTY5NTVlOTkzOGJlNzUwNTI0ZTU0NGI5MTNjMzdkLi5mMzI0M2RkOWY1
MWI1YTBkMDdlMWYwZThkZGE3OGE0NjZlYjgyMTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCkBAIC0yMTcsOSArMjE3LDkgQEAgcHVibGljOgogICAgICAgICBOb2RlKiByaWdo
dCA9IGFkZC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKGxlZnQtPmhh
c0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3Vs
YXRlSW50MzIoYWRkLCByaWdodFNob3VsZFNwZWN1bGF0ZUludDMyLCBsZWZ0LCBzb3VyY2UpOwor
ICAgICAgICAgICAgcmV0dXJuIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKGFkZCwg
cmlnaHRTaG91bGRTcGVjdWxhdGVJbnQzMiwgcmlnaHQsIGxlZnQsIHNvdXJjZSk7CiAgICAgICAg
IGlmIChyaWdodC0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlh
dGVTaG91bGRTcGVjdWxhdGVJbnQzMihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnQzMiwgcmln
aHQsIHNvdXJjZSk7CisgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3Vs
YXRlSW50MzIoYWRkLCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50MzIsIGxlZnQsIHJpZ2h0LCBzb3Vy
Y2UpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxkU3BlY3VsYXRlSW50MzIg
JiYgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnQzMiAmJiBhZGQtPmNhblNwZWN1bGF0ZUludDMyKHNv
dXJjZSkpID8gU3BlY3VsYXRlSW50MzIgOiBEb250U3BlY3VsYXRlSW50MzI7CiAgICAgfQpAQCAt
ODUxLDcgKzg1MSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3Io
VmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9j
ayogc3VjY2Vzc29yKTsKICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRpYXRl
U2hvdWxkU3BlY3VsYXRlSW50MzIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3Vs
YXRlSW50MzIsIE5vZGUqIGltbWVkaWF0ZSwgUmFyZUNhc2VQcm9maWxpbmdTb3VyY2Ugc291cmNl
KQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnQz
MihOb2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnQzMiwgTm9kZSogb3Bl
cmFuZCwgTm9kZSppbW1lZGlhdGUsIFJhcmVDYXNlUHJvZmlsaW5nU291cmNlIHNvdXJjZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpbW1lZGlhdGUtPmhhc0NvbnN0YW50KCkpOwogICAgICAgICAK
QEAgLTg2MSw2ICs4NjEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmICghdmFy
aWFibGVTaG91bGRTcGVjdWxhdGVJbnQzMikKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3Vs
YXRlSW50MzI7CisKKyAgICAgICAgLy8gSW50ZWdlciBjb25zdGFudHMgY2FuIGJlIHR5cGVkIERv
dWJsZSBpZiB0aGV5IGFyZSB3cml0dGVuIGxpa2UgYSBkb3VibGUgaW4gdGhlIHNvdXJjZSBjb2Rl
IChlLmcuIDQyLjApLgorICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIHN0YXkgY29uc2VydmF0
aXZlIHVubGVzcyB0aGUgb3RoZXIgb3BlcmFuZCB3YXMgZXhwbGljaXRseSB0eXBlZCBhcyBpbnRl
Z2VyLgorICAgICAgICBOb2RlRmxhZ3Mgb3BlcmFuZFJlc3VsdFR5cGUgPSBvcGVyYW5kLT5yZXN1
bHQoKTsKKyAgICAgICAgaWYgKG9wZXJhbmRSZXN1bHRUeXBlICE9IE5vZGVSZXN1bHRJbnQzMiAm
JiBpbW1lZGlhdGUtPm9wKCkgPT0gRG91YmxlQ29uc3RhbnQpCisgICAgICAgICAgICByZXR1cm4g
RG9udFNwZWN1bGF0ZUludDMyOwogICAgICAgICAKICAgICAgICAgaWYgKGltbWVkaWF0ZVZhbHVl
LmlzSW50MzIoKSB8fCBpbW1lZGlhdGVWYWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgICAgIHJl
dHVybiBhZGQtPmNhblNwZWN1bGF0ZUludDMyKHNvdXJjZSkgPyBTcGVjdWxhdGVJbnQzMiA6IERv
bnRTcGVjdWxhdGVJbnQzMjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggZjVjOWVjNDM2OWNi
YTU3NmUxZmVjNGZjODUyYTc2OWE0MzhhNGUyMi4uM2NlMGY1ZGRkY2FmMGIzYTEyNjY5MWU3ZjQw
Yjc2ZTRkOThhM2RjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTE0OCw2ICsxNDgsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbih0eXBlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgRG91YmxlQ29uc3Rh
bnQ6IHsKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXIgPSBub2RlLT5hc051bWJlcigpOworICAg
ICAgICAgICAgaWYgKG51bWJlciAhPSBudW1iZXIpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Z1bGxSZWFsTnVtYmVy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRMb2NhbDogewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwpAQCAtNTMyLDcgKzU0MCw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgRG91YmxlUmVwOgogICAgICAgICBjYXNlIFZhbHVlUmVwOgogICAg
ICAgICBjYXNlIEludDUyUmVwOgotICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAg
ICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgICAgIGNh
c2UgQm9vbGVhblRvTnVtYmVyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAppbmRleCAzMjlhMDc2ODkyYTg1NzNiMmJmOWZjNjg3NWNlOTdkMGFlMDQyNDhmLi41MjVj
MTFmYWQ3MjkyYTgwOTIzODhmYzAwOTE0MTVhNTI1NWRjZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMTE4LDggKzExOCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgbV9teVJlZkNvdW50cy5maW5kKGVkZ2Uubm9kZSgpKS0+dmFsdWUr
KzsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlLCBlZGdlKSwgZWRnZS0+aGFzRG91YmxlUmVzdWx0KCkgPT0gKGVkZ2UudXNlS2luZCgpID09
IERvdWJsZVJlcFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBSZWFsVXNlIHx8IGVk
Z2UudXNlS2luZCgpID09IERvdWJsZVJlcE1hY2hpbmVJbnRVc2UpKTsKKworICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0ZUVkZ2VXaXRoRG91YmxlUmVzdWx0SWZOZWNlc3Nhcnkobm9kZSwgZWRn
ZSk7CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFz
SW50NTJSZXN1bHQoKSA9PSAoZWRnZS51c2VLaW5kKCkgPT0gSW50NTJSZXBVc2UpKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpIHsKQEAgLTU0Myw3ICs1NDMsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KLSAgICAKKworICAgIHZvaWQgdmFsaWRhdGVFZGdlV2l0aERvdWJsZVJl
c3VsdElmTmVjZXNzYXJ5KE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlm
ICghZWRnZS0+aGFzRG91YmxlUmVzdWx0KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgLy8gVGhlIG9ubHkgY2FzZSB3ZXJlIGFuIGVkZ2UgY2FuIGhhdmUgYSBEb3VibGVSZXN1bHQg
d2l0aG91dCBoYXZpbmcgYSBudW1iZXItdHlwZSB1c2VLaW5kKCkKKyAgICAgICAgLy8gZm9yIGNv
bnN0YW50cyB0aGF0IGFwcGVhciBhcyBkb3VibGUgaW4gdGhlIHNvdXJjZSBjb2RlIChlLmcuIDQy
LjBlMikuCisgICAgICAgIGlmIChlZGdlLT5vcCgpID09IERvdWJsZUNvbnN0YW50KQorICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
IHx8IGVkZ2UudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBE
b3VibGVSZXBSZWFsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IERvdWJsZVJlcE1hY2hpbmVJbnRV
c2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVk
Z2UudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBEb3VibGVS
ZXBSZWFsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IERvdWJsZVJlcE1hY2hpbmVJbnRVc2UpOwor
ICAgIH0KKwogICAgIHZvaWQgY2hlY2tPcGVyYW5kKAogICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
aywgT3BlcmFuZHM8c2l6ZV90PiYgZ2V0TG9jYWxQb3NpdGlvbnMsCiAgICAgICAgIE9wZXJhbmRz
PHNpemVfdD4mIHNldExvY2FsUG9zaXRpb25zLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKaW5kZXggODg0MThmMTZhMjAw
MjZiMmE2YzAxZjNlMjY4MWQ2MGNkNWNmNzk5Ni4uZmE2NDk1MWE5ZGYyYjZiNjQ1MDVmYTFlYTM3
YTEwMDRiOWE4ZDk5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9B
U1RCdWlsZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVy
LmgKQEAgLTE5MiwxMCArMTkyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGluY0NvbnN0YW50
cygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBcnJheU5vZGUobG9jYXRp
b24sIGVsaXNpb25zLCBlbGVtcyk7CiAgICAgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVO
dW1iZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSBkKQorICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVEb3VibGVFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGRvdWJsZSBkKQogICAgIHsKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIE51bWJlck5vZGUobG9jYXRpb24sIGQpOwor
ICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBEb3VibGVOb2RlKGxvY2F0aW9uLCBk
KTsKKyAgICB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUludGVnZXJFeHByKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSBkKQorICAgIHsKKyAgICAgICAgaW5jQ29u
c3RhbnRzKCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEludGVnZXJOb2Rl
KGxvY2F0aW9uLCBkKTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3RyaW5n
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIHN0cmlu
ZykKQEAgLTc0OCwxMSArNzUzLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fZXZhbENvdW50Kys7
CiAgICAgICAgIG1fc2NvcGUubV9mZWF0dXJlcyB8PSBFdmFsRmVhdHVyZTsKICAgICB9Ci0gICAg
RXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51bWJlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBkb3VibGUgZCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlSW50ZWdlckxpa2VOdW1i
ZXIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewotICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBOdW1iZXJOb2RlKGxvY2F0aW9uLCBkKTsK
KyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgSW50ZWdlck5vZGUobG9jYXRpb24s
IGQpOwogICAgIH0KLSAgICAKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG91YmxlTGlrZU51
bWJlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIERvdWJsZU5vZGUobG9jYXRpb24sIGQp
OworICAgIH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTnVtYmVyRnJvbUJpbmFyeU9wZXJh
dGlvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgdmFsdWUsIGNvbnN0
IE51bWJlck5vZGUmIG9yaWdpbmFsTm9kZUEsIGNvbnN0IE51bWJlck5vZGUmIG9yaWdpbmFsTm9k
ZUIpCisgICAgeworICAgICAgICBpZiAob3JpZ2luYWxOb2RlQS5pc0ludGVnZXJOb2RlKCkgJiYg
b3JpZ2luYWxOb2RlQi5pc0ludGVnZXJOb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
SW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZURvdWJsZUxpa2VOdW1iZXIobG9jYXRpb24sIHZhbHVlKTsKKyAgICB9CisgICAgRXhwcmVzc2lv
bk5vZGUqIGNyZWF0ZU51bWJlckZyb21VbmFyeU9wZXJhdGlvbihjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBkb3VibGUgdmFsdWUsIGNvbnN0IE51bWJlck5vZGUmIG9yaWdpbmFsTm9k
ZSkKKyAgICB7CisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUuaXNJbnRlZ2VyTm9kZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB2YWx1ZSk7
CisgICAgICAgIHJldHVybiBjcmVhdGVEb3VibGVMaWtlTnVtYmVyKGxvY2F0aW9uLCB2YWx1ZSk7
CisgICAgfQorCiAgICAgVk0qIG1fdm07CiAgICAgUGFyc2VyQXJlbmEmIG1fcGFyc2VyQXJlbmE7
CiAgICAgU291cmNlQ29kZSogbV9zb3VyY2VDb2RlOwpAQCAtNzkzLDkgKzgxNCw4IEBAIEV4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU5lZ2F0
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIG4p
CiB7CiAgICAgaWYgKG4tPmlzTnVtYmVyKCkpIHsKLSAgICAgICAgTnVtYmVyTm9kZSogbnVtYmVy
Tm9kZSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihuKTsKLSAgICAgICAgbnVtYmVyTm9kZS0+
c2V0VmFsdWUoLW51bWJlck5vZGUtPnZhbHVlKCkpOwotICAgICAgICByZXR1cm4gbnVtYmVyTm9k
ZTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyTm9kZSA9IHN0YXRpY19jYXN0PGNv
bnN0IE51bWJlck5vZGUmPigqbik7CisgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXJGcm9tVW5h
cnlPcGVyYXRpb24obG9jYXRpb24sIC1udW1iZXJOb2RlLnZhbHVlKCksIG51bWJlck5vZGUpOwog
ICAgIH0KIAogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIE5lZ2F0ZU5vZGUobG9jYXRp
b24sIG4pOwpAQCAtODA0LDcgKzgyNCw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjpt
YWtlTmVnYXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiBFeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByKQogewogICAgIGlmIChleHBy
LT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB+dG9J
bnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwciktPnZhbHVlKCkpKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB+dG9JbnQzMihzdGF0aWNf
Y2FzdDxOdW1iZXJOb2RlKj4oZXhwciktPnZhbHVlKCkpKTsKICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBCaXR3aXNlTm90Tm9kZShsb2NhdGlvbiwgZXhwcik7CiB9CiAKQEAgLTgxMyw4
ICs4MzMsMTEgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNdWx0Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXMKICAgICBleHByMSA9IGV4cHIxLT5z
dHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7CiAK
LSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAg
IHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihl
eHByMSktPnZhbHVlKCkgKiBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgp
KTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAg
ICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51
bWJlckZyb21CaW5hcnlPcGVyYXRpb24obG9jYXRpb24sIG51bWJlckV4cHIxLnZhbHVlKCkgKiBu
dW1iZXJFeHByMi52YWx1ZSgpLCBudW1iZXJFeHByMSwgbnVtYmVyRXhwcjIpOworICAgIH0KIAog
ICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhw
cjEpLT52YWx1ZSgpID09IDEpCiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFVu
YXJ5UGx1c05vZGUobG9jYXRpb24sIGV4cHIyKTsKQEAgLTgzMCw4ICs4NTMsMTQgQEAgRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEaXZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEV4cHJlc3MKICAgICBleHByMSA9IGV4cHIxLT5zdHJpcFVuYXJ5UGx1cygpOwog
ICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7CiAKLSAgICBpZiAoZXhwcjEtPmlz
TnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1i
ZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgLyBz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKKyAgICBpZiAoZXhwcjEt
PmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVy
Tm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAg
ICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlJj4oKmV4cHIyKTsKKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IG51bWJlckV4cHIxLnZhbHVl
KCkgLyBudW1iZXJFeHByMi52YWx1ZSgpOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50NjRf
dD4ocmVzdWx0KSA9PSByZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyRnJv
bUJpbmFyeU9wZXJhdGlvbihsb2NhdGlvbiwgcmVzdWx0LCBudW1iZXJFeHByMSwgbnVtYmVyRXhw
cjIpOworICAgICAgICByZXR1cm4gY3JlYXRlRG91YmxlTGlrZU51bWJlcihsb2NhdGlvbiwgcmVz
dWx0KTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRGl2Tm9kZShsb2Nh
dGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIApAQCAtODM5LDE2
ICs4NjgsMjMgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNb2ROb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3MKIHsKICAgICBleHByMSA9IGV4cHIx
LT5zdHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7
Ci0gICAgCi0gICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQot
ICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCBmbW9kKHN0YXRpY19jYXN0PE51
bWJlck5vZGUqPihleHByMSktPnZhbHVlKCksIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHBy
MiktPnZhbHVlKCkpKTsKKworICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNO
dW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRp
Y19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBu
dW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIpOworICAgICAgICBy
ZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIGZtb2QobnVtYmVyRXhwcjEu
dmFsdWUoKSwgbnVtYmVyRXhwcjIudmFsdWUoKSkpOworICAgIH0KICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBNb2ROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNz
aWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFkZE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBF
eHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKLSAgICBp
ZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVy
biBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSkt
PnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKKwor
ICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAg
ICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUm
PigqZXhwcjEpOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRp
Y19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVy
RnJvbUJpbmFyeU9wZXJhdGlvbihsb2NhdGlvbiwgbnVtYmVyRXhwcjEudmFsdWUoKSArIG51bWJl
ckV4cHIyLnZhbHVlKCksIG51bWJlckV4cHIxLCBudW1iZXJFeHByMik7CisgICAgfQogICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFkZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwg
cmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKQEAgLTg1Nyw1MCArODkzLDcxIEBAIEV4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlU3ViTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzCiAgICAgZXhwcjEgPSBleHByMS0+c3RyaXBVbmFyeVBsdXMoKTsKICAg
ICBleHByMiA9IGV4cHIyLT5zdHJpcFVuYXJ5UGx1cygpOwogCi0gICAgaWYgKGV4cHIxLT5pc051
bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVy
KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpIC0gc3Rh
dGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSk7CisgICAgaWYgKGV4cHIxLT5p
c051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKSB7CisgICAgICAgIGNvbnN0IE51bWJlck5v
ZGUmIG51bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMSk7CisgICAg
ICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSY+KCpleHByMik7CisgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXJGcm9tQmluYXJ5T3BlcmF0
aW9uKGxvY2F0aW9uLCBudW1iZXJFeHByMS52YWx1ZSgpIC0gbnVtYmVyRXhwcjIudmFsdWUoKSwg
bnVtYmVyRXhwcjEsIG51bWJlckV4cHIyKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgU3ViTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1l
bnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VMZWZ0U2hpZnROb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7Ci0gICAg
aWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1
cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUq
PihleHByMSktPnZhbHVlKCkpIDw8ICh0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4o
ZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYg
ZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhw
cjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVt
YmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMy
KG51bWJlckV4cHIxLnZhbHVlKCkpIDw8ICh0b1VJbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSAm
IDB4MWYpKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTGVmdFNoaWZ0
Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAog
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VSaWdodFNoaWZ0Tm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25O
b2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewotICAgIGlmIChleHByMS0+
aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51
bWJlcihsb2NhdGlvbiwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52
YWx1ZSgpKSA+PiAodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFs
dWUoKSkgJiAweDFmKSk7CisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051
bWJlcigpKSB7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGlj
X2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51
bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAgIHJl
dHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihudW1iZXJFeHBy
MS52YWx1ZSgpKSA+PiAodG9VSW50MzIobnVtYmVyRXhwcjIudmFsdWUoKSkgJiAweDFmKSk7Cisg
ICAgfQogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFJpZ2h0U2hpZnROb2RlKGxvY2F0
aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9u
Tm9kZSogQVNUQnVpbGRlcjo6bWFrZVVSaWdodFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewotICAgIGlmIChleHByMS0+aXNOdW1iZXIo
KSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2Nh
dGlvbiwgdG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkg
Pj4gKHRvVUludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpICYg
MHgxZikpOworICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkg
eworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51
bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHBy
MiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIpOworICAgICAgICByZXR1cm4gY3Jl
YXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIHRvVUludDMyKG51bWJlckV4cHIxLnZhbHVl
KCkpID4+ICh0b1VJbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICB9CiAg
ICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZShsb2Nh
dGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lv
bk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXRPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYg
ZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24s
IHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgfCB0b0lu
dDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKKyAgICBpZiAo
ZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3Qg
TnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIx
KTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxO
dW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVt
YmVyKGxvY2F0aW9uLCB0b0ludDMyKG51bWJlckV4cHIxLnZhbHVlKCkpIHwgdG9JbnQzMihudW1i
ZXJFeHByMi52YWx1ZSgpKSk7CisgICAgfQogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IEJpdE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsK
IH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXRBbmROb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7Ci0gICAgaWYgKGV4cHIx
LT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRl
TnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSkt
PnZhbHVlKCkpICYgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1
ZSgpKSk7CisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKSB7
CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIy
ID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAgIHJldHVybiBjcmVh
dGVJbnRlZ2VyTGlrZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihudW1iZXJFeHByMS52YWx1ZSgp
KSAmIHRvSW50MzIobnVtYmVyRXhwcjIudmFsdWUoKSkpOworICAgIH0KICAgICByZXR1cm4gbmV3
IChtX3BhcnNlckFyZW5hKSBCaXRBbmROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0
SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJp
dFhPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykK
IHsKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAg
ICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgXiB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5v
ZGUqPihleHByMiktPnZhbHVlKCkpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhw
cjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEg
PSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVy
Tm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51
bWJlckV4cHIxLnZhbHVlKCkpIF4gdG9JbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSk7CisgICAg
fQogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdFhPck5vZGUobG9jYXRpb24sIGV4
cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9MZXhlci5jcHAKaW5kZXggZjEzZmU0ZGVhYzBlZGUwNDM3YzQ5MTdiYTQ4ZjRmMGI5
NjUwOWMwZS4uMWVjNjdkZjFiOGU4YzBkNzMxOTQ5YjEyNzJhOWJjNzVmZmY4MDE2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKQEAgLTQ5NSw2ICs0OTUsMTMgQEAgTGV4
ZXI8VD46OkxleGVyKFZNKiB2bSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MpCiB7CiB9
CiAKK3N0YXRpYyBpbmxpbmUgSlNUb2tlblR5cGUgdG9rZW5UeXBlRm9ySW50ZWdlckxpa2VUb2tl
bihkb3VibGUgZG91YmxlVmFsdWUpCit7CisgICAgaWYgKChkb3VibGVWYWx1ZSB8fCAhc3RkOjpz
aWduYml0KGRvdWJsZVZhbHVlKSkgJiYgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZG91YmxlVmFsdWUp
ID09IGRvdWJsZVZhbHVlKQorICAgICAgICByZXR1cm4gSU5URUdFUjsKKyAgICByZXR1cm4gRE9V
QkxFOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIExleGVyPFQ+Ojp+TGV4ZXIoKQogewpA
QCAtMTY4Nyw3ICsxNjk0LDcgQEAgc3RhcnQ6CiAgICAgICAgICAgICAgICAgdG9rZW4gPSBJTlZB
TElEX0hFWF9OVU1CRVJfRVJST1JUT0s7CiAgICAgICAgICAgICAgICAgZ290byByZXR1cm5FcnJv
cjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRva2VuID0gTlVNQkVSOworICAgICAgICAg
ICAgdG9rZW4gPSB0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2VuKHRva2VuRGF0YS0+ZG91Ymxl
VmFsdWUpOwogICAgICAgICAgICAgbV9idWZmZXI4LnJlc2l6ZSgwKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0xNzAwLDE3ICsxNzA3LDE5IEBAIHN0YXJ0OgogICAgICAgICB9
CiAgICAgICAgIGlmIChpc0FTQ0lJT2N0YWxEaWdpdChtX2N1cnJlbnQpKSB7CiAgICAgICAgICAg
ICBpZiAocGFyc2VPY3RhbCh0b2tlbkRhdGEtPmRvdWJsZVZhbHVlKSkgewotICAgICAgICAgICAg
ICAgIHRva2VuID0gTlVNQkVSOworICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5UeXBlRm9y
SW50ZWdlckxpa2VUb2tlbih0b2tlbkRhdGEtPmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIENoYXJhY3Rlck51bWJl
cjoKLSAgICAgICAgaWYgKExJS0VMWSh0b2tlbiAhPSBOVU1CRVIpKSB7CisgICAgICAgIGlmIChM
SUtFTFkodG9rZW4gIT0gSU5URUdFUiAmJiB0b2tlbiAhPSBET1VCTEUpKSB7CiAgICAgICAgICAg
ICBpZiAoIXBhcnNlRGVjaW1hbCh0b2tlbkRhdGEtPmRvdWJsZVZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIHRva2VuID0gSU5URUdFUjsKICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09
ICcuJykgewogICAgICAgICAgICAgICAgICAgICBzaGlmdCgpOwogaW5OdW1iZXJBZnRlckRlY2lt
YWxQb2ludDoKICAgICAgICAgICAgICAgICAgICAgcGFyc2VOdW1iZXJBZnRlckRlY2ltYWxQb2lu
dCgpOworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IERPVUJMRTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgaWYgKChtX2N1cnJlbnQgfCAweDIwKSA9PSAnZScpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlckFmdGVyRXhwb25lbnRJbmRpY2F0b3Io
KSkgewpAQCAtMTcyMSw4ICsxNzMwLDEwIEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CiAg
ICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IHBhcnNlRG91YmxlKG1fYnVm
ZmVyOC5kYXRhKCksIG1fYnVmZmVyOC5zaXplKCksIHBhcnNlZExlbmd0aCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB0b2tlbiA9IE5VTUJFUjsKKyAgICAgICAgICAgICAgICBpZiAodG9r
ZW4gPT0gSU5URUdFUikKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblR5cGVGb3JJ
bnRlZ2VyTGlrZVRva2VuKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2Vu
KHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm8gaWRl
bnRpZmllcnMgYWxsb3dlZCBkaXJlY3RseSBhZnRlciBudW1lcmljIGxpdGVyYWwsIGUuZy4gIjNp
biIgaXMgYmFkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1
Y3RvcnMuaAppbmRleCA5NTA0MDlhYjgxZmVjOTg5OWU2MWRhNWM3ODY4ZWQ1ODM0NzNlOWVjLi4x
MmUzZDRkNmI4OTUyYTAwMWI0NmEzMThiMDA3NDgzYjc1NzZlNzA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaApAQCAtODQsNiArODQsMTYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAorICAgIGlubGluZSBEb3VibGVOb2Rl
OjpEb3VibGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSB2YWx1
ZSkKKyAgICAgICAgOiBOdW1iZXJOb2RlKGxvY2F0aW9uLCB2YWx1ZSkKKyAgICB7CisgICAgfQor
CisgICAgaW5saW5lIEludGVnZXJOb2RlOjpJbnRlZ2VyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBkb3VibGUgdmFsdWUpCisgICAgICAgIDogRG91YmxlTm9kZShsb2NhdGlv
biwgdmFsdWUpCisgICAgeworICAgIH0KKwogICAgIGlubGluZSBTdHJpbmdOb2RlOjpTdHJpbmdO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIHZh
bHVlKQogICAgICAgICA6IENvbnN0YW50Tm9kZShsb2NhdGlvbiwgUmVzdWx0VHlwZTo6c3RyaW5n
VHlwZSgpKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgKaW5kZXggMjdiYzNmODQzNTRjNDQwY2JhOThmZjBlZDAwMTc3ODU4NmQ5ZjViNi4u
MzBlZGIwYWUwYzJkYTUzZjNiNDBmODk0NjAzMzhmMTllOTA5OTI5NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMjM2LDE2ICsyMzYsMzIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgTnVtYmVyTm9kZSA6IHB1YmxpYyBDb25zdGFudE5vZGUgewogICAgIHB1Ymxp
YzoKICAgICAgICAgTnVtYmVyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBkb3VibGUgdmFs
dWUpOwotICAgICAgICBkb3VibGUgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgICAg
IHZvaWQgc2V0VmFsdWUoZG91YmxlIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgICAg
ICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc0ludGVnZXJOb2RlKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
b3ZlcnJpZGUgZmluYWw7CiAKICAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNO
dW1iZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc051bWJlcigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlIGpzVmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBqc051bWJlcihtX3ZhbHVlKTsgfQogCiAgICAgICAgIGRvdWJsZSBt
X3ZhbHVlOwogICAgIH07CiAKKyAgICBjbGFzcyBEb3VibGVOb2RlIDogcHVibGljIE51bWJlck5v
ZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRG91YmxlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBkb3VibGUgdmFsdWUpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29s
IGlzSW50ZWdlck5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIH07
CisKKyAgICAvLyBBbiBpbnRlZ2VyIG5vZGUgcmVwcmVzZW50IGEgbnVtYmVyIHJlcHJlc2VudGVk
IGFzIGFuIGludGVnZXIgKGUuZy4gNDIgaW5zdGVhZCBvZiA0Mi4sIDQyLjAsIDQyZTApCisgICAg
Y2xhc3MgSW50ZWdlck5vZGUgOiBwdWJsaWMgRG91YmxlTm9kZSB7CisgICAgcHVibGljOgorICAg
ICAgICBJbnRlZ2VyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBkb3VibGUgdmFsdWUpOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlZ2VyTm9kZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB9OworCiAgICAgY2xhc3MgU3RyaW5nTm9kZSA6IHB1Ymxp
YyBDb25zdGFudE5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgU3RyaW5nTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAKaW5kZXggZjRjNGJjNWQ0ZTNmNzJmNjA1MTJiZmM2MDcwMTU2ZDMx
NmZhYWJhYy4uNjMxOGZkNjM2YmViM2U3YjkxZDI4ZjY0OTZhZWQ5YWY3YmQ4NzE4YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApAQCAtNjI5LDcgKzYyOSw4IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlY29uc3RydWN0aW9uUGF0dGVybiBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VECiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIEpTVG9rZW5UeXBlIHRva2VuVHlwZSA9IG1fdG9rZW4ubV90eXBlOwogICAgICAgICAgICAg
ICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIE5VTUJF
UjoKKyAgICAgICAgICAgICAgICBjYXNlIERPVUJMRToKKyAgICAgICAgICAgICAgICBjYXNlIElO
VEVHRVI6CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b20obV92bSwgbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNUUklORzoKQEAgLTE5NDUsNyArMTk0Niw4
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZVByb3BlcnR5KFRyZWVCCiAgICAgICAgICAgICBmYWlsV2l0aE1lc3NhZ2Uo
IkV4cGVjdGVkIGEgJzonIGZvbGxvd2luZyB0aGUgcHJvcGVydHkgbmFtZSAnIiwgaWRlbnQtPmlt
cGwoKSwgIiciKTsKICAgICAgICAgcmV0dXJuIHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGNv
bXBsZXRlLCB0eXBlLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKICAgICB9Ci0gICAgY2Fz
ZSBOVU1CRVI6IHsKKyAgICBjYXNlIERPVUJMRToKKyAgICBjYXNlIElOVEVHRVI6IHsKICAgICAg
ICAgZG91YmxlIHByb3BlcnR5TmFtZSA9IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwogICAg
ICAgICBuZXh0KCk7CiAgICAgICAgIGNvbnN1bWVPckZhaWwoQ09MT04sICJFeHBlY3RlZCAnOicg
YWZ0ZXIgcHJvcGVydHkgbmFtZSIpOwpAQCAtMTk3OSw3ICsxOTgxLDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2V0
dGVyU2V0dGVyKFQKICAgICBkb3VibGUgbnVtZXJpY1Byb3BlcnR5TmFtZSA9IDA7CiAgICAgaWYg
KG1fdG9rZW4ubV90eXBlID09IElERU5UIHx8IG1fdG9rZW4ubV90eXBlID09IFNUUklORykKICAg
ICAgICAgc3RyaW5nUHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgZWxz
ZSBpZiAobV90b2tlbi5tX3R5cGUgPT0gTlVNQkVSKQorICAgIGVsc2UgaWYgKG1fdG9rZW4ubV90
eXBlID09IERPVUJMRSB8fCBtX3Rva2VuLm1fdHlwZSA9PSBJTlRFR0VSKQogICAgICAgICBudW1l
cmljUHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CiAgICAgZWxzZQog
ICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9rZW4oKTsKQEAgLTIyMjEsMTEgKzIyMjMsMTcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmUKICAgICAgICAgbmV4dCgpOwogICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVTdHJpbmcobG9jYXRpb24sIGlkZW50KTsKICAgICB9Ci0gICAgY2Fz
ZSBOVU1CRVI6IHsKKyAgICBjYXNlIERPVUJMRTogewogICAgICAgICBkb3VibGUgZCA9IG1fdG9r
ZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwogICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24o
dG9rZW5Mb2NhdGlvbigpKTsKICAgICAgICAgbmV4dCgpOwotICAgICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVOdW1iZXJFeHByKGxvY2F0aW9uLCBkKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlRG91YmxlRXhwcihsb2NhdGlvbiwgZCk7CisgICAgfQorICAgIGNhc2UgSU5URUdFUjog
eworICAgICAgICBkb3VibGUgZCA9IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOworICAgICAg
ICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKKyAgICAgICAgbmV4
dCgpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVJbnRlZ2VyRXhwcihsb2NhdGlvbiwg
ZCk7CiAgICAgfQogICAgIGNhc2UgTlVMTFRPS0VOOiB7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlv
biBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwpAQCAtMjU3Nyw3ICsyNTg1LDggQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4gdm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6cHJpbnRVbmV4
cGVjdGVkVG9rZW5UZXh0KFcKICAgICBjYXNlIFNUUklORzoKICAgICAgICAgb3V0LnByaW50KCJV
bmV4cGVjdGVkIHN0cmluZyBsaXRlcmFsICIsIGdldFRva2VuKCkpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBOVU1CRVI6CisgICAgY2FzZSBJTlRFR0VSOgorICAgIGNhc2UgRE9VQkxFOgog
ICAgICAgICBvdXQucHJpbnQoIlVuZXhwZWN0ZWQgbnVtYmVyICciLCBnZXRUb2tlbigpLCAiJyIp
OwogICAgICAgICByZXR1cm47CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlclRva2Vucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJUb2tlbnMuaAppbmRleCA2NTIwNTVhNThlZDRlYjNkZWM4ZWFkY2RhYmM0MWJjZWFiYWYw
OTFlLi4zZmYyNzk4NjZhZjZlMjg2OTBiYzA3YzVmNzIxYmM3YTM4MDU2ZWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKQEAgLTk0LDcgKzk0LDggQEAg
ZW51bSBKU1Rva2VuVHlwZSB7CiAgICAgQ0xPU0VCUkFDS0VULAogICAgIENPTU1BLAogICAgIFFV
RVNUSU9OLAotICAgIE5VTUJFUiwKKyAgICBJTlRFR0VSLAorICAgIERPVUJMRSwKICAgICBJREVO
VCwKICAgICBTVFJJTkcsCiAgICAgU0VNSUNPTE9OLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1N5bnRheENoZWNrZXIuaAppbmRleCA2M2IxMzQ4ZmUzMDVkYzQ2OWE2MTFmYmNjNDEw
NmFiMzg4M2YwZGEyLi41ODg0ZmIyODJlNzU2MWE2NTg2ZDBmNmUxZGE1OTE1MWI4ZDU0YTQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApAQCAtNzEs
NyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIFN5bnRheENoZWNrZXIgRnVuY3Rpb25C
b2R5QnVpbGRlcjsKICAgICBlbnVtIHsgTm9uZUV4cHIgPSAwLAotICAgICAgICBSZXNvbHZlRXZh
bEV4cHIsIFJlc29sdmVFeHByLCBOdW1iZXJFeHByLCBTdHJpbmdFeHByLAorICAgICAgICBSZXNv
bHZlRXZhbEV4cHIsIFJlc29sdmVFeHByLCBJbnRlZ2VyRXhwciwgRG91YmxlRXhwciwgU3RyaW5n
RXhwciwKICAgICAgICAgVGhpc0V4cHIsIE51bGxFeHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwg
T2JqZWN0TGl0ZXJhbEV4cHIsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBCcmFj
a2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCiAgICAgICAgIE5ld0V4cHIsIFByZUV4cHIsIFBv
c3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIsCkBAIC0xNTEsNyArMTUxLDggQEAgcHVibGlj
OgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgaW50KSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4g
QXJyYXlMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFycmF5KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiBBcnJheUxpdGVyYWxFeHByOyB9
Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTnVtYmVyRXhwcihjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBkb3VibGUpIHsgcmV0dXJuIE51bWJlckV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVEb3VibGVFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGRvdWJsZSkgeyByZXR1cm4g
RG91YmxlRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUludGVnZXJFeHByKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGRvdWJsZSkgeyByZXR1cm4gSW50ZWdlckV4cHI7IH0KICAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVTdHJpbmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciopIHsgcmV0dXJuIFN0cmluZ0V4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVCb29sZWFuKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGJvb2wpIHsgcmV0dXJuIEJvb2xF
eHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTnVsbChjb25zdCBKU1Rva2VuTG9jYXRp
b24mKSB7IHJldHVybiBOdWxsRXhwcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCmluZGV4IGFjYWIzZmE2MjQwYTExMTJhYTEwZTI5MzFlNmZkYzExNWEwM2Jk
ZjEuLjhhMjYxZTNiYTM5NzFlOTFkM2UwMThmYmZlYzRmZTFhNjgyY2QxNjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKQEAgLTEyNCw4ICsxMjQsMTUgQEAg
aW5saW5lIHVpbnQzMl90IHRvVUludDMyKGRvdWJsZSBudW1iZXIpCiBpbnQ2NF90IHRyeUNvbnZl
cnRUb0ludDUyKGRvdWJsZSk7CiBib29sIGlzSW50NTIoZG91YmxlKTsKIAorZW51bSBjbGFzcyBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24geworICAgIE90aGVyLAorICAgIEludGVnZXIsCisgICAg
RG91YmxlCit9OworCiBjbGFzcyBKU1ZhbHVlIHsKICAgICBmcmllbmQgc3RydWN0IEVuY29kZWRK
U1ZhbHVlSGFzaFRyYWl0czsKKyAgICBmcmllbmQgc3RydWN0IEVuY29kZWRKU1ZhbHVlV2l0aFJl
cHJlc2VudGF0aW9uSGFzaFRyYWl0czsKICAgICBmcmllbmQgY2xhc3MgQXNzZW1ibHlIZWxwZXJz
OwogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2Fs
bDsKQEAgLTQ0OCw3ICs0NTUsMjYgQEAgc3RydWN0IEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0cyA6
IEhhc2hUcmFpdHM8RW5jb2RlZEpTVmFsdWU+IHsKIH07CiAjZW5kaWYKIAotdHlwZWRlZiBIYXNo
TWFwPEVuY29kZWRKU1ZhbHVlLCB1bnNpZ25lZCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVk
SlNWYWx1ZUhhc2hUcmFpdHM+IEpTVmFsdWVNYXA7Cit0eXBlZGVmIHN0ZDo6cGFpcjxFbmNvZGVk
SlNWYWx1ZSwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBFbmNvZGVkSlNWYWx1ZVdpdGhSZXBy
ZXNlbnRhdGlvbjsKKworc3RydWN0IEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFz
aFRyYWl0cyA6IEhhc2hUcmFpdHM8RW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24+IHsK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uIGVtcHR5VmFsdWUoKSB7IHJldHVy
biBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSwgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpPdGhlcik7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVk
VmFsdWUoRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24mIHNsb3QpIHsgc2xvdCA9IHN0
ZDo6bWFrZV9wYWlyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSkpLCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsgfQorICAgIHN0
YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9u
IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZShKU1ZhbHVlOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpKSwgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpPdGhlcik7IH0KK307CisKK3N0cnVjdCBFbmNvZGVkSlNWYWx1ZVdpdGhSZXBy
ZXNlbnRhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEVuY29kZWRK
U1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBX
VEY6OnBhaXJJbnRIYXNoKEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh2YWx1ZS5maXJzdCksIElu
dEhhc2g8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPjo6aGFzaCh2YWx1ZS5zZWNvbmQpKTsKKyAg
ICB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVz
ZW50YXRpb24mIGEsIGNvbnN0IEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uJiBiKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKIAogLy8gU3RhbmQt
YWxvbmUgaGVscGVyIGZ1bmN0aW9ucy4KIGlubGluZSBKU1ZhbHVlIGpzTnVsbCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FyaXRoLWFkZC13aXRoLWNv
bnN0YW50cy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJpdGgtYWRk
LXdpdGgtY29uc3RhbnRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3YmU0MjgyZTgwODkxODQyMWMyM2U2Mzhl
ZjU0MGY2YTM3NWM2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2FyaXRoLWFkZC13aXRoLWNvbnN0YW50cy5qcwpAQCAtMCwwICsxLDIyMiBA
QAorLy8gVGVzdCB2YWx1ZSArIDAuCitmdW5jdGlvbiBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFz
SW50ZWdlcih4KSB7CisgICAgdmFyIGEgPSB4ICsgMDsKKyAgICB2YXIgYiA9IDAgKyB4OworICAg
IGlmICghKGlzTmFOKHgpICYmIGlzTmFOKGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAg
ICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3Igb24gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0lu
dGVnZXIsIGEgPSAiICsgYSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9Jbmxp
bmUoYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIpOworCitmdW5jdGlvbiB0ZXN0QXJp
dGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0
ZW5Bc0ludGVnZXIoaSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IGkpIHsKKyAgICAgICAgICAg
IHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihpKSA9ICIgKyByZXN1bHQg
KyAiLCBleHBlY3RlZCAiICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRp
dHlXcml0dGVuQXNJbnRlZ2VyKC0wKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gLTApIHsKKyAg
ICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigtMCkgPSAi
ICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLTAiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgdGVzdFZhbHVlID0gaSAr
IC41OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVn
ZXIodGVzdFZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gdGVzdFZhbHVlKSB7CisgICAg
ICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoaSkgPSAiICsg
cmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiArIHRlc3RWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQg
PSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihOYU4pOworICAgICAgICBpZiAoIWlz
TmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRl
bkFzSW50ZWdlcihOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAg
ICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkp
OworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFy
aXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAi
LCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVu
dGl0eVdyaXR0ZW5Bc0ludGVnZXIoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJl
c3VsdCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50
aXR5V3JpdHRlbkFzSW50ZWdlcigtSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVk
IC1JbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhBZGRJZGVudGl0eVdy
aXR0ZW5Bc0ludGVnZXIoKTsKKworCitmdW5jdGlvbiBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFz
RG91YmxlKHgpIHsKKyAgICB2YXIgYSA9IHggKyAwLjA7CisgICAgdmFyIGIgPSAwLiArIHg7Cisg
ICAgaWYgKCEoaXNOYU4oeCkgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpICYmIGEgIT09IGIpCisg
ICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvciBvbiBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFz
RG91YmxlLCBhID0gIiArIGEgKyAiIGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsKK30KK25vSW5s
aW5lKGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUpOworCitmdW5jdGlvbiB0ZXN0QXJp
dGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRl
bkFzRG91YmxlKGkpOworICAgICAgICBpZiAocmVzdWx0ICE9PSBpKSB7CisgICAgICAgICAgICB0
aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShpKSA9ICIgKyByZXN1bHQgKyAi
LCBleHBlY3RlZCAiICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlX
cml0dGVuQXNEb3VibGUoLTApOworICAgICAgICBpZiAocmVzdWx0ICE9PSAtMCkgeworICAgICAg
ICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoLTApID0gIiArIHJl
c3VsdCArICIsIGV4cGVjdGVkIC0wICI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciB0ZXN0VmFsdWUgPSBpICsgLjU7
CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKHRl
c3RWYWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IHRlc3RWYWx1ZSkgeworICAgICAgICAg
ICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoaSkgPSAiICsgcmVzdWx0
ICsgIiwgZXhwZWN0ZWQgIiArIHRlc3RWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0
aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKE5hTik7CisgICAgICAgIGlmICghaXNOYU4ocmVz
dWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3Vi
bGUoTmFOKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBOYU4iOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoSW5maW5pdHkpOworICAgICAg
ICBpZiAoaXNGaW5pdGUocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRl
bnRpdHlXcml0dGVuQXNEb3VibGUoSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVk
IEluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRl
bkFzRG91YmxlKC1JbmZpbml0eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJl
c3VsdCA+PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5B
c0RvdWJsZSgtSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7
CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJs
ZSgpOworCisKKy8vIFRlc3QgInZhbHVlICsgNDIiLgorZnVuY3Rpb24gYXJpdGhBZGQ0MldyaXR0
ZW5Bc0ludGVnZXIoeCkgeworICAgIHZhciBhID0geCArIDQyOworICAgIHZhciBiID0gNDIgKyB4
OworICAgIGlmICghKGlzTmFOKHgpICYmIGlzTmFOKGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBi
KQorICAgICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3Igb24gYXJpdGhBZGQ0MldyaXR0ZW5Bc0lu
dGVnZXIsIGEgPSAiICsgYSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9Jbmxp
bmUoYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhBZGQ0
MldyaXR0ZW5Bc0ludGVnZXIoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoMTMpOwor
ICAgICAgICBpZiAocmVzdWx0ICE9PSA1NSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRk
NDJXcml0dGVuQXNJbnRlZ2VyKDEzKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCA1NSI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcigtMCk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT09IDQyKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0Mldy
aXR0ZW5Bc0ludGVnZXIoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDQyIjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKDEzLjMpOworICAgICAg
ICBpZiAocmVzdWx0ICE9PSA1NS4zKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0Mldy
aXR0ZW5Bc0ludGVnZXIoMTMuMykgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTUuMyI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7Owor
ICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoTmFOKTsKKyAg
ICAgICAgaWYgKCFpc05hTihyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0
MldyaXR0ZW5Bc0ludGVnZXIoTmFOKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBOYU4iOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5
KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJh
cml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcihJbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhw
ZWN0ZWQgSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVu
QXNJbnRlZ2VyKC1JbmZpbml0eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJl
c3VsdCA+PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVn
ZXIoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtSW5maW5pdHkiOworICAg
ICAgICB9CisgICAgfQorfQordGVzdEFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKCk7CisKKwor
ZnVuY3Rpb24gYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZSh4KSB7CisgICAgdmFyIGEgPSB4ICsg
NDIuMDsKKyAgICB2YXIgYiA9IDQyLiArIHg7CisgICAgaWYgKCEoaXNOYU4oeCkgJiYgaXNOYU4o
YSkgJiYgaXNOYU4oYikpICYmIGEgIT09IGIpCisgICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJv
ciBvbiBhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlLCBhID0gIiArIGEgKyAiIGIgPSAiICsgYjsK
KyAgICByZXR1cm4gYTsKK30KK25vSW5saW5lKGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUpOwor
CitmdW5jdGlvbiB0ZXN0QXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZSgpIHsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQy
V3JpdHRlbkFzRG91YmxlKDEzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNTUpIHsKKyAgICAg
ICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKGkpID0gIiArIHJlc3VsdCAr
ICIsIGV4cGVjdGVkIDU1IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVu
QXNEb3VibGUoLTApOworICAgICAgICBpZiAocmVzdWx0ICE9PSA0MikgeworICAgICAgICAgICAg
dGhyb3cgImFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoLTApID0gIiArIHJlc3VsdCArICIsIGV4
cGVjdGVkIDQyIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNEb3Vi
bGUoMTMuMyk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDU1LjMpIHsKKyAgICAgICAgICAgIHRo
cm93ICJhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKDEzLjMpID0gIiArIHJlc3VsdCArICIsIGV4
cGVjdGVkIDU1LjMiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNE
b3VibGUoTmFOKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKSB7CisgICAgICAgICAgICB0
aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZShOYU4pID0gIiArIHJlc3VsdCArICIsIGV4
cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0Rv
dWJsZShJbmZpbml0eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAg
ICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSkgPSAiICsgcmVz
dWx0ICsgIiwgZXhwZWN0ZWQgSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRo
QWRkNDJXcml0dGVuQXNEb3VibGUoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJl
c3VsdCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3Jp
dHRlbkFzRG91YmxlKC1JbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLUluZmlu
aXR5IjsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RBcml0aEFkZDQyV3JpdHRlbkFzRG91Ymxl
KCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcml0aC1tdWwtd2l0aC1jb25zdGFudHMuanMgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FyaXRoLW11bC13aXRoLWNvbnN0YW50cy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xNTZhYjc5ZTRlMzY1Zjc0Y2Y0YTJmMjA3ZjRmNTMzMmEzMDcwZDk5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcml0
aC1tdWwtd2l0aC1jb25zdGFudHMuanMKQEAgLTAsMCArMSwyMjIgQEAKKy8vIFRlc3QgdmFsdWUg
KiAxLgorZnVuY3Rpb24gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoeCkgeworICAg
IHZhciBhID0geCAqIDE7CisgICAgdmFyIGIgPSAxICogeDsKKyAgICBpZiAoIShpc05hTih4KSAm
JiBpc05hTihhKSAmJiBpc05hTihiKSkgJiYgYSAhPT0gYikKKyAgICAgICAgdGhyb3cgIkludGVy
bmFsIGVycm9yIG9uIGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyLCBhID0gIiArIGEg
KyAiIGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsKK30KK25vSW5saW5lKGFyaXRoTXVsSWRlbnRp
dHlXcml0dGVuQXNJbnRlZ2VyKTsKKworZnVuY3Rpb24gdGVzdEFyaXRoTXVsSWRlbnRpdHlXcml0
dGVuQXNJbnRlZ2VyKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKGkpOwor
ICAgICAgICBpZiAocmVzdWx0ICE9PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJ
ZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiAr
IGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdl
cigtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IC0wKSB7CisgICAgICAgICAgICB0aHJvdyAi
YXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoLTApID0gIiArIHJlc3VsdCArICIsIGV4
cGVjdGVkIC0wIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHRlc3RWYWx1ZSA9IGkgKyAuNTsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKHRlc3RWYWx1ZSk7Cisg
ICAgICAgIGlmIChyZXN1bHQgIT09IHRlc3RWYWx1ZSkgeworICAgICAgICAgICAgdGhyb3cgImFy
aXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKGkpID0gIiArIHJlc3VsdCArICIsIGV4cGVj
dGVkICIgKyB0ZXN0VmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0
eVdyaXR0ZW5Bc0ludGVnZXIoTmFOKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKSB7Cisg
ICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoTmFOKSA9
ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBOYU4iOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFy
aXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlz
RmluaXRlKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3Jp
dHRlbkFzSW50ZWdlcihJbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgSW5maW5p
dHkiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsr
aSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRl
Z2VyKC1JbmZpbml0eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJlc3VsdCA+
PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVn
ZXIoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtSW5maW5pdHkiOworICAg
ICAgICB9CisgICAgfQorfQordGVzdEFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKCk7
CisKKworZnVuY3Rpb24gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSh4KSB7CisgICAg
dmFyIGEgPSB4ICogMS4wOworICAgIHZhciBiID0gMS4gKiB4OworICAgIGlmICghKGlzTmFOKHgp
ICYmIGlzTmFOKGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50
ZXJuYWwgZXJyb3Igb24gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSwgYSA9ICIgKyBh
ICsgIiBiID0gIiArIGI7CisgICAgcmV0dXJuIGE7Cit9Citub0lubGluZShhcml0aE11bElkZW50
aXR5V3JpdHRlbkFzRG91YmxlKTsKKworZnVuY3Rpb24gdGVzdEFyaXRoTXVsSWRlbnRpdHlXcml0
dGVuQXNEb3VibGUoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShpKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPT0gaSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRl
bnRpdHlXcml0dGVuQXNEb3VibGUoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiArIGk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKC0w
KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gLTApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0
aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKC0wKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3Rl
ZCAtMCAiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7
ICsraSkgeworICAgICAgICB2YXIgdGVzdFZhbHVlID0gaSArIC41OworICAgICAgICB2YXIgcmVz
dWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSh0ZXN0VmFsdWUpOworICAgICAg
ICBpZiAocmVzdWx0ICE9PSB0ZXN0VmFsdWUpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11
bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKGkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkICIg
KyB0ZXN0VmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0
ZW5Bc0RvdWJsZShOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAg
ICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKE5hTikgPSAiICsgcmVz
dWx0ICsgIiwgZXhwZWN0ZWQgTmFOIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElk
ZW50aXR5V3JpdHRlbkFzRG91YmxlKEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJl
c3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91
YmxlKEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAg
ICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgtSW5maW5p
dHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSB8fCByZXN1bHQgPj0gMCkgeworICAg
ICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoLUluZmluaXR5
KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtSW5maW5pdHkiOworICAgICAgICB9CisgICAg
fQorfQordGVzdEFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoKTsKKworCisvLyBUZXN0
ICJ2YWx1ZSAqIDQyIi4KK2Z1bmN0aW9uIGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKHgpIHsK
KyAgICB2YXIgYSA9IHggKiA0MjsKKyAgICB2YXIgYiA9IDQyICogeDsKKyAgICBpZiAoIShpc05h
Tih4KSAmJiBpc05hTihhKSAmJiBpc05hTihiKSkgJiYgYSAhPT0gYikKKyAgICAgICAgdGhyb3cg
IkludGVybmFsIGVycm9yIG9uIGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyLCBhID0gIiArIGEg
KyAiIGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsKK30KK25vSW5saW5lKGFyaXRoTXVsNDJXcml0
dGVuQXNJbnRlZ2VyKTsKKworZnVuY3Rpb24gdGVzdEFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2Vy
KCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKDEzKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPT0gNTQ2KSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVn
ZXIoMTMpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDU0NiI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcigtMCk7CisgICAgICAgIGlmIChyZXN1bHQg
IT09IC0wKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIo
LTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC0wIjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKDEzLjMpOworICAgICAgICBpZiAocmVzdWx0ICE9
PSA1NTguNikgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2Vy
KDEzLjMpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDU1OC42IjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcihOYU4pOworICAgICAgICBpZiAoIWlz
TmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzSW50
ZWdlcihOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIg
cmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpOworICAgICAgICBp
ZiAoaXNGaW5pdGUocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0
dGVuQXNJbnRlZ2VyKEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0
eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoLUlu
ZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwgcmVzdWx0ID49IDApIHsK
KyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcigtSW5maW5pdHkp
ID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9
Cit9Cit0ZXN0QXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoKTsKKworCitmdW5jdGlvbiBhcml0
aE11bDQyV3JpdHRlbkFzRG91YmxlKHgpIHsKKyAgICB2YXIgYSA9IHggKiA0Mi4wOworICAgIHZh
ciBiID0gNDIuICogeDsKKyAgICBpZiAoIShpc05hTih4KSAmJiBpc05hTihhKSAmJiBpc05hTihi
KSkgJiYgYSAhPT0gYikKKyAgICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yIG9uIGFyaXRoTXVs
NDJXcml0dGVuQXNEb3VibGUsIGEgPSAiICsgYSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBh
OworfQorbm9JbmxpbmUoYXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJsZSk7CisKK2Z1bmN0aW9uIHRl
c3RBcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3Vi
bGUoMTMpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1NDYpIHsKKyAgICAgICAgICAgIHRocm93
ICJhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKGkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVk
IDU0NiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsg
KytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKC0w
KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gLTApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0
aE11bDQyV3JpdHRlbkFzRG91YmxlKC0wKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtMCI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKDEzLjMpOwor
ICAgICAgICBpZiAocmVzdWx0ICE9PSA1NTguNikgeworICAgICAgICAgICAgdGhyb3cgImFyaXRo
TXVsNDJXcml0dGVuQXNEb3VibGUoMTMuMykgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTU4
LjYiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsr
aSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoTmFO
KTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJp
dGhNdWw0MldyaXR0ZW5Bc0RvdWJsZShOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5h
TiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJsZShJbmZp
bml0eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJv
dyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwg
ZXhwZWN0ZWQgSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0
dGVuQXNEb3VibGUoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwg
cmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzRG91
YmxlKC1JbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLUluZmluaXR5IjsKKyAg
ICAgICAgfQorICAgIH0KK30KK3Rlc3RBcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKCk7ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247575</attachid>
            <date>2015-02-27 16:36:50 -0800</date>
            <delta_ts>2015-02-27 18:17:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142072-20150227163635.patch</filename>
            <type>text/plain</type>
            <size>73247</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MzZlMjI5ODVkMmQ5ZmE4ZjkzN2JkNzVlYTRlYjJiNGEyNDA4MTQ1Li4yMjUxZGMzYTY3Yjg5NzQ2
NjU1NjhmZjk5MmZlM2QxYWI1YjcyOTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjAgQEAKKzIwMTUtMDItMjYgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0pTQ10gVXNlIHRoZSB3YXkgbnVtYmVyIGNvbnN0YW50cyBhcmUg
d3JpdHRlbiB0byBoZWxwIHR5cGUgc3BlY3VsYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjA3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgd2UgaW50ZXJw
cmV0IG51bWVyaWMgY29uc3RhbnQgYmFzZWQgb24gaG93IHRoZXkgYXBwZWFyCisgICAgICAgIGlu
IHRoZSBzb3VyY2UuCisKKyAgICAgICAgQ29uc3RhbnRzIHRoYXQgYXJlIGludGVnZXJzIGJ1dCB3
cml0dGVuIHdpdGggYSBkZWNpbWFsIHBvaW50IG5vdyBjYXJyeSB0aGF0IGluZm9ybWF0aW9uCisg
ICAgICAgIHRvIHRoZSBvcHRpbWl6YXRpbmcgdGllcnMuIEZyb20gdGhlcmUsIHdlIHVzZSB0aGF0
IHRvIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCB0eXBpbmcKKyAgICAgICAgbWF0aCBvcGVyYXRp
b25zIHRvd2FyZCBkb3VibGUgb3BlcmF0aW9ucy4KKworICAgICAgICBGb3IgZXhhbXBsZSwgaW46
CisgICAgICAgICAgICB2YXIgYSA9IHggKyAxLjA7CisgICAgICAgICAgICB2YXIgYiA9IHkgKyAx
OworICAgICAgICBUaGUgQWRkIGZvciBhIHdvdWxkIGJlIGJpYXNlZCB0b3dhcmQgZG91Ymxlcywg
dGhlIEFkZCBmb3IgYiB3b3VsZCBzcGVjdWxhdGUKKyAgICAgICAgaW50ZWdlciBhcyB1c3VhbC4K
KworCisgICAgICAgIFRoZSBnYWlucyBhcmUgdGlueSBidXQgdGhpcyBpcyBhIHByZXJlcXVpc2l0
ZSB0byBtYWtlIG15IG5leHQgcGF0Y2ggdXNlZnVsOgorICAgICAgICAtU3VuU3BpZGVyJ3MgYWNj
ZXNzLWZhbm5rdWNoOiBkZWZpbml0ZWx5IDEuMDY2MXggZmFzdGVyCisgICAgICAgIC1TdW5TcGlk
ZXIncyBtYXRoLWNvcmRpYzogZGVmaW5pdGVseSAxLjAyNjZ4IHNsb3dlcgorICAgICAgICAgICAg
b3ZlcmFsOiBtaWdodCBiZSAxLjAwNjZ4IHNsb3dlci4KKyAgICAgICAgLUtyYWtlbidzIGltYWdp
bmctZGFya3Jvb206IGRlZmluaXRlbHkgMS4wMzMzeCBmYXN0ZXIuCisKKyAgICAgICAgKiBwYXJz
ZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjp0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2Vu
KToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OmxleCk6CisgICAgICAgIFRoZSBsZXhlciBub3cg
Y3JlYXRlIHR3byB0eXBlcyBvZiB0b2tlbnMgZm9yIG51bWJlcjogSU5URUdFUiBhbmQgRE9VQkxF
LgorICAgICAgICBUaG9zZSB0b2tlbiB0eXBlcyBvbmx5IGNhcnJ5IGluZm9ybWF0aW9uIGFib3V0
IGhvdyB0aGUgdmFsdWVzIHdlcmUKKyAgICAgICAgZW50ZXJlZCwgYW4gSU5URUdFUiBkb2VzIG5v
dCBoYXZlIHRvIGJlIGFuIGludGVnZXIsIGl0IGlzIG9ubHkgd3JpdHRlbiBsaWtlIG9uZS4KKyAg
ICAgICAgTGFyZ2UgaW50ZWdlciBzdGlsbCBlbmQgdXAgcmVwcmVzZW50ZWQgYXMgZG91YmxlIGlu
IG1lbW9yeS4KKworICAgICAgICBPbmUgdHJhcCBJIGZlbGwgaW50byB3YXMgdHlwaW5nIG51bWJl
cnMgbGlrZSAxMmUzIGFzIGRvdWJsZS4gVGhpcyBraW5kIG9mIGxpdGVyYWwKKyAgICAgICAgaXMg
ZnJlcXVlbnRseSB1c2VkIGluIGludGVnZXItdHlwZWQgY29kZSwgd2hpbGUgMTIuZTMgd291bGQg
YXBwZWFyIGluIGRvdWJsZS10eXBlZAorICAgICAgICBjb2RlLgorICAgICAgICBCZWNhdXNlIG9m
IHRoYXQsIHRoZSBvbmx5IHNpZ25hbHMgZm9yIGRvdWJsZSBhcmU6IGRlY2ltYWwgcG9pbnQsIG5l
Z2F0aXZlIHplcm8sCisgICAgICAgIGFuZCByaWRpY3Vsb3VzbHkgbGFyZ2UgdmFsdWVzLgorCisg
ICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6RG91Ymxl
Tm9kZTo6RG91YmxlTm9kZSk6CisgICAgICAgIChKU0M6OkludGVnZXJOb2RlOjpJbnRlZ2VyTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6Ok51bWJlck5vZGU6
OnZhbHVlKToKKyAgICAgICAgKEpTQzo6TnVtYmVyTm9kZTo6c2V0VmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICBOdW1iZXIgZ2V0IHNwZWNpYWxpemVkIGluIHR3byBuZXcga2luZCBvZiBub2RlcyBp
biB0aGUgQVNUOiBJbnRlZ2VyTm9kZSBhbmQgRG91YmxlTm9kZS4KKworICAgICAgICAqIGJ5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG91YmxlRXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZUludGVnZXJFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
SW50ZWdlckxpa2VOdW1iZXIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3Vi
bGVMaWtlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlTnVtYmVyRnJv
bUJpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJl
ckZyb21VbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdh
dGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtl
TW9kTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VS
aWdodFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlm
dE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZU51bWJlckV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVO
dW1iZXIpOiBEZWxldGVkLgorICAgICAgICBUaGUgQVNUIGhhcyBzb21lIG9wdGltaXphdGlvbiB0
byByZXNvbHZlIGNvbnN0YW50cyBiZWZvcmUgZW1pdHRpbmcgYnl0ZWNvZGUuCisgICAgICAgIElu
IHRoZSBuZXcgY29kZSwgdGhlIGludGdlciByZXByZXNlbnRhdGlvbiBpcyBrZXB0IGlmIGJvdGgg
b3BlcmFuZHMgd2hlcmUKKyAgICAgICAgYWxzbyByZXByZXNlbnRlZCBhcyBpbnRlZ2Vycy4KKwor
ICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4pOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnByaW50VW5leHBlY3RlZFRva2VuVGV4dCk6CisgICAgICAgICogcGFyc2VyL1BhcnNlclRv
a2Vucy5oOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZURvdWJsZUV4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjpjcmVhdGVJbnRlZ2VyRXhwcik6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
OmNyZWF0ZU51bWJlckV4cHIpOiBEZWxldGVkLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdpc3Rlck5hbWUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50TmFtZSk6CisgICAgICAgIENoYW5nZSBjb25zdGFu
dE5hbWUociwgZ2V0Q29uc3RhbnQocikpIC0+IGNvbnN0YW50TmFtZShyKSB0byBzaW1wbGlmeQor
ICAgICAgICB0aGUgZHVtcCBjb2RlLgorCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5
dGVjb2RlKToKKyAgICAgICAgRHVtcCB0aHJlIHNvdXJlIHJlcHJlc2VudGF0aW9uIGluZm9ybWF0
aW9uIHdlIGhhdmUgd2l0aCBlYWNoIGNvbnN0YW50LgorCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6Cisg
ICAgICAgIChKU0M6OmNvbnN0YW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnRMYXppbHkpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OnNocmlua1RvRml0KToKKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25z
dGFudFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgV2Ug
aGF2ZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gY29uc3RhbnRzIHRoYXQgaGF2ZSB0aGUgc2Ft
ZSB2YWx1ZXMgYnV0IGFyZQorICAgICAgICByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiB0aGUg
c291cmNlLiBWYWx1ZXMgbGlrZSAxLjAgYW5kIDEgbm93IGVuZCB1cAorICAgICAgICBhcyBkaWZm
ZXJlbnQgY29uc3RhbnRzLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkQ29uc3RhbnRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckZyb3plblZh
bHVlcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmFkZFNwZWN1bGF0aW9uTW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKToKKyAgICAgICAgQXJpdGhBZGQgaXMgdmVyeSBh
Z2dyZXNzaXZlIHRvd2FyZCB1c2luZyBJbnQ1Miwgd2hpY2ggaXMgcXVpdGUgdXNlZnVsCisgICAg
ICAgIGluIG1hbnkgYmVuY2htYXJrcy4KKworICAgICAgICBIZXJlIHdlIG5lZWQgdG8gc3BlY2lh
bGl6ZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZm9yY2Ugb3VyIGxpdGVyYWxzCisgICAgICAgIHRv
IEludDUyIGlmIHRoZXJlIHdlcmUgcmVwcmVzZW50ZWQgYXMgZG91YmxlLgorCisgICAgICAgIFRo
ZXJlIGlzIG9uZSBleGNlcHRpb24gdG8gdGhhdCBydWxlOiB3aGVuIHRoZSBvdGhlciBvcGVyYW5k
IGlzIGd1YXJhbnRlZWQKKyAgICAgICAgdG8gY29tZSBmcm9tIGEgTm9kZVJlc3VsdEludDMyLiBU
aGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgc29tZSB3ZWlyZCBjb2RlCisgICAgICAgIGRvaW5nIHN0
dWZmIGxpa2U6CisgICAgICAgICAgICB2YXIgYiA9IGF8MDsKKyAgICAgICAgICAgIHZhciBjID0g
YioyLjA7CisKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldE9wQW5kRGVmYXVsdEZsYWdz
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAg
ICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVl
V2l0aFJlcHJlc2VudGF0aW9uSGFzaFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6
OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaFRyYWl0czo6Y29uc3RydWN0RGVs
ZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6RW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRp
b25IYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1Zh
bHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkVuY29kZWRK
U1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHRlc3RzL3N0
cmVzcy9hcml0aC1hZGQtd2l0aC1jb25zdGFudHMuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9hcml0aC1tdWwtd2l0aC1jb25zdGFudHMuanM6IEFkZGVkLgorCiAyMDE1LTAyLTI1
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIFNTQSBzdGFj
ayBhY2Nlc3NlcyBzaG91bGRuJ3Qgc3BlYWsgb2YgVmFyaWFibGVBY2Nlc3NEYXRhcwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBlZjBhZDRlNjIy
YjY4YTI1MzBhMThlYTJhODdiOTRmYzI5M2NiZThkLi5jMWEyMGNiMjgxNjVkZGUxNjJhYjUzZDQz
ZWM4NDVjZDlkZTQ0MzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcApAQCAtMTcyLDExICsxNzIsNiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgIGR1bXBBc3N1bWluZ0pJVFR5cGUob3V0LCBqaXRUeXBl
KCkpOwogfQogCi1zdGF0aWMgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGssIEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIo
ayksICIpIik7Ci19Ci0KIHN0YXRpYyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkKIHsKICAgICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwoKSwgIihA
aWQiLCBpZDAsICIpIik7CkBAIC0xODUsMTEgKzE4MCwxNyBAQCBzdGF0aWMgQ1N0cmluZyBpZE5h
bWUoaW50IGlkMCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiBDU3RyaW5nIENvZGVCbG9jazo6
cmVnaXN0ZXJOYW1lKGludCByKSBjb25zdAogewogICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChyKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0YW50TmFtZShyLCBnZXRDb25zdGFudChyKSk7
CisgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUocik7CiAKICAgICByZXR1cm4gdG9DU3RyaW5n
KFZpcnR1YWxSZWdpc3RlcihyKSk7CiB9CiAKK0NTdHJpbmcgQ29kZUJsb2NrOjpjb25zdGFudE5h
bWUoaW50IGluZGV4KSBjb25zdAoreworICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25zdGFudChp
bmRleCk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgpLCAiKSIpOworfQorCiBzdGF0aWMgQ1N0cmluZyByZWdleHBUb1NvdXJjZVN0cmluZyhS
ZWdFeHAqIHJlZ0V4cCkKIHsKICAgICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwg
MCB9OwpAQCAtNjA2LDcgKzYwNywxOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtJiBvdXQpCiAgICAgICAgIG91dC5wcmludGYoIlxuQ29uc3RhbnRzOlxuIik7CiAg
ICAgICAgIHNpemVfdCBpID0gMDsKICAgICAgICAgZG8gewotICAgICAgICAgICAgb3V0LnByaW50
ZigiICAgayV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgdG9DU3RyaW5nKG1f
Y29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpLmRhdGEoKSk7CisgICAgICAgICAgICBjb25zdCBj
aGFyKiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHN3
aXRjaCAobV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baV0pIHsKKyAgICAgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgICAgICAg
ICAgc291cmNlQ29kZVJlcHJlc2VudGF0aW9uRGVzY3JpcHRpb24gPSAiOiBpbiBzb3VyY2UgYXMg
ZG91YmxlIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGludGVnZXIiOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246Ok90aGVyOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRl
c2NyaXB0aW9uID0gIiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIgICBrJXUgPSAlcyVzXG4iLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaSksIHRvQ1N0cmluZyhtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKS5kYXRhKCks
IHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICsraTsK
ICAgICAgICAgfSB3aGlsZSAoaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICB9
CkBAIC0xNDQ5LDcgKzE0NjIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAg
ICAgICAgICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBKU05hbWVT
Y29wZTo6VHlwZSBzY29wZVR5cGUgPSAoSlNOYW1lU2NvcGU6OlR5cGUpKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJwdXNoX25hbWVfc2NvcGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgY29uc3RhbnROYW1lKGswLCBnZXRDb25zdGFudChrMCkpLmRhdGEoKSwgKHNjb3BlVHlwZSA9
PSBKU05hbWVTY29wZTo6RnVuY3Rpb25OYW1lU2NvcGUpID8gImZ1bmN0aW9uU2NvcGUiIDogKChz
Y29wZVR5cGUgPT0gSlNOYW1lU2NvcGU6OkNhdGNoU2NvcGUpID8gImNhdGNoU2NvcGUiIDogInVu
a25vd25TY29wZVR5cGUiKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAl
cyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGNv
bnN0YW50TmFtZShrMCkuZGF0YSgpLCAoc2NvcGVUeXBlID09IEpTTmFtZVNjb3BlOjpGdW5jdGlv
bk5hbWVTY29wZSkgPyAiZnVuY3Rpb25TY29wZSIgOiAoKHNjb3BlVHlwZSA9PSBKU05hbWVTY29w
ZTo6Q2F0Y2hTY29wZSkgPyAiY2F0Y2hTY29wZSIgOiAidW5rbm93blNjb3BlVHlwZSIpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKQEAg
LTE0NjYsNyArMTQ3OSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAg
ICAgICBpbnQgazAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBrMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAidGhyb3dfc3RhdGljX2Vycm9yIik7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMiLCBjb25zdGFudE5hbWUoazAsIGdldENvbnN0YW50KGswKSkuZGF0YSgp
LCBrMSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
IiwgY29uc3RhbnROYW1lKGswKS5kYXRhKCksIGsxID8gInRydWUiIDogImZhbHNlIik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CkBAIC0x
NjM5LDYgKzE2NTIsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcs
IENvZGVCbG9jayYgb3RoZXIpCiAgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5t
X2ZpcnN0TGluZUNvbHVtbk9mZnNldCkKICAgICAsIG1fY29kZVR5cGUob3RoZXIubV9jb2RlVHlw
ZSkKICAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykK
KyAgICAsIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90aGVyLm1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVy
Lm1fZnVuY3Rpb25EZWNscykKICAgICAsIG1fZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1bmN0aW9u
RXhwcnMpCiAgICAgLCBtX29zckV4aXRDb3VudGVyKDApCkBAIC0xNzMwLDcgKzE3NDQsNyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2
bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCiAgICAgICAgIHZtKCktPmZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNv
dXJjZUlEKCksIG1fb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwg
bV9vd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAKLSAgICBzZXRD
b25zdGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSk7
CisgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXJzKCksIHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oKSk7CiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkp
CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgb3duZXJFeGVjdXRh
YmxlLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CiAgICAgbV9mdW5jdGlvbkRlY2xzLnJlc2l6ZVRv
Rml0KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CkBAIC0yOTgw
LDYgKzI5OTQsNyBAQCB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJp
bmtNb2RlKQogICAgIAogICAgIGlmIChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7CiAgICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2hyaW5rVG9GaXQoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChtX3JhcmVEYXRhKSB7CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAppbmRleCAwNzI5M2UwM2QwN2RhNWM3NzBmMmQyOTg4NzVjMjliNTk0OGRlNzc3
Li42MWFiM2JkYjM5ZGEzZTgzODJhYTA2Yzk5MzcwZDZlOTRlM2ZlYzRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC02MjgsMTIgKzYyOCwxNCBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudHMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CisgICAgVmVjdG9yPFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigp
IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAgICAgc2l6
ZV90IG51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKTsgfQogICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikK
ICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6
ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5r
bm93bj4oKSk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHYpOworICAgICAgICBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpPdGhlcik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC02NDEs
NiArNjQzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBw
ZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNjQ5LDYgKzY1Miw3IEBAIHB1
YmxpYzoKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGlu
ZGV4KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXhdOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQogCiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNb
aW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTk4MywxMiArOTg3LDE0IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25l
ZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVy
T2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKLSAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNv
bnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMpCisgICAgdm9pZCBz
ZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYg
Y29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbnN0
YW50cy5zaXplKCkgPT0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNpemUoKSk7
CiAgICAgICAgIHNpemVfdCBjb3VudCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMucmVzaXplKGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQo
Km1fdm0sIG93bmVyRXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOworICAgICAgICBt
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjsKICAgICB9CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZSgKQEAgLTk5Niw2
ICsxMDAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1Yklu
Zm9NYXAoKSwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKIAog
ICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCByKSBjb25zdDsKKyAgICBDU3RyaW5nIGNvbnN0
YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OwogICAgIHZvaWQgcHJpbnRVbmFyeU9wKFByaW50U3Ry
ZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25z
dCBjaGFyKiBvcCk7CiAgICAgdm9pZCBwcmludEJpbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0
YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7
CiAgICAgdm9pZCBwcmludENvbmRpdGlvbmFsSnVtcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSos
IGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgaW50IGxvY2F0aW9uLCBj
b25zdCBjaGFyKiBvcCk7CkBAIC0xMDkzLDYgKzExMDAsNyBAQCBwcml2YXRlOgogICAgIC8vIFRP
RE86IFRoaXMgY291bGQganVzdCBiZSBhIHBvaW50ZXIgdG8gbV91bmxpbmtlZENvZGVCbG9jaydz
IGRhdGEsIGJ1dCB0aGUgREZHIG11dGF0ZXMKICAgICAvLyBpdCwgc28gd2UncmUgc3R1Y2sgd2l0
aCBpdCBmb3Igbm93LgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3Rh
bnRSZWdpc3RlcnM7CisgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxG
dW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRGVjbHM7CiAgICAgVmVjdG9yPFdyaXRlQmFy
cmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRXhwcnM7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMDhj
NzI5NzM2NTI5YjEzN2JkYzNiNGE5MDQzYTk5Y2Q3YzYxMDVmNi4uYzdkMmRhNTUxZTM3OTgwYjJi
MGE3MzEyMzRkNGQ4YWNlZDU1ZGYwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTMxOCwxMSArMzE4LDEyIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8SWRlbnRpZmllcj4mIGlkZW50aWZpZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyczsgfQogCiAgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRSZWdp
c3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgfQotICAg
IHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikKKyAgICB1bnNpZ25lZCBhZGRDb25zdGFu
dChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKQogICAgIHsKICAgICAgICAg
dW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAg
ICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCptX3ZtLCB0aGlzLCB2KTsKKyAgICAg
ICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKHNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHVuc2ln
bmVkIGFkZE9yRmluZENvbnN0YW50KEpTVmFsdWUpOwpAQCAtMzMwLDYgKzMzMSw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29u
c3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4
IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgVmVjdG9y
PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAK
ICAgICAvLyBKdW1wcwogICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KQEAgLTM0Nyw2ICszNDksNyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9pZGVudGlm
aWVycy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlu
a1RvRml0KCk7CiAgICAgICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOwogICAgICAg
ICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwpAQCAtNTQ0LDYgKzU0Nyw3IEBAIHByaXZhdGU6
CiAgICAgLy8gQ29uc3RhbnQgUG9vbHMKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlm
aWVyczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0
ZXJzOworICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKICAg
ICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwogICAgIEZ1bmN0aW9u
RXhwcmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRXhwcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDIx
NDAyZWJlZWQxNTFhNWFmZDAyNTVmNDNlMjgzYzBiZTgwYWZmZjMuLmMwYjBiYmM5MzZmY2IwMTdm
YzE3NjA5MWY3MzhiYWIyYWNjYmVkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC05ODIsMTcgKzk4
MiwxOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRFbXB0eVZh
bHVlKCkKICAgICByZXR1cm4gbV9lbXB0eVZhbHVlUmVnaXN0ZXI7CiB9CiAKLVJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKK1JlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdiwgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBpZiAo
IXYpCiAgICAgICAgIHJldHVybiBhZGRDb25zdGFudEVtcHR5VmFsdWUoKTsKIAogICAgIGludCBp
bmRleCA9IG1fbmV4dENvbnN0YW50T2Zmc2V0OwotICAgIEpTVmFsdWVNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2KSwgbV9uZXh0Q29uc3Rh
bnRPZmZzZXQpOworCisgICAgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24gdmFsdWVN
YXBLZXkgeyBKU1ZhbHVlOjplbmNvZGUodiksIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiB9Owor
ICAgIEpTVmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2pzVmFsdWVNYXAuYWRkKHZhbHVl
TWFwS2V5LCBtX25leHRDb25zdGFudE9mZnNldCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KSB7CiAgICAgICAgIG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzLmFwcGVuZChGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIG1fbmV4dENvbnN0YW50T2Zmc2V0KTsKICAgICAgICAgKyttX25leHRD
b25zdGFudE9mZnNldDsKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50KHYpOworICAg
ICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQodiwgc291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KTsKICAgICB9IGVsc2UKICAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIHJldHVybiAmbV9jb25zdGFudFBvb2xSZWdpc3RlcnNbaW5kZXhdOwpAQCAtMTE2NSw5ICsx
MTY3LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQKICAgICByZXR1cm4gZW1pdExvYWQoZHN0
LCBKU1ZhbHVlKHN0cmluZ0luTWFwKSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdikKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdiwgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKLSAgICBS
ZWdpc3RlcklEKiBjb25zdGFudElEID0gYWRkQ29uc3RhbnRWYWx1ZSh2KTsKKyAgICBSZWdpc3Rl
cklEKiBjb25zdGFudElEID0gYWRkQ29uc3RhbnRWYWx1ZSh2LCBzb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pOwogICAgIGlmIChkc3QpCiAgICAgICAgIHJldHVybiBlbWl0TW92ZShkc3QsIGNvbnN0
YW50SUQpOwogICAgIHJldHVybiBjb25zdGFudElEOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU0YzMxMTE1
ZmRiYzkzNDYwZTgzYjQ1NjhkMTY3NjZmODlmNTlmMWMuLjI1NDZiYmY4Y2RiNTMxNjBjN2JiZjhl
ZjUyZjViNTBiNzcyOTM1YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTQ0Myw3ICs0NDMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBk
c3QsIGJvb2wpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3Qs
IGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBKU1ZhbHVlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBKU1ZhbHVlLCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246Ok90aGVyKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWRHbG9i
YWxPYmplY3QoUmVnaXN0ZXJJRCogZHN0KTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VW5h
cnlPcChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwpAQCAtNjU0
LDcgKzY1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaGFzQ29uc3RhbnQo
Y29uc3QgSWRlbnRpZmllciYpIGNvbnN0OwogICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChj
b25zdCBJZGVudGlmaWVyJik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGFkZENvbnN0YW50VmFsdWUo
SlNWYWx1ZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSwg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhl
cik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGFkZENvbnN0YW50RW1wdHlWYWx1ZSgpOwogICAgICAg
ICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKik7CiAKQEAgLTgwMCw2ICs4MDAsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIC8vIENvbnN0YW50IHBvb2wKICAgICAgICAg
SWRlbnRpZmllck1hcCBtX2lkZW50aWZpZXJNYXA7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uLCB1bnNpZ25lZCwgRW5jb2RlZEpTVmFs
dWVXaXRoUmVwcmVzZW50YXRpb25IYXNoLCBFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlv
bkhhc2hUcmFpdHM+IEpTVmFsdWVNYXA7CiAgICAgICAgIEpTVmFsdWVNYXAgbV9qc1ZhbHVlTWFw
OwogICAgICAgICBJZGVudGlmaWVyU3RyaW5nTWFwIG1fc3RyaW5nTWFwOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXgg
MDBhY2NmOWYwNGJjYzcyMGQ1YjBiZjk0ZmY2MmQ1ZTA3MjFlOTg2NC4uYjQyZWNiNzVkOTI0MjQ1
YjVlZjdjM2IwOWYwOTgxNDNmZDFlNGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMTIyLDYgKzEyMiwxNSBAQCBK
U1ZhbHVlIFN0cmluZ05vZGU6OmpzVmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikg
Y29uc3QKICAgICByZXR1cm4gZ2VuZXJhdG9yLmFkZFN0cmluZ0NvbnN0YW50KG1fdmFsdWUpOwog
fQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIE51bWJlck5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
Cit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNWYWx1
ZShnZW5lcmF0b3IpLCBpc0ludGVnZXJOb2RlKCkgPyBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkludGVnZXIgOiBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZSk7Cit9CisKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWdFeHBOb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmNwcAppbmRleCA4NTg1OWQyOGIyZDhhNDI4ODVlZDg0ZmEwOTdhNTY2NzU4MTRlZmE0
Li40N2Q0YTVjMDBiOTU5N2VhYThlZDExNWU5NWE2YjA3MTg4OGIxYzUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxpbnQgcG93
ZXI+CiAgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgIGlm
ICghbm9kZS0+aXNOdW1iZXJDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQ8cG93ZXI+KG5vZGUp
OwogICAgIH0KQEAgLTEwNCw3ICsxMDQsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNXaXRoaW5Q
b3dlck9mVHdvKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKLSAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CisgICAgICAgIGNhc2UgRG91YmxlQ29uc3Rh
bnQ6CisgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50
OiB7CiAgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQ8cG93
ZXI+KG5vZGUpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEyOCw3ICsxMzAsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKLSAgICAg
ICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICAgICAg
aWYgKCFub2RlLT5pc051bWJlckNvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LT5h
c0pTVmFsdWUoKTsKICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCAyYzg1YTg2MTBjZDQ0MzM2MGI4YTM5YjM3MjRkOTZkMjMzMmYxNTBlLi5hNTEzZDdhYTFjMTNh
YWE1ZGJiOGVhZWFkMzUyOTExNmVlNjUzNzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMjUyLDE0ICsyNTIsMjEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBvcGVyYW5kLnRvQ29uc3Rh
bnRJbmRleCgpOwogICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRzLnNp
emUoKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1fY29u
c3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kLm9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICptX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBj
b2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSkgewogICAg
ICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93KGNvbnN0YW50SW5kZXggKyAxKTsKICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsgaSA8IG1fY29uc3Rh
bnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFudHNbaV0g
PSBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2NvbnN0YW50
c1tjb25zdGFudEluZGV4XSA9Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKHZhbHVlKSkpOworCisgICAgICAgICAg
ICAgICAgTm9kZSogY29uc3RhbnROb2RlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBpZiAo
c291cmNlQ29kZVJlcHJlc2VudGF0aW9uID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91
YmxlKQorICAgICAgICAgICAgICAgICAgICBjb25zdGFudE5vZGUgPSBhZGRUb0dyYXBoKERvdWJs
ZUNvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmcoanNEb3VibGVOdW1iZXIodmFs
dWUuYXNOdW1iZXIoKSkpKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBjb25zdGFudE5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBo
LmZyZWV6ZVN0cm9uZyh2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnN0YW50c1tjb25z
dGFudEluZGV4XSA9IGNvbnN0YW50Tm9kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFT
U0VSVChtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSk7CiAgICAgICAgICAgICByZXR1cm4gbV9j
b25zdGFudHNbY29uc3RhbnRJbmRleF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAppbmRleCBhNTM3NDU1YzVlYjY3MjY4ZmU0MWY2NjljYjU3YThkNDRmYmJj
ZTRkLi4xMzVlOGJmMDgxMzBjM2IzNjY2YzE1YTIzNjZhMDU1NzI4ZGZmOTE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTEwNDksNyArMTA0OSw2
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRG91YmxlUmVwOgogICAgICAgICBjYXNlIFZhbHVl
UmVwOgogICAgICAgICBjYXNlIEludDUyUmVwOgotICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50
OgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6IC8v
IFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgogICAgICAgICBjYXNlIEJvb2xlYW5U
b051bWJlcjoKQEAgLTEyMTIsNiArMTIxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEhhdmUg
dGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBh
ZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50Ogog
ICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgICAgICBj
YXNlIEZsdXNoOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCBlNzkw
MWQ4YjUzYjQzOWNkOWE1OWJmZjM5NzEyNDZhYTE3ODdjYjYwLi5hNWU5ZTVlNWIxYzQxYThiNTBk
NGUzODA1NzkwZTcyMjE3MDBmZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcApAQCAtMTA1Myw2ICsxMDUzLDcgQEAgSlNBcnJheUJ1ZmZlclZpZXcqIEdyYXBoOjp0cnlH
ZXRGb2xkYWJsZVZpZXdGb3JDaGlsZDEoTm9kZSogbm9kZSkKIHZvaWQgR3JhcGg6OnJlZ2lzdGVy
RnJvemVuVmFsdWVzKCkKIHsKICAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkucmVzaXplKDAp
OworICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKS5y
ZXNpemUoMCk7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykg
ewogICAgICAgICBpZiAodmFsdWUtPnN0cnVjdHVyZSgpKQogICAgICAgICAgICAgQVNTRVJUKG1f
cGxhbi53ZWFrUmVmZXJlbmNlcy5jb250YWlucyh2YWx1ZS0+c3RydWN0dXJlKCkpKTsKQEAgLTEw
NzgsNiArMTA3OSw3IEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKICAgICAg
ICAgfSB9CiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaHJpbmtUb0ZpdCgp
OworICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKS5z
aHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IDAxZDFhYTZm
MzNlNjk1NWU5OTM4YmU3NTA1MjRlNTQ0YjkxM2MzN2QuLmI1NDQ2ODM0MTg4MWQxMjAxY2ViZDY5
ODRlMDYyNGU2ZjFhNWE2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAg
LTIxNyw5ICsyMTcsOSBAQCBwdWJsaWM6CiAgICAgICAgIE5vZGUqIHJpZ2h0ID0gYWRkLT5jaGls
ZDIoKS5ub2RlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAobGVmdC0+aGFzQ29uc3RhbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnQzMihhZGQs
IHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIsIGxlZnQsIHNvdXJjZSk7CisgICAgICAgICAgICBy
ZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIoYWRkLCByaWdodFNob3VsZFNw
ZWN1bGF0ZUludDMyLCByaWdodCwgbGVmdCwgc291cmNlKTsKICAgICAgICAgaWYgKHJpZ2h0LT5o
YXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1
bGF0ZUludDMyKGFkZCwgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMyLCByaWdodCwgc291cmNlKTsK
KyAgICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnQzMihhZGQs
IGxlZnRTaG91bGRTcGVjdWxhdGVJbnQzMiwgbGVmdCwgcmlnaHQsIHNvdXJjZSk7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnQzMiAmJiByaWdodFNob3Vs
ZFNwZWN1bGF0ZUludDMyICYmIGFkZC0+Y2FuU3BlY3VsYXRlSW50MzIoc291cmNlKSkgPyBTcGVj
dWxhdGVJbnQzMiA6IERvbnRTcGVjdWxhdGVJbnQzMjsKICAgICB9CkBAIC04NTEsNyArODUxLDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNC
bG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ip
OwogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxh
dGVJbnQzMihOb2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnQzMiwgTm9k
ZSogaW1tZWRpYXRlLCBSYXJlQ2FzZVByb2ZpbGluZ1NvdXJjZSBzb3VyY2UpCisgICAgQWRkU3Bl
Y3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKE5vZGUqIGFkZCwg
Ym9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludDMyLCBOb2RlKiBvcGVyYW5kLCBOb2RlKmlt
bWVkaWF0ZSwgUmFyZUNhc2VQcm9maWxpbmdTb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGltbWVkaWF0ZS0+aGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIApAQCAtODYxLDggKzg2
MSwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKCF2YXJpYWJsZVNob3VsZFNw
ZWN1bGF0ZUludDMyKQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVjdWxhdGVJbnQzMjsKKwor
ICAgICAgICAvLyBJbnRlZ2VyIGNvbnN0YW50cyBjYW4gYmUgdHlwZWQgRG91YmxlIGlmIHRoZXkg
YXJlIHdyaXR0ZW4gbGlrZSBhIGRvdWJsZSBpbiB0aGUgc291cmNlIGNvZGUgKGUuZy4gNDIuMCku
CisgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgd2Ugc3RheSBjb25zZXJ2YXRpdmUgdW5sZXNzIHRo
ZSBvdGhlciBvcGVyYW5kIHdhcyBleHBsaWNpdGx5IHR5cGVkIGFzIGludGVnZXIuCisgICAgICAg
IE5vZGVGbGFncyBvcGVyYW5kUmVzdWx0VHlwZSA9IG9wZXJhbmQtPnJlc3VsdCgpOworICAgICAg
ICBpZiAob3BlcmFuZFJlc3VsdFR5cGUgIT0gTm9kZVJlc3VsdEludDMyICYmIGltbWVkaWF0ZVZh
bHVlLmlzRG91YmxlKCkpCisgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludDMyOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSB8fCBpbW1lZGlh
dGVWYWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgaWYgKGpzTnVtYmVyKGltbWVkaWF0ZVZhbHVl
LmFzTnVtYmVyKCkpLmlzSW50MzIoKSB8fCBpbW1lZGlhdGVWYWx1ZS5pc0Jvb2xlYW4oKSkKICAg
ICAgICAgICAgIHJldHVybiBhZGQtPmNhblNwZWN1bGF0ZUludDMyKHNvdXJjZSkgPyBTcGVjdWxh
dGVJbnQzMiA6IERvbnRTcGVjdWxhdGVJbnQzMjsKICAgICAgICAgCiAgICAgICAgIGRvdWJsZSBk
b3VibGVJbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc0RvdWJsZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAppbmRleCBmNWM5ZWM0MzY5Y2JhNTc2ZTFmZWM0ZmM4NTJhNzY5YTQzOGE0ZTIyLi42
OGFhZmVhYzk5NzY4MTZhMTRmMjRhMDdlMTA3YWJjMTFhMDA5YzQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcApAQCAtMTQ4LDYgKzE0OCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKHR5cGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
KyAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPmFzSlNWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbih0eXBlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDogewogICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwpAQCAtNTMyLDcgKzUzNyw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRG91
YmxlUmVwOgogICAgICAgICBjYXNlIFZhbHVlUmVwOgogICAgICAgICBjYXNlIEludDUyUmVwOgot
ICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6
CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCAzMjlhMDc2ODky
YTg1NzNiMmJmOWZjNjg3NWNlOTdkMGFlMDQyNDhmLi41MjVjMTFmYWQ3MjkyYTgwOTIzODhmYzAw
OTE0MTVhNTI1NWRjZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcApAQCAtMTE4LDggKzExOCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9t
eVJlZkNvdW50cy5maW5kKGVkZ2Uubm9kZSgpKS0+dmFsdWUrKzsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFz
RG91YmxlUmVzdWx0KCkgPT0gKGVkZ2UudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSB8fCBlZGdl
LnVzZUtpbmQoKSA9PSBEb3VibGVSZXBSZWFsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IERvdWJs
ZVJlcE1hY2hpbmVJbnRVc2UpKTsKKworICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUVkZ2VX
aXRoRG91YmxlUmVzdWx0SWZOZWNlc3Nhcnkobm9kZSwgZWRnZSk7CiAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzSW50NTJSZXN1bHQoKSA9PSAoZWRn
ZS51c2VLaW5kKCkgPT0gSW50NTJSZXBVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKQEAgLTU0Myw3ICs1
NDMsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAK
KworICAgIHZvaWQgdmFsaWRhdGVFZGdlV2l0aERvdWJsZVJlc3VsdElmTmVjZXNzYXJ5KE5vZGUq
IG5vZGUsIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICghZWRnZS0+aGFzRG91YmxlUmVz
dWx0KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gVGhlIG9ubHkgY2FzZSB3
ZXJlIGFuIGVkZ2UgY2FuIGhhdmUgYSBEb3VibGVSZXN1bHQgd2l0aG91dCBoYXZpbmcgYSBudW1i
ZXItdHlwZSB1c2VLaW5kKCkKKyAgICAgICAgLy8gZm9yIGNvbnN0YW50cyB0aGF0IGFwcGVhciBh
cyBkb3VibGUgaW4gdGhlIHNvdXJjZSBjb2RlIChlLmcuIDQyLjBlMikuCisgICAgICAgIGlmIChl
ZGdlLT5vcCgpID09IERvdWJsZUNvbnN0YW50KQorICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUs
IGVkZ2UpLCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09
IERvdWJsZVJlcFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBSZWFsVXNlIHx8IGVk
Z2UudXNlS2luZCgpID09IERvdWJsZVJlcE1hY2hpbmVJbnRVc2UpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UudXNlS2luZCgpID09IERvdWJs
ZVJlcFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBSZWFsVXNlIHx8IGVkZ2UudXNl
S2luZCgpID09IERvdWJsZVJlcE1hY2hpbmVJbnRVc2UpOworICAgIH0KKwogICAgIHZvaWQgY2hl
Y2tPcGVyYW5kKAogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jaywgT3BlcmFuZHM8c2l6ZV90PiYg
Z2V0TG9jYWxQb3NpdGlvbnMsCiAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4mIHNldExvY2FsUG9z
aXRpb25zLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9BU1RCdWlsZGVyLmgKaW5kZXggODg0MThmMTZhMjAwMjZiMmE2YzAxZjNlMjY4MWQ2MGNk
NWNmNzk5Ni4uZmE2NDk1MWE5ZGYyYjZiNjQ1MDVmYTFlYTM3YTEwMDRiOWE4ZDk5NiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTE5MiwxMCArMTkyLDE1
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBBcnJheU5vZGUobG9jYXRpb24sIGVsaXNpb25zLCBlbGVtcyk7
CiAgICAgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdW1iZXJFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSBkKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVEb3VibGVFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSBkKQog
ICAgIHsKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIE51bWJlck5vZGUobG9jYXRpb24sIGQpOworICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBEb3VibGVOb2RlKGxvY2F0aW9uLCBkKTsKKyAgICB9CisgICAgRXhwcmVz
c2lvbk5vZGUqIGNyZWF0ZUludGVnZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGRvdWJsZSBkKQorICAgIHsKKyAgICAgICAgaW5jQ29uc3RhbnRzKCk7CisgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEludGVnZXJOb2RlKGxvY2F0aW9uLCBkKTsKICAgICB9
CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3RyaW5nKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIHN0cmluZykKQEAgLTc0OCwxMSArNzUzLDI3
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fZXZhbENvdW50Kys7CiAgICAgICAgIG1fc2NvcGUubV9m
ZWF0dXJlcyB8PSBFdmFsRmVhdHVyZTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0
ZU51bWJlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKKyAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBOdW1iZXJOb2RlKGxvY2F0aW9uLCBkKTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgSW50ZWdlck5vZGUobG9jYXRpb24sIGQpOwogICAgIH0KLSAgICAKKyAg
ICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG91YmxlTGlrZU51bWJlcihjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEpIERvdWJsZU5vZGUobG9jYXRpb24sIGQpOworICAgIH0KKyAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlTnVtYmVyRnJvbUJpbmFyeU9wZXJhdGlvbihjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBkb3VibGUgdmFsdWUsIGNvbnN0IE51bWJlck5vZGUmIG9yaWdpbmFs
Tm9kZUEsIGNvbnN0IE51bWJlck5vZGUmIG9yaWdpbmFsTm9kZUIpCisgICAgeworICAgICAgICBp
ZiAob3JpZ2luYWxOb2RlQS5pc0ludGVnZXJOb2RlKCkgJiYgb3JpZ2luYWxOb2RlQi5pc0ludGVn
ZXJOb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9j
YXRpb24sIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZURvdWJsZUxpa2VOdW1iZXIobG9j
YXRpb24sIHZhbHVlKTsKKyAgICB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51bWJlckZy
b21VbmFyeU9wZXJhdGlvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUg
dmFsdWUsIGNvbnN0IE51bWJlck5vZGUmIG9yaWdpbmFsTm9kZSkKKyAgICB7CisgICAgICAgIGlm
IChvcmlnaW5hbE5vZGUuaXNJbnRlZ2VyTm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjcmVh
dGVEb3VibGVMaWtlTnVtYmVyKGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgfQorCiAgICAgVk0qIG1f
dm07CiAgICAgUGFyc2VyQXJlbmEmIG1fcGFyc2VyQXJlbmE7CiAgICAgU291cmNlQ29kZSogbV9z
b3VyY2VDb2RlOwpAQCAtNzkzLDkgKzgxNCw4IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiBF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU5lZ2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIG4pCiB7CiAgICAgaWYgKG4tPmlzTnVt
YmVyKCkpIHsKLSAgICAgICAgTnVtYmVyTm9kZSogbnVtYmVyTm9kZSA9IHN0YXRpY19jYXN0PE51
bWJlck5vZGUqPihuKTsKLSAgICAgICAgbnVtYmVyTm9kZS0+c2V0VmFsdWUoLW51bWJlck5vZGUt
PnZhbHVlKCkpOwotICAgICAgICByZXR1cm4gbnVtYmVyTm9kZTsKKyAgICAgICAgY29uc3QgTnVt
YmVyTm9kZSYgbnVtYmVyTm9kZSA9IHN0YXRpY19jYXN0PGNvbnN0IE51bWJlck5vZGUmPigqbik7
CisgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXJGcm9tVW5hcnlPcGVyYXRpb24obG9jYXRpb24s
IC1udW1iZXJOb2RlLnZhbHVlKCksIG51bWJlck5vZGUpOwogICAgIH0KIAogICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIE5lZ2F0ZU5vZGUobG9jYXRpb24sIG4pOwpAQCAtODA0LDcgKzgy
NCw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTmVnYXRlTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUJpdHdpc2VOb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4
cHJlc3Npb25Ob2RlKiBleHByKQogewogICAgIGlmIChleHByLT5pc051bWJlcigpKQotICAgICAg
ICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB+dG9JbnQzMihzdGF0aWNfY2FzdDxOdW1i
ZXJOb2RlKj4oZXhwciktPnZhbHVlKCkpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJM
aWtlTnVtYmVyKGxvY2F0aW9uLCB+dG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhw
ciktPnZhbHVlKCkpKTsKICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXR3aXNlTm90
Tm9kZShsb2NhdGlvbiwgZXhwcik7CiB9CiAKQEAgLTgxMyw4ICs4MzMsMTEgQEAgRXhwcmVzc2lv
bk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNdWx0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXMKICAgICBleHByMSA9IGV4cHIxLT5zdHJpcFVuYXJ5UGx1cygpOwogICAg
IGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7CiAKLSAgICBpZiAoZXhwcjEtPmlzTnVt
YmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIo
bG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgKiBzdGF0
aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKKyAgICBpZiAoZXhwcjEtPmlz
TnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9k
ZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAg
ICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2Rl
Jj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlckZyb21CaW5hcnlPcGVyYXRp
b24obG9jYXRpb24sIG51bWJlckV4cHIxLnZhbHVlKCkgKiBudW1iZXJFeHByMi52YWx1ZSgpLCBu
dW1iZXJFeHByMSwgbnVtYmVyRXhwcjIpOworICAgIH0KIAogICAgIGlmIChleHByMS0+aXNOdW1i
ZXIoKSAmJiBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpID09IDEpCiAg
ICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFVuYXJ5UGx1c05vZGUobG9jYXRpb24s
IGV4cHIyKTsKQEAgLTgzMCw4ICs4NTMsMTQgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6
Om1ha2VEaXZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3MKICAg
ICBleHByMSA9IGV4cHIxLT5zdHJpcFVuYXJ5UGx1cygpOwogICAgIGV4cHIyID0gZXhwcjItPnN0
cmlwVW5hcnlQbHVzKCk7CiAKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlz
TnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHN0YXRpY19j
YXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgLyBzdGF0aWNfY2FzdDxOdW1iZXJOb2Rl
Kj4oZXhwcjIpLT52YWx1ZSgpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjIt
PmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9k
ZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAg
ICAgZG91YmxlIHJlc3VsdCA9IG51bWJlckV4cHIxLnZhbHVlKCkgLyBudW1iZXJFeHByMi52YWx1
ZSgpOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVzdWx0KSA9PSByZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyRnJvbUJpbmFyeU9wZXJhdGlvbihsb2Nh
dGlvbiwgcmVzdWx0LCBudW1iZXJFeHByMSwgbnVtYmVyRXhwcjIpOworICAgICAgICByZXR1cm4g
Y3JlYXRlRG91YmxlTGlrZU51bWJlcihsb2NhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRGl2Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIApAQCAtODM5LDE2ICs4NjgsMjMgQEAgRXhwcmVzc2lv
bk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNb2ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3MKIHsKICAgICBleHByMSA9IGV4cHIxLT5zdHJpcFVuYXJ5UGx1cygpOwog
ICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7Ci0gICAgCi0gICAgaWYgKGV4cHIx
LT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRl
TnVtYmVyKGxvY2F0aW9uLCBmbW9kKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZh
bHVlKCksIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKKworICAg
IGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBj
b25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigq
ZXhwcjEpOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19j
YXN0PE51bWJlck5vZGUmPigqZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxp
a2VOdW1iZXIobG9jYXRpb24sIGZtb2QobnVtYmVyRXhwcjEudmFsdWUoKSwgbnVtYmVyRXhwcjIu
dmFsdWUoKSkpOworICAgIH0KICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBNb2ROb2Rl
KGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFkZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkg
JiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRp
b24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgKyBzdGF0aWNfY2Fz
dDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKKworICAgIGlmIChleHByMS0+aXNOdW1i
ZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBu
dW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBj
b25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigq
ZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyRnJvbUJpbmFyeU9wZXJhdGlvbihs
b2NhdGlvbiwgbnVtYmVyRXhwcjEudmFsdWUoKSArIG51bWJlckV4cHIyLnZhbHVlKCksIG51bWJl
ckV4cHIxLCBudW1iZXJFeHByMik7CisgICAgfQogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEpIEFkZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7
CiB9CiAKQEAgLTg1Nyw1MCArODkzLDcxIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjpt
YWtlU3ViTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzCiAgICAg
ZXhwcjEgPSBleHByMS0+c3RyaXBVbmFyeVBsdXMoKTsKICAgICBleHByMiA9IGV4cHIyLT5zdHJp
cFVuYXJ5UGx1cygpOwogCi0gICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051
bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCBzdGF0aWNfY2Fz
dDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpIC0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+
KGV4cHIyKS0+dmFsdWUoKSk7CisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5p
c051bWJlcigpKSB7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3Rh
dGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUm
IG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAg
IHJldHVybiBjcmVhdGVOdW1iZXJGcm9tQmluYXJ5T3BlcmF0aW9uKGxvY2F0aW9uLCBudW1iZXJF
eHByMS52YWx1ZSgpIC0gbnVtYmVyRXhwcjIudmFsdWUoKSwgbnVtYmVyRXhwcjEsIG51bWJlckV4
cHIyKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgU3ViTm9kZShsb2Nh
dGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lv
bk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VMZWZ0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIy
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7Ci0gICAgaWYgKGV4cHIxLT5pc051bWJlcigp
ICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0
aW9uLCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpIDw8
ICh0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4
MWYpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsK
KyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1i
ZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIg
PSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51bWJlckV4cHIxLnZhbHVlKCkp
IDw8ICh0b1VJbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICB9CiAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTGVmdFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEs
IGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1
aWxkZXI6Om1ha2VSaWdodFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzKQogewotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+
aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9JbnQz
MihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSA+PiAodG9VSW50MzIo
c3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkgJiAweDFmKSk7CisgICAg
aWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKSB7CisgICAgICAgIGNv
bnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpl
eHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nh
c3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAgIHJldHVybiBjcmVhdGVJbnRlZ2VyTGlr
ZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihudW1iZXJFeHByMS52YWx1ZSgpKSA+PiAodG9VSW50
MzIobnVtYmVyRXhwcjIudmFsdWUoKSkgJiAweDFmKSk7CisgICAgfQogICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIFJpZ2h0U2hpZnROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJp
Z2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFr
ZVVSaWdodFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzKQogewotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIo
KSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9VSW50MzIoc3RhdGlj
X2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgPj4gKHRvVUludDMyKHN0YXRpY19j
YXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpICYgMHgxZikpOworICAgIGlmIChleHBy
MS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1i
ZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOwor
ICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJl
ck5vZGUmPigqZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIo
bG9jYXRpb24sIHRvVUludDMyKG51bWJlckV4cHIxLnZhbHVlKCkpID4+ICh0b1VJbnQzMihudW1i
ZXJFeHByMi52YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VCaXRPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cykKIHsKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0g
ICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8
TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgfCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJl
ck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYg
ZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhw
cjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVt
YmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMy
KG51bWJlckV4cHIxLnZhbHVlKCkpIHwgdG9JbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSk7Cisg
ICAgfQogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdE9yTm9kZShsb2NhdGlvbiwg
ZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUq
IEFTVEJ1aWxkZXI6Om1ha2VCaXRBbmROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMpCiB7Ci0gICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIy
LT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB0b0lu
dDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpICYgdG9JbnQzMihz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSk7CisgICAgaWYgKGV4cHIx
LT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKSB7CisgICAgICAgIGNvbnN0IE51bWJl
ck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMSk7Cisg
ICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVy
Tm9kZSY+KCpleHByMik7CisgICAgICAgIHJldHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihs
b2NhdGlvbiwgdG9JbnQzMihudW1iZXJFeHByMS52YWx1ZSgpKSAmIHRvSW50MzIobnVtYmVyRXhw
cjIudmFsdWUoKSkpOworICAgIH0KICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXRB
bmROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQog
CiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKLSAgICBpZiAoZXhwcjEtPmlz
TnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1i
ZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFs
dWUoKSkgXiB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkp
KTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAg
ICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUlu
dGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51bWJlckV4cHIxLnZhbHVlKCkpIF4g
dG9JbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSk7CisgICAgfQogICAgIHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEpIEJpdFhPck5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTGV4ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKaW5k
ZXggZjEzZmU0ZGVhYzBlZGUwNDM3YzQ5MTdiYTQ4ZjRmMGI5NjUwOWMwZS4uMWVjNjdkZjFiOGU4
YzBkNzMxOTQ5YjEyNzJhOWJjNzVmZmY4MDE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9MZXhlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9MZXhlci5jcHAKQEAgLTQ5NSw2ICs0OTUsMTMgQEAgTGV4ZXI8VD46OkxleGVyKFZNKiB2bSwg
SlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MpCiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNU
b2tlblR5cGUgdG9rZW5UeXBlRm9ySW50ZWdlckxpa2VUb2tlbihkb3VibGUgZG91YmxlVmFsdWUp
Cit7CisgICAgaWYgKChkb3VibGVWYWx1ZSB8fCAhc3RkOjpzaWduYml0KGRvdWJsZVZhbHVlKSkg
JiYgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZG91YmxlVmFsdWUpID09IGRvdWJsZVZhbHVlKQorICAg
ICAgICByZXR1cm4gSU5URUdFUjsKKyAgICByZXR1cm4gRE9VQkxFOworfQorCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KIExleGVyPFQ+Ojp+TGV4ZXIoKQogewpAQCAtMTY4Nyw3ICsxNjk0LDcgQEAg
c3RhcnQ6CiAgICAgICAgICAgICAgICAgdG9rZW4gPSBJTlZBTElEX0hFWF9OVU1CRVJfRVJST1JU
T0s7CiAgICAgICAgICAgICAgICAgZ290byByZXR1cm5FcnJvcjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHRva2VuID0gTlVNQkVSOworICAgICAgICAgICAgdG9rZW4gPSB0b2tlblR5cGVG
b3JJbnRlZ2VyTGlrZVRva2VuKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpOwogICAgICAgICAgICAg
bV9idWZmZXI4LnJlc2l6ZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0x
NzAwLDE3ICsxNzA3LDE5IEBAIHN0YXJ0OgogICAgICAgICB9CiAgICAgICAgIGlmIChpc0FTQ0lJ
T2N0YWxEaWdpdChtX2N1cnJlbnQpKSB7CiAgICAgICAgICAgICBpZiAocGFyc2VPY3RhbCh0b2tl
bkRhdGEtPmRvdWJsZVZhbHVlKSkgewotICAgICAgICAgICAgICAgIHRva2VuID0gTlVNQkVSOwor
ICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5UeXBlRm9ySW50ZWdlckxpa2VUb2tlbih0b2tl
bkRhdGEtPmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBG
QUxMVEhST1VHSDsKICAgICBjYXNlIENoYXJhY3Rlck51bWJlcjoKLSAgICAgICAgaWYgKExJS0VM
WSh0b2tlbiAhPSBOVU1CRVIpKSB7CisgICAgICAgIGlmIChMSUtFTFkodG9rZW4gIT0gSU5URUdF
UiAmJiB0b2tlbiAhPSBET1VCTEUpKSB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlRGVjaW1hbCh0
b2tlbkRhdGEtPmRvdWJsZVZhbHVlKSkgeworICAgICAgICAgICAgICAgIHRva2VuID0gSU5URUdF
UjsKICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJykgewogICAgICAgICAgICAg
ICAgICAgICBzaGlmdCgpOwogaW5OdW1iZXJBZnRlckRlY2ltYWxQb2ludDoKICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VOdW1iZXJBZnRlckRlY2ltYWxQb2ludCgpOworICAgICAgICAgICAgICAg
ICAgICB0b2tlbiA9IERPVUJMRTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWYgKChtX2N1cnJlbnQgfCAweDIwKSA9PSAnZScpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFwYXJzZU51bWJlckFmdGVyRXhwb25lbnRJbmRpY2F0b3IoKSkgewpAQCAtMTcyMSw4ICsxNzMw
LDEwIEBAIGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CiAgICAgICAgICAgICAgICAgdG9rZW5E
YXRhLT5kb3VibGVWYWx1ZSA9IHBhcnNlRG91YmxlKG1fYnVmZmVyOC5kYXRhKCksIG1fYnVmZmVy
OC5zaXplKCksIHBhcnNlZExlbmd0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b2tl
biA9IE5VTUJFUjsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gSU5URUdFUikKKyAgICAg
ICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2VuKHRva2Vu
RGF0YS0+ZG91YmxlVmFsdWUpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
dG9rZW4gPSB0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2VuKHRva2VuRGF0YS0+ZG91YmxlVmFs
dWUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm8gaWRlbnRpZmllcnMgYWxsb3dlZCBkaXJl
Y3RseSBhZnRlciBudW1lcmljIGxpdGVyYWwsIGUuZy4gIjNpbiIgaXMgYmFkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAppbmRleCA5NTA0MDlh
YjgxZmVjOTg5OWU2MWRhNWM3ODY4ZWQ1ODM0NzNlOWVjLi4xMmUzZDRkNmI4OTUyYTAwMWI0NmEz
MThiMDA3NDgzYjc1NzZlNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVDb25zdHJ1Y3RvcnMuaApAQCAtODQsNiArODQsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgewogICAgIH0KIAorICAgIGlubGluZSBEb3VibGVOb2RlOjpEb3VibGVOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBOdW1iZXJO
b2RlKGxvY2F0aW9uLCB2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgaW5saW5lIEludGVnZXJO
b2RlOjpJbnRlZ2VyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUg
dmFsdWUpCisgICAgICAgIDogRG91YmxlTm9kZShsb2NhdGlvbiwgdmFsdWUpCisgICAgeworICAg
IH0KKwogICAgIGlubGluZSBTdHJpbmdOb2RlOjpTdHJpbmdOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIHZhbHVlKQogICAgICAgICA6IENvbnN0
YW50Tm9kZShsb2NhdGlvbiwgUmVzdWx0VHlwZTo6c3RyaW5nVHlwZSgpKQogICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggMjdiYzNm
ODQzNTRjNDQwY2JhOThmZjBlZDAwMTc3ODU4NmQ5ZjViNi4uMzBlZGIwYWUwYzJkYTUzZjNiNDBm
ODk0NjAzMzhmMTllOTA5OTI5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApA
QCAtMjM2LDE2ICsyMzYsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTnVtYmVyTm9k
ZSA6IHB1YmxpYyBDb25zdGFudE5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgTnVtYmVyTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBkb3VibGUgdmFsdWUpOwotICAgICAgICBkb3VibGUg
dmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0VmFsdWUoZG91Ymxl
IHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgICAgICBkb3VibGUgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJOb2Rl
KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGUgZmluYWw7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNOdW1iZXIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc051bWJlcigpIGNvbnN0
IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgdmlydHVhbCBKU1ZhbHVl
IGpzVmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBqc051
bWJlcihtX3ZhbHVlKTsgfQogCiAgICAgICAgIGRvdWJsZSBtX3ZhbHVlOwogICAgIH07CiAKKyAg
ICBjbGFzcyBEb3VibGVOb2RlIDogcHVibGljIE51bWJlck5vZGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgRG91YmxlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBkb3VibGUgdmFsdWUpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzSW50ZWdlck5vZGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIH07CisKKyAgICAvLyBBbiBpbnRlZ2Vy
IG5vZGUgcmVwcmVzZW50IGEgbnVtYmVyIHJlcHJlc2VudGVkIGFzIGFuIGludGVnZXIgKGUuZy4g
NDIgaW5zdGVhZCBvZiA0Mi4sIDQyLjAsIDQyZTApCisgICAgY2xhc3MgSW50ZWdlck5vZGUgOiBw
dWJsaWMgRG91YmxlTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBJbnRlZ2VyTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBkb3VibGUgdmFsdWUpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNJbnRlZ2VyTm9kZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB9OworCiAgICAgY2xhc3MgU3RyaW5nTm9kZSA6IHB1YmxpYyBDb25zdGFudE5vZGUgewogICAg
IHB1YmxpYzoKICAgICAgICAgU3RyaW5nTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5k
ZXggZjRjNGJjNWQ0ZTNmNzJmNjA1MTJiZmM2MDcwMTU2ZDMxNmZhYWJhYy4uNjMxOGZkNjM2YmVi
M2U3YjkxZDI4ZjY0OTZhZWQ5YWY3YmQ4NzE4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcApAQCAtNjI5LDcgKzYyOSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZURlY29uc3RydWN0aW9uUGF0dGVybiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VE
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEpTVG9rZW5UeXBlIHRva2Vu
VHlwZSA9IG1fdG9rZW4ubV90eXBlOwogICAgICAgICAgICAgICAgIHN3aXRjaCAobV90b2tlbi5t
X3R5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIE5VTUJFUjoKKyAgICAgICAgICAgICAgICBj
YXNlIERPVUJMRToKKyAgICAgICAgICAgICAgICBjYXNlIElOVEVHRVI6CiAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20obV92bSwgbV90b2tlbi5tX2Rh
dGEuZG91YmxlVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIFNUUklORzoKQEAgLTE5NDUsNyArMTk0Niw4IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVByb3BlcnR5
KFRyZWVCCiAgICAgICAgICAgICBmYWlsV2l0aE1lc3NhZ2UoIkV4cGVjdGVkIGEgJzonIGZvbGxv
d2luZyB0aGUgcHJvcGVydHkgbmFtZSAnIiwgaWRlbnQtPmltcGwoKSwgIiciKTsKICAgICAgICAg
cmV0dXJuIHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGNvbXBsZXRlLCB0eXBlLCBnZXR0ZXJP
clNldHRlclN0YXJ0T2Zmc2V0KTsKICAgICB9Ci0gICAgY2FzZSBOVU1CRVI6IHsKKyAgICBjYXNl
IERPVUJMRToKKyAgICBjYXNlIElOVEVHRVI6IHsKICAgICAgICAgZG91YmxlIHByb3BlcnR5TmFt
ZSA9IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwogICAgICAgICBuZXh0KCk7CiAgICAgICAg
IGNvbnN1bWVPckZhaWwoQ09MT04sICJFeHBlY3RlZCAnOicgYWZ0ZXIgcHJvcGVydHkgbmFtZSIp
OwpAQCAtMTk3OSw3ICsxOTgxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
UHJvcGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2V0dGVyU2V0dGVyKFQKICAgICBkb3Vi
bGUgbnVtZXJpY1Byb3BlcnR5TmFtZSA9IDA7CiAgICAgaWYgKG1fdG9rZW4ubV90eXBlID09IElE
RU5UIHx8IG1fdG9rZW4ubV90eXBlID09IFNUUklORykKICAgICAgICAgc3RyaW5nUHJvcGVydHlO
YW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgZWxzZSBpZiAobV90b2tlbi5tX3R5cGUg
PT0gTlVNQkVSKQorICAgIGVsc2UgaWYgKG1fdG9rZW4ubV90eXBlID09IERPVUJMRSB8fCBtX3Rv
a2VuLm1fdHlwZSA9PSBJTlRFR0VSKQogICAgICAgICBudW1lcmljUHJvcGVydHlOYW1lID0gbV90
b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CiAgICAgZWxzZQogICAgICAgICBmYWlsRHVlVG9VbmV4
cGVjdGVkVG9rZW4oKTsKQEAgLTIyMjEsMTEgKzIyMjMsMTcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5
RXhwcmUKICAgICAgICAgbmV4dCgpOwogICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVTdHJp
bmcobG9jYXRpb24sIGlkZW50KTsKICAgICB9Ci0gICAgY2FzZSBOVU1CRVI6IHsKKyAgICBjYXNl
IERPVUJMRTogewogICAgICAgICBkb3VibGUgZCA9IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVl
OwogICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAg
ICAgICAgbmV4dCgpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVOdW1iZXJFeHByKGxv
Y2F0aW9uLCBkKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRG91YmxlRXhwcihsb2Nh
dGlvbiwgZCk7CisgICAgfQorICAgIGNhc2UgSU5URUdFUjogeworICAgICAgICBkb3VibGUgZCA9
IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOworICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9j
YXRpb24odG9rZW5Mb2NhdGlvbigpKTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVJbnRlZ2VyRXhwcihsb2NhdGlvbiwgZCk7CiAgICAgfQogICAgIGNhc2Ug
TlVMTFRPS0VOOiB7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0
aW9uKCkpOwpAQCAtMjU3Nyw3ICsyNTg1LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlw
ZT4gdm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6cHJpbnRVbmV4cGVjdGVkVG9rZW5UZXh0KFcKICAg
ICBjYXNlIFNUUklORzoKICAgICAgICAgb3V0LnByaW50KCJVbmV4cGVjdGVkIHN0cmluZyBsaXRl
cmFsICIsIGdldFRva2VuKCkpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBOVU1CRVI6Cisg
ICAgY2FzZSBJTlRFR0VSOgorICAgIGNhc2UgRE9VQkxFOgogICAgICAgICBvdXQucHJpbnQoIlVu
ZXhwZWN0ZWQgbnVtYmVyICciLCBnZXRUb2tlbigpLCAiJyIpOwogICAgICAgICByZXR1cm47CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vu
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAppbmRleCA2
NTIwNTVhNThlZDRlYjNkZWM4ZWFkY2RhYmM0MWJjZWFiYWYwOTFlLi4zZmYyNzk4NjZhZjZlMjg2
OTBiYzA3YzVmNzIxYmM3YTM4MDU2ZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyVG9rZW5zLmgKQEAgLTk0LDcgKzk0LDggQEAgZW51bSBKU1Rva2VuVHlwZSB7CiAg
ICAgQ0xPU0VCUkFDS0VULAogICAgIENPTU1BLAogICAgIFFVRVNUSU9OLAotICAgIE5VTUJFUiwK
KyAgICBJTlRFR0VSLAorICAgIERPVUJMRSwKICAgICBJREVOVCwKICAgICBTVFJJTkcsCiAgICAg
U0VNSUNPTE9OLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIu
aAppbmRleCA2M2IxMzQ4ZmUzMDVkYzQ2OWE2MTFmYmNjNDEwNmFiMzg4M2YwZGEyLi41ODg0ZmIy
ODJlNzU2MWE2NTg2ZDBmNmUxZGE1OTE1MWI4ZDU0YTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAK
ICAgICB0eXBlZGVmIFN5bnRheENoZWNrZXIgRnVuY3Rpb25Cb2R5QnVpbGRlcjsKICAgICBlbnVt
IHsgTm9uZUV4cHIgPSAwLAotICAgICAgICBSZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVFeHByLCBO
dW1iZXJFeHByLCBTdHJpbmdFeHByLAorICAgICAgICBSZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVF
eHByLCBJbnRlZ2VyRXhwciwgRG91YmxlRXhwciwgU3RyaW5nRXhwciwKICAgICAgICAgVGhpc0V4
cHIsIE51bGxFeHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0ZXJhbEV4cHIsCiAg
ICAgICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2Fs
bEV4cHIsCiAgICAgICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJp
bmFyeUV4cHIsCkBAIC0xNTEsNyArMTUxLDggQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBl
IGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVy
biBPYmplY3RMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFycmF5KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gQXJyYXlMaXRlcmFsRXhwcjsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGlu
dCwgaW50KSB7IHJldHVybiBBcnJheUxpdGVyYWxFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUg
Y3JlYXRlTnVtYmVyRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBkb3VibGUpIHsgcmV0dXJu
IE51bWJlckV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVEb3VibGVFeHByKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGRvdWJsZSkgeyByZXR1cm4gRG91YmxlRXhwcjsgfQorICAgIEV4
cHJlc3Npb25UeXBlIGNyZWF0ZUludGVnZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGRv
dWJsZSkgeyByZXR1cm4gSW50ZWdlckV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVT
dHJpbmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciopIHsgcmV0dXJu
IFN0cmluZ0V4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVCb29sZWFuKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGJvb2wpIHsgcmV0dXJuIEJvb2xFeHByOyB9CiAgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlTnVsbChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBOdWxsRXhw
cjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCmluZGV4IGFj
YWIzZmE2MjQwYTExMTJhYTEwZTI5MzFlNmZkYzExNWEwM2JkZjEuLjhhMjYxZTNiYTM5NzFlOTFk
M2UwMThmYmZlYzRmZTFhNjgyY2QxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmgKQEAgLTEyNCw4ICsxMjQsMTUgQEAgaW5saW5lIHVpbnQzMl90IHRvVUlu
dDMyKGRvdWJsZSBudW1iZXIpCiBpbnQ2NF90IHRyeUNvbnZlcnRUb0ludDUyKGRvdWJsZSk7CiBi
b29sIGlzSW50NTIoZG91YmxlKTsKIAorZW51bSBjbGFzcyBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24geworICAgIE90aGVyLAorICAgIEludGVnZXIsCisgICAgRG91YmxlCit9OworCiBjbGFzcyBK
U1ZhbHVlIHsKICAgICBmcmllbmQgc3RydWN0IEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0czsKKyAg
ICBmcmllbmQgc3RydWN0IEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaFRyYWl0
czsKICAgICBmcmllbmQgY2xhc3MgQXNzZW1ibHlIZWxwZXJzOwogICAgIGZyaWVuZCBjbGFzcyBK
SVQ7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKQEAgLTQ0OCw3ICs0NTUsMjYg
QEAgc3RydWN0IEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8RW5jb2RlZEpT
VmFsdWU+IHsKIH07CiAjZW5kaWYKIAotdHlwZWRlZiBIYXNoTWFwPEVuY29kZWRKU1ZhbHVlLCB1
bnNpZ25lZCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHM+IEpT
VmFsdWVNYXA7Cit0eXBlZGVmIHN0ZDo6cGFpcjxFbmNvZGVkSlNWYWx1ZSwgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uPiBFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlvbjsKKworc3RydWN0
IEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8
RW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlV2l0
aFJlcHJlc2VudGF0aW9uIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7
IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWVX
aXRoUmVwcmVzZW50YXRpb24mIHNsb3QpIHsgc2xvdCA9IHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkpLCBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZh
bHVlKEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uIHZhbHVlKSB7IHJldHVybiB2YWx1
ZSA9PSBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpIYXNo
VGFibGVEZWxldGVkVmFsdWUpKSwgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7IH0K
K307CisKK3N0cnVjdCBFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlvbkhhc2ggeworICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0
aW9uJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKEVuY29k
ZWRKU1ZhbHVlSGFzaDo6aGFzaCh2YWx1ZS5maXJzdCksIEludEhhc2g8U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uPjo6aGFzaCh2YWx1ZS5zZWNvbmQpKTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24mIGEsIGNvbnN0IEVu
Y29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKIAogLy8gU3RhbmQtYWxvbmUgaGVscGVyIGZ1bmN0aW9u
cy4KIGlubGluZSBKU1ZhbHVlIGpzTnVsbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2FyaXRoLWFkZC13aXRoLWNvbnN0YW50cy5qcyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJpdGgtYWRkLXdpdGgtY29uc3RhbnRzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI3YmU0MjgyZTgwODkxODQyMWMyM2U2MzhlZjU0MGY2YTM3NWM2ZTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FyaXRoLWFk
ZC13aXRoLWNvbnN0YW50cy5qcwpAQCAtMCwwICsxLDIyMiBAQAorLy8gVGVzdCB2YWx1ZSArIDAu
CitmdW5jdGlvbiBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcih4KSB7CisgICAgdmFy
IGEgPSB4ICsgMDsKKyAgICB2YXIgYiA9IDAgKyB4OworICAgIGlmICghKGlzTmFOKHgpICYmIGlz
TmFOKGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50ZXJuYWwg
ZXJyb3Igb24gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIsIGEgPSAiICsgYSArICIg
YiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhBZGRJZGVudGl0eVdy
aXR0ZW5Bc0ludGVnZXIpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5B
c0ludGVnZXIoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAg
ICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoaSk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50
aXR5V3JpdHRlbkFzSW50ZWdlcihpKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAiICsgaTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKC0w
KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gLTApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0
aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigtMCkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0
ZWQgLTAiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7
ICsraSkgeworICAgICAgICB2YXIgdGVzdFZhbHVlID0gaSArIC41OworICAgICAgICB2YXIgcmVz
dWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIodGVzdFZhbHVlKTsKKyAgICAg
ICAgaWYgKHJlc3VsdCAhPT0gdGVzdFZhbHVlKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhB
ZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQg
IiArIHRlc3RWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3Jp
dHRlbkFzSW50ZWdlcihOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAg
ICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihOYU4pID0gIiAr
IHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhB
ZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5p
dGUocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVu
QXNJbnRlZ2VyKEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0eSI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7
OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIo
LUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwgcmVzdWx0ID49IDAp
IHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigt
SW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7CisgICAgICAg
IH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoKTsKKwor
CitmdW5jdGlvbiBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKHgpIHsKKyAgICB2YXIg
YSA9IHggKyAwLjA7CisgICAgdmFyIGIgPSAwLiArIHg7CisgICAgaWYgKCEoaXNOYU4oeCkgJiYg
aXNOYU4oYSkgJiYgaXNOYU4oYikpICYmIGEgIT09IGIpCisgICAgICAgIHRocm93ICJJbnRlcm5h
bCBlcnJvciBvbiBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlLCBhID0gIiArIGEgKyAi
IGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsKK30KK25vSW5saW5lKGFyaXRoQWRkSWRlbnRpdHlX
cml0dGVuQXNEb3VibGUpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5B
c0RvdWJsZSgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKGkpOworICAgICAg
ICBpZiAocmVzdWx0ICE9PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0
eVdyaXR0ZW5Bc0RvdWJsZShpKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAiICsgaTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoLTApOwor
ICAgICAgICBpZiAocmVzdWx0ICE9PSAtMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRk
SWRlbnRpdHlXcml0dGVuQXNEb3VibGUoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC0w
ICI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7CisgICAgICAgIHZhciB0ZXN0VmFsdWUgPSBpICsgLjU7CisgICAgICAgIHZhciByZXN1bHQg
PSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKHRlc3RWYWx1ZSk7CisgICAgICAgIGlm
IChyZXN1bHQgIT09IHRlc3RWYWx1ZSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRl
bnRpdHlXcml0dGVuQXNEb3VibGUoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiArIHRl
c3RWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0
OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFz
RG91YmxlKE5hTik7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkgeworICAgICAgICAgICAg
dGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoTmFOKSA9ICIgKyByZXN1bHQg
KyAiLCBleHBlY3RlZCBOYU4iOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRp
dHlXcml0dGVuQXNEb3VibGUoSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0
KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUo
SW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIEluZmluaXR5IjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAg
IHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKC1JbmZpbml0eSk7
CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJlc3VsdCA+PSAwKSB7CisgICAgICAg
ICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgtSW5maW5pdHkpID0g
IiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9Cit9
Cit0ZXN0QXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgpOworCisKKy8vIFRlc3QgInZh
bHVlICsgNDIiLgorZnVuY3Rpb24gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoeCkgeworICAg
IHZhciBhID0geCArIDQyOworICAgIHZhciBiID0gNDIgKyB4OworICAgIGlmICghKGlzTmFOKHgp
ICYmIGlzTmFOKGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50
ZXJuYWwgZXJyb3Igb24gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIsIGEgPSAiICsgYSArICIg
YiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhBZGQ0MldyaXR0ZW5B
c0ludGVnZXIpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoKSB7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoMTMpOworICAgICAgICBpZiAocmVzdWx0ICE9
PSA1NSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKDEz
KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCA1NSI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBh
cml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcigtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDQy
KSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoLTApID0g
IiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDQyIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRo
QWRkNDJXcml0dGVuQXNJbnRlZ2VyKDEzLjMpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1NS4z
KSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoMTMuMykg
PSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTUuMyI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0g
YXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoTmFOKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1
bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoTmFO
KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBOYU4iOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IGFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmlu
aXRlKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzSW50
ZWdlcihJbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgSW5maW5pdHkiOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKC1JbmZpbml0eSk7
CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJlc3VsdCA+PSAwKSB7CisgICAgICAg
ICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoLUluZmluaXR5KSA9ICIgKyBy
ZXN1bHQgKyAiLCBleHBlY3RlZCAtSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorfQordGVz
dEFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKCk7CisKKworZnVuY3Rpb24gYXJpdGhBZGQ0Mldy
aXR0ZW5Bc0RvdWJsZSh4KSB7CisgICAgdmFyIGEgPSB4ICsgNDIuMDsKKyAgICB2YXIgYiA9IDQy
LiArIHg7CisgICAgaWYgKCEoaXNOYU4oeCkgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpICYmIGEg
IT09IGIpCisgICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvciBvbiBhcml0aEFkZDQyV3JpdHRl
bkFzRG91YmxlLCBhID0gIiArIGEgKyAiIGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsKK30KK25v
SW5saW5lKGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhB
ZGQ0MldyaXR0ZW5Bc0RvdWJsZSgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKDEzKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNTUpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFk
ZDQyV3JpdHRlbkFzRG91YmxlKGkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDU1IjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoLTApOworICAgICAg
ICBpZiAocmVzdWx0ICE9PSA0MikgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkNDJXcml0
dGVuQXNEb3VibGUoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDQyIjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoMTMuMyk7CisgICAgICAgIGlm
IChyZXN1bHQgIT09IDU1LjMpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRl
bkFzRG91YmxlKDEzLjMpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDU1LjMiOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoTmFOKTsKKyAgICAgICAg
aWYgKCFpc05hTihyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0
ZW5Bc0RvdWJsZShOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAg
ICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSk7CisgICAg
ICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0
MldyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgSW5m
aW5pdHkiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7
ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUo
LUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwgcmVzdWx0ID49IDAp
IHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKC1JbmZpbml0
eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLUluZmluaXR5IjsKKyAgICAgICAgfQorICAg
IH0KK30KK3Rlc3RBcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKCk7ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9hcml0aC1tdWwtd2l0aC1jb25zdGFudHMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2FyaXRoLW11bC13aXRoLWNvbnN0YW50cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTZhYjc5
ZTRlMzY1Zjc0Y2Y0YTJmMjA3ZjRmNTMzMmEzMDcwZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcml0aC1tdWwtd2l0aC1jb25zdGFudHMu
anMKQEAgLTAsMCArMSwyMjIgQEAKKy8vIFRlc3QgdmFsdWUgKiAxLgorZnVuY3Rpb24gYXJpdGhN
dWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoeCkgeworICAgIHZhciBhID0geCAqIDE7CisgICAg
dmFyIGIgPSAxICogeDsKKyAgICBpZiAoIShpc05hTih4KSAmJiBpc05hTihhKSAmJiBpc05hTihi
KSkgJiYgYSAhPT0gYikKKyAgICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yIG9uIGFyaXRoTXVs
SWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyLCBhID0gIiArIGEgKyAiIGIgPSAiICsgYjsKKyAgICBy
ZXR1cm4gYTsKK30KK25vSW5saW5lKGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKTsK
KworZnVuY3Rpb24gdGVzdEFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKCkgeworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFy
aXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKGkpOworICAgICAgICBpZiAocmVzdWx0ICE9
PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVn
ZXIoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiArIGk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigtMCk7CisgICAgICAgIGlmIChy
ZXN1bHQgIT09IC0wKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0
ZW5Bc0ludGVnZXIoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC0wIjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAg
dmFyIHRlc3RWYWx1ZSA9IGkgKyAuNTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRl
bnRpdHlXcml0dGVuQXNJbnRlZ2VyKHRlc3RWYWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09
IHRlc3RWYWx1ZSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlXcml0dGVu
QXNJbnRlZ2VyKGkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkICIgKyB0ZXN0VmFsdWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7Owor
ICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoTmFO
KTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJp
dGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoTmFOKSA9ICIgKyByZXN1bHQgKyAiLCBleHBl
Y3RlZCBOYU4iOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
ZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVu
QXNJbnRlZ2VyKEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkpIHsKKyAg
ICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihJbmZpbml0
eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgSW5maW5pdHkiOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKC1JbmZpbml0eSk7CisgICAg
ICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJlc3VsdCA+PSAwKSB7CisgICAgICAgICAgICB0
aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoLUluZmluaXR5KSA9ICIgKyBy
ZXN1bHQgKyAiLCBleHBlY3RlZCAtSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorfQordGVz
dEFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKCk7CisKKworZnVuY3Rpb24gYXJpdGhN
dWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSh4KSB7CisgICAgdmFyIGEgPSB4ICogMS4wOworICAg
IHZhciBiID0gMS4gKiB4OworICAgIGlmICghKGlzTmFOKHgpICYmIGlzTmFOKGEpICYmIGlzTmFO
KGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3Igb24gYXJpdGhN
dWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSwgYSA9ICIgKyBhICsgIiBiID0gIiArIGI7CisgICAg
cmV0dXJuIGE7Cit9Citub0lubGluZShhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKTsK
KworZnVuY3Rpb24gdGVzdEFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoKSB7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJp
dGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShpKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0g
aSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUo
aSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgIiArIGk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKC0wKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPT0gLTApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFz
RG91YmxlKC0wKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtMCAiOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIg
dGVzdFZhbHVlID0gaSArIC41OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0
eVdyaXR0ZW5Bc0RvdWJsZSh0ZXN0VmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICE9PSB0ZXN0
VmFsdWUpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91
YmxlKGkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkICIgKyB0ZXN0VmFsdWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAg
ICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShOYU4pOworICAg
ICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElk
ZW50aXR5V3JpdHRlbkFzRG91YmxlKE5hTikgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgTmFO
IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kp
IHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91Ymxl
KEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkpIHsKKyAgICAgICAgICAg
IHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKEluZmluaXR5KSA9ICIgKyBy
ZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJp
dGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgtSW5maW5pdHkpOworICAgICAgICBpZiAoaXNG
aW5pdGUocmVzdWx0KSB8fCByZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRo
TXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBl
eHBlY3RlZCAtSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorfQordGVzdEFyaXRoTXVsSWRl
bnRpdHlXcml0dGVuQXNEb3VibGUoKTsKKworCisvLyBUZXN0ICJ2YWx1ZSAqIDQyIi4KK2Z1bmN0
aW9uIGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKHgpIHsKKyAgICB2YXIgYSA9IHggKiA0MjsK
KyAgICB2YXIgYiA9IDQyICogeDsKKyAgICBpZiAoIShpc05hTih4KSAmJiBpc05hTihhKSAmJiBp
c05hTihiKSkgJiYgYSAhPT0gYikKKyAgICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yIG9uIGFy
aXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyLCBhID0gIiArIGEgKyAiIGIgPSAiICsgYjsKKyAgICBy
ZXR1cm4gYTsKK30KK25vSW5saW5lKGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKTsKKworZnVu
Y3Rpb24gdGVzdEFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKCkgeworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0
dGVuQXNJbnRlZ2VyKDEzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNTQ2KSB7CisgICAgICAg
ICAgICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoMTMpID0gIiArIHJlc3VsdCAr
ICIsIGV4cGVjdGVkIDU0NiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRl
bkFzSW50ZWdlcigtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IC0wKSB7CisgICAgICAgICAg
ICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoLTApID0gIiArIHJlc3VsdCArICIs
IGV4cGVjdGVkIC0wIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNJ
bnRlZ2VyKDEzLjMpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1NTguNikgeworICAgICAgICAg
ICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKDEzLjMpID0gIiArIHJlc3VsdCAr
ICIsIGV4cGVjdGVkIDU1OC42IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3Jp
dHRlbkFzSW50ZWdlcihOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAg
ICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcihOYU4pID0gIiArIHJlc3Vs
dCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0Mldy
aXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSkg
eworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5
KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVz
dWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoLUluZmluaXR5KTsKKyAgICAgICAgaWYg
KGlzRmluaXRlKHJlc3VsdCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJh
cml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcigtSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4
cGVjdGVkIC1JbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhNdWw0Mldy
aXR0ZW5Bc0ludGVnZXIoKTsKKworCitmdW5jdGlvbiBhcml0aE11bDQyV3JpdHRlbkFzRG91Ymxl
KHgpIHsKKyAgICB2YXIgYSA9IHggKiA0Mi4wOworICAgIHZhciBiID0gNDIuICogeDsKKyAgICBp
ZiAoIShpc05hTih4KSAmJiBpc05hTihhKSAmJiBpc05hTihiKSkgJiYgYSAhPT0gYikKKyAgICAg
ICAgdGhyb3cgIkludGVybmFsIGVycm9yIG9uIGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUsIGEg
PSAiICsgYSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhN
dWw0MldyaXR0ZW5Bc0RvdWJsZSk7CisKK2Z1bmN0aW9uIHRlc3RBcml0aE11bDQyV3JpdHRlbkFz
RG91YmxlKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoMTMpOworICAgICAgICBpZiAo
cmVzdWx0ICE9PSA1NDYpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFz
RG91YmxlKGkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIDU0NiI7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKC0wKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPT0gLTApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzRG91Ymxl
KC0wKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtMCI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKDEzLjMpOworICAgICAgICBpZiAocmVzdWx0ICE9
PSA1NTguNikgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUo
MTMuMykgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTU4LjYiOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoTmFOKTsKKyAgICAgICAgaWYgKCFpc05h
TihyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJs
ZShOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVz
dWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSk7CisgICAgICAgIGlmIChp
c0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5B
c0RvdWJsZShJbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgSW5maW5pdHkiOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoLUluZmluaXR5
KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAg
ICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKC1JbmZpbml0eSkgPSAiICsg
cmVzdWx0ICsgIiwgZXhwZWN0ZWQgLUluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KK30KK3Rl
c3RBcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247578</attachid>
            <date>2015-02-27 18:17:42 -0800</date>
            <delta_ts>2015-02-27 19:21:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142072-20150227181727.patch</filename>
            <type>text/plain</type>
            <size>74017</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MzZlMjI5ODVkMmQ5ZmE4ZjkzN2JkNzVlYTRlYjJiNGEyNDA4MTQ1Li4yMjUxZGMzYTY3Yjg5NzQ2
NjU1NjhmZjk5MmZlM2QxYWI1YjcyOTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjAgQEAKKzIwMTUtMDItMjYgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0pTQ10gVXNlIHRoZSB3YXkgbnVtYmVyIGNvbnN0YW50cyBhcmUg
d3JpdHRlbiB0byBoZWxwIHR5cGUgc3BlY3VsYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjA3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgd2UgaW50ZXJw
cmV0IG51bWVyaWMgY29uc3RhbnQgYmFzZWQgb24gaG93IHRoZXkgYXBwZWFyCisgICAgICAgIGlu
IHRoZSBzb3VyY2UuCisKKyAgICAgICAgQ29uc3RhbnRzIHRoYXQgYXJlIGludGVnZXJzIGJ1dCB3
cml0dGVuIHdpdGggYSBkZWNpbWFsIHBvaW50IG5vdyBjYXJyeSB0aGF0IGluZm9ybWF0aW9uCisg
ICAgICAgIHRvIHRoZSBvcHRpbWl6YXRpbmcgdGllcnMuIEZyb20gdGhlcmUsIHdlIHVzZSB0aGF0
IHRvIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCB0eXBpbmcKKyAgICAgICAgbWF0aCBvcGVyYXRp
b25zIHRvd2FyZCBkb3VibGUgb3BlcmF0aW9ucy4KKworICAgICAgICBGb3IgZXhhbXBsZSwgaW46
CisgICAgICAgICAgICB2YXIgYSA9IHggKyAxLjA7CisgICAgICAgICAgICB2YXIgYiA9IHkgKyAx
OworICAgICAgICBUaGUgQWRkIGZvciBhIHdvdWxkIGJlIGJpYXNlZCB0b3dhcmQgZG91Ymxlcywg
dGhlIEFkZCBmb3IgYiB3b3VsZCBzcGVjdWxhdGUKKyAgICAgICAgaW50ZWdlciBhcyB1c3VhbC4K
KworCisgICAgICAgIFRoZSBnYWlucyBhcmUgdGlueSBidXQgdGhpcyBpcyBhIHByZXJlcXVpc2l0
ZSB0byBtYWtlIG15IG5leHQgcGF0Y2ggdXNlZnVsOgorICAgICAgICAtU3VuU3BpZGVyJ3MgYWNj
ZXNzLWZhbm5rdWNoOiBkZWZpbml0ZWx5IDEuMDY2MXggZmFzdGVyCisgICAgICAgIC1TdW5TcGlk
ZXIncyBtYXRoLWNvcmRpYzogZGVmaW5pdGVseSAxLjAyNjZ4IHNsb3dlcgorICAgICAgICAgICAg
b3ZlcmFsOiBtaWdodCBiZSAxLjAwNjZ4IHNsb3dlci4KKyAgICAgICAgLUtyYWtlbidzIGltYWdp
bmctZGFya3Jvb206IGRlZmluaXRlbHkgMS4wMzMzeCBmYXN0ZXIuCisKKyAgICAgICAgKiBwYXJz
ZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjp0b2tlblR5cGVGb3JJbnRlZ2VyTGlrZVRva2Vu
KToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OmxleCk6CisgICAgICAgIFRoZSBsZXhlciBub3cg
Y3JlYXRlIHR3byB0eXBlcyBvZiB0b2tlbnMgZm9yIG51bWJlcjogSU5URUdFUiBhbmQgRE9VQkxF
LgorICAgICAgICBUaG9zZSB0b2tlbiB0eXBlcyBvbmx5IGNhcnJ5IGluZm9ybWF0aW9uIGFib3V0
IGhvdyB0aGUgdmFsdWVzIHdlcmUKKyAgICAgICAgZW50ZXJlZCwgYW4gSU5URUdFUiBkb2VzIG5v
dCBoYXZlIHRvIGJlIGFuIGludGVnZXIsIGl0IGlzIG9ubHkgd3JpdHRlbiBsaWtlIG9uZS4KKyAg
ICAgICAgTGFyZ2UgaW50ZWdlciBzdGlsbCBlbmQgdXAgcmVwcmVzZW50ZWQgYXMgZG91YmxlIGlu
IG1lbW9yeS4KKworICAgICAgICBPbmUgdHJhcCBJIGZlbGwgaW50byB3YXMgdHlwaW5nIG51bWJl
cnMgbGlrZSAxMmUzIGFzIGRvdWJsZS4gVGhpcyBraW5kIG9mIGxpdGVyYWwKKyAgICAgICAgaXMg
ZnJlcXVlbnRseSB1c2VkIGluIGludGVnZXItdHlwZWQgY29kZSwgd2hpbGUgMTIuZTMgd291bGQg
YXBwZWFyIGluIGRvdWJsZS10eXBlZAorICAgICAgICBjb2RlLgorICAgICAgICBCZWNhdXNlIG9m
IHRoYXQsIHRoZSBvbmx5IHNpZ25hbHMgZm9yIGRvdWJsZSBhcmU6IGRlY2ltYWwgcG9pbnQsIG5l
Z2F0aXZlIHplcm8sCisgICAgICAgIGFuZCByaWRpY3Vsb3VzbHkgbGFyZ2UgdmFsdWVzLgorCisg
ICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6RG91Ymxl
Tm9kZTo6RG91YmxlTm9kZSk6CisgICAgICAgIChKU0M6OkludGVnZXJOb2RlOjpJbnRlZ2VyTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6Ok51bWJlck5vZGU6
OnZhbHVlKToKKyAgICAgICAgKEpTQzo6TnVtYmVyTm9kZTo6c2V0VmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICBOdW1iZXIgZ2V0IHNwZWNpYWxpemVkIGluIHR3byBuZXcga2luZCBvZiBub2RlcyBp
biB0aGUgQVNUOiBJbnRlZ2VyTm9kZSBhbmQgRG91YmxlTm9kZS4KKworICAgICAgICAqIGJ5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG91YmxlRXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZUludGVnZXJFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
SW50ZWdlckxpa2VOdW1iZXIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3Vi
bGVMaWtlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlTnVtYmVyRnJv
bUJpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJl
ckZyb21VbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdh
dGVOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtl
TW9kTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VS
aWdodFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlm
dE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZU51bWJlckV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVO
dW1iZXIpOiBEZWxldGVkLgorICAgICAgICBUaGUgQVNUIGhhcyBzb21lIG9wdGltaXphdGlvbiB0
byByZXNvbHZlIGNvbnN0YW50cyBiZWZvcmUgZW1pdHRpbmcgYnl0ZWNvZGUuCisgICAgICAgIElu
IHRoZSBuZXcgY29kZSwgdGhlIGludGdlciByZXByZXNlbnRhdGlvbiBpcyBrZXB0IGlmIGJvdGgg
b3BlcmFuZHMgd2hlcmUKKyAgICAgICAgYWxzbyByZXByZXNlbnRlZCBhcyBpbnRlZ2Vycy4KKwor
ICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4pOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnByaW50VW5leHBlY3RlZFRva2VuVGV4dCk6CisgICAgICAgICogcGFyc2VyL1BhcnNlclRv
a2Vucy5oOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZURvdWJsZUV4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjpjcmVhdGVJbnRlZ2VyRXhwcik6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
OmNyZWF0ZU51bWJlckV4cHIpOiBEZWxldGVkLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdpc3Rlck5hbWUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50TmFtZSk6CisgICAgICAgIENoYW5nZSBjb25zdGFu
dE5hbWUociwgZ2V0Q29uc3RhbnQocikpIC0+IGNvbnN0YW50TmFtZShyKSB0byBzaW1wbGlmeQor
ICAgICAgICB0aGUgZHVtcCBjb2RlLgorCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5
dGVjb2RlKToKKyAgICAgICAgRHVtcCB0aHJlIHNvdXJlIHJlcHJlc2VudGF0aW9uIGluZm9ybWF0
aW9uIHdlIGhhdmUgd2l0aCBlYWNoIGNvbnN0YW50LgorCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6Cisg
ICAgICAgIChKU0M6OmNvbnN0YW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnRMYXppbHkpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OnNocmlua1RvRml0KToKKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25z
dGFudFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgV2Ug
aGF2ZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gY29uc3RhbnRzIHRoYXQgaGF2ZSB0aGUgc2Ft
ZSB2YWx1ZXMgYnV0IGFyZQorICAgICAgICByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiB0aGUg
c291cmNlLiBWYWx1ZXMgbGlrZSAxLjAgYW5kIDEgbm93IGVuZCB1cAorICAgICAgICBhcyBkaWZm
ZXJlbnQgY29uc3RhbnRzLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkQ29uc3RhbnRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckZyb3plblZh
bHVlcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmFkZFNwZWN1bGF0aW9uTW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKToKKyAgICAgICAgQXJpdGhBZGQgaXMgdmVyeSBh
Z2dyZXNzaXZlIHRvd2FyZCB1c2luZyBJbnQ1Miwgd2hpY2ggaXMgcXVpdGUgdXNlZnVsCisgICAg
ICAgIGluIG1hbnkgYmVuY2htYXJrcy4KKworICAgICAgICBIZXJlIHdlIG5lZWQgdG8gc3BlY2lh
bGl6ZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZm9yY2Ugb3VyIGxpdGVyYWxzCisgICAgICAgIHRv
IEludDUyIGlmIHRoZXJlIHdlcmUgcmVwcmVzZW50ZWQgYXMgZG91YmxlLgorCisgICAgICAgIFRo
ZXJlIGlzIG9uZSBleGNlcHRpb24gdG8gdGhhdCBydWxlOiB3aGVuIHRoZSBvdGhlciBvcGVyYW5k
IGlzIGd1YXJhbnRlZWQKKyAgICAgICAgdG8gY29tZSBmcm9tIGEgTm9kZVJlc3VsdEludDMyLiBU
aGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgc29tZSB3ZWlyZCBjb2RlCisgICAgICAgIGRvaW5nIHN0
dWZmIGxpa2U6CisgICAgICAgICAgICB2YXIgYiA9IGF8MDsKKyAgICAgICAgICAgIHZhciBjID0g
YioyLjA7CisKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldE9wQW5kRGVmYXVsdEZsYWdz
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAg
ICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1ZhbHVl
V2l0aFJlcHJlc2VudGF0aW9uSGFzaFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6
OkVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaFRyYWl0czo6Y29uc3RydWN0RGVs
ZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6RW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRp
b25IYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kZWRKU1Zh
bHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkVuY29kZWRK
U1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHRlc3RzL3N0
cmVzcy9hcml0aC1hZGQtd2l0aC1jb25zdGFudHMuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9hcml0aC1tdWwtd2l0aC1jb25zdGFudHMuanM6IEFkZGVkLgorCiAyMDE1LTAyLTI1
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIFNTQSBzdGFj
ayBhY2Nlc3NlcyBzaG91bGRuJ3Qgc3BlYWsgb2YgVmFyaWFibGVBY2Nlc3NEYXRhcwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBlZjBhZDRlNjIy
YjY4YTI1MzBhMThlYTJhODdiOTRmYzI5M2NiZThkLi5jMWEyMGNiMjgxNjVkZGUxNjJhYjUzZDQz
ZWM4NDVjZDlkZTQ0MzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcApAQCAtMTcyLDExICsxNzIsNiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgIGR1bXBBc3N1bWluZ0pJVFR5cGUob3V0LCBqaXRUeXBl
KCkpOwogfQogCi1zdGF0aWMgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGssIEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIo
ayksICIpIik7Ci19Ci0KIHN0YXRpYyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkKIHsKICAgICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwoKSwgIihA
aWQiLCBpZDAsICIpIik7CkBAIC0xODUsMTEgKzE4MCwxNyBAQCBzdGF0aWMgQ1N0cmluZyBpZE5h
bWUoaW50IGlkMCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiBDU3RyaW5nIENvZGVCbG9jazo6
cmVnaXN0ZXJOYW1lKGludCByKSBjb25zdAogewogICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChyKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0YW50TmFtZShyLCBnZXRDb25zdGFudChyKSk7
CisgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUocik7CiAKICAgICByZXR1cm4gdG9DU3RyaW5n
KFZpcnR1YWxSZWdpc3RlcihyKSk7CiB9CiAKK0NTdHJpbmcgQ29kZUJsb2NrOjpjb25zdGFudE5h
bWUoaW50IGluZGV4KSBjb25zdAoreworICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25zdGFudChp
bmRleCk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgpLCAiKSIpOworfQorCiBzdGF0aWMgQ1N0cmluZyByZWdleHBUb1NvdXJjZVN0cmluZyhS
ZWdFeHAqIHJlZ0V4cCkKIHsKICAgICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwg
MCB9OwpAQCAtNjA2LDcgKzYwNywxOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtJiBvdXQpCiAgICAgICAgIG91dC5wcmludGYoIlxuQ29uc3RhbnRzOlxuIik7CiAg
ICAgICAgIHNpemVfdCBpID0gMDsKICAgICAgICAgZG8gewotICAgICAgICAgICAgb3V0LnByaW50
ZigiICAgayV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgdG9DU3RyaW5nKG1f
Y29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpLmRhdGEoKSk7CisgICAgICAgICAgICBjb25zdCBj
aGFyKiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHN3
aXRjaCAobV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baV0pIHsKKyAgICAgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgICAgICAg
ICAgc291cmNlQ29kZVJlcHJlc2VudGF0aW9uRGVzY3JpcHRpb24gPSAiOiBpbiBzb3VyY2UgYXMg
ZG91YmxlIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGludGVnZXIiOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246Ok90aGVyOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRl
c2NyaXB0aW9uID0gIiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIgICBrJXUgPSAlcyVzXG4iLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaSksIHRvQ1N0cmluZyhtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKS5kYXRhKCks
IHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICsraTsK
ICAgICAgICAgfSB3aGlsZSAoaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICB9
CkBAIC0xNDQ5LDcgKzE0NjIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAg
ICAgICAgICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBKU05hbWVT
Y29wZTo6VHlwZSBzY29wZVR5cGUgPSAoSlNOYW1lU2NvcGU6OlR5cGUpKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJwdXNoX25hbWVfc2NvcGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgY29uc3RhbnROYW1lKGswLCBnZXRDb25zdGFudChrMCkpLmRhdGEoKSwgKHNjb3BlVHlwZSA9
PSBKU05hbWVTY29wZTo6RnVuY3Rpb25OYW1lU2NvcGUpID8gImZ1bmN0aW9uU2NvcGUiIDogKChz
Y29wZVR5cGUgPT0gSlNOYW1lU2NvcGU6OkNhdGNoU2NvcGUpID8gImNhdGNoU2NvcGUiIDogInVu
a25vd25TY29wZVR5cGUiKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAl
cyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGNv
bnN0YW50TmFtZShrMCkuZGF0YSgpLCAoc2NvcGVUeXBlID09IEpTTmFtZVNjb3BlOjpGdW5jdGlv
bk5hbWVTY29wZSkgPyAiZnVuY3Rpb25TY29wZSIgOiAoKHNjb3BlVHlwZSA9PSBKU05hbWVTY29w
ZTo6Q2F0Y2hTY29wZSkgPyAiY2F0Y2hTY29wZSIgOiAidW5rbm93blNjb3BlVHlwZSIpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKQEAg
LTE0NjYsNyArMTQ3OSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAg
ICAgICBpbnQgazAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBrMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAidGhyb3dfc3RhdGljX2Vycm9yIik7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMiLCBjb25zdGFudE5hbWUoazAsIGdldENvbnN0YW50KGswKSkuZGF0YSgp
LCBrMSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
IiwgY29uc3RhbnROYW1lKGswKS5kYXRhKCksIGsxID8gInRydWUiIDogImZhbHNlIik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CkBAIC0x
NjM5LDYgKzE2NTIsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcs
IENvZGVCbG9jayYgb3RoZXIpCiAgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5t
X2ZpcnN0TGluZUNvbHVtbk9mZnNldCkKICAgICAsIG1fY29kZVR5cGUob3RoZXIubV9jb2RlVHlw
ZSkKICAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykK
KyAgICAsIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90aGVyLm1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVy
Lm1fZnVuY3Rpb25EZWNscykKICAgICAsIG1fZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1bmN0aW9u
RXhwcnMpCiAgICAgLCBtX29zckV4aXRDb3VudGVyKDApCkBAIC0xNzMwLDcgKzE3NDQsNyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2
bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCiAgICAgICAgIHZtKCktPmZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNv
dXJjZUlEKCksIG1fb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwg
bV9vd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAKLSAgICBzZXRD
b25zdGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSk7
CisgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXJzKCksIHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oKSk7CiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkp
CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgb3duZXJFeGVjdXRh
YmxlLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CiAgICAgbV9mdW5jdGlvbkRlY2xzLnJlc2l6ZVRv
Rml0KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CkBAIC0yOTgw
LDYgKzI5OTQsNyBAQCB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJp
bmtNb2RlKQogICAgIAogICAgIGlmIChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7CiAgICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2hyaW5rVG9GaXQoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChtX3JhcmVEYXRhKSB7CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAppbmRleCAwNzI5M2UwM2QwN2RhNWM3NzBmMmQyOTg4NzVjMjliNTk0OGRlNzc3
Li42MWFiM2JkYjM5ZGEzZTgzODJhYTA2Yzk5MzcwZDZlOTRlM2ZlYzRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC02MjgsMTIgKzYyOCwxNCBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudHMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CisgICAgVmVjdG9yPFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigp
IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAgICAgc2l6
ZV90IG51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKTsgfQogICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikK
ICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6
ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5r
bm93bj4oKSk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHYpOworICAgICAgICBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpPdGhlcik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC02NDEs
NiArNjQzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBw
ZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNjQ5LDYgKzY1Miw3IEBAIHB1
YmxpYzoKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGlu
ZGV4KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXhdOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQogCiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNb
aW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTk4MywxMiArOTg3LDE0IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25l
ZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVy
T2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKLSAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNv
bnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMpCisgICAgdm9pZCBz
ZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYg
Y29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbnN0
YW50cy5zaXplKCkgPT0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNpemUoKSk7
CiAgICAgICAgIHNpemVfdCBjb3VudCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMucmVzaXplKGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQo
Km1fdm0sIG93bmVyRXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOworICAgICAgICBt
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjsKICAgICB9CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZSgKQEAgLTk5Niw2
ICsxMDAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1Yklu
Zm9NYXAoKSwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKIAog
ICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCByKSBjb25zdDsKKyAgICBDU3RyaW5nIGNvbnN0
YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OwogICAgIHZvaWQgcHJpbnRVbmFyeU9wKFByaW50U3Ry
ZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25z
dCBjaGFyKiBvcCk7CiAgICAgdm9pZCBwcmludEJpbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0
YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7
CiAgICAgdm9pZCBwcmludENvbmRpdGlvbmFsSnVtcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSos
IGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgaW50IGxvY2F0aW9uLCBj
b25zdCBjaGFyKiBvcCk7CkBAIC0xMDkzLDYgKzExMDAsNyBAQCBwcml2YXRlOgogICAgIC8vIFRP
RE86IFRoaXMgY291bGQganVzdCBiZSBhIHBvaW50ZXIgdG8gbV91bmxpbmtlZENvZGVCbG9jaydz
IGRhdGEsIGJ1dCB0aGUgREZHIG11dGF0ZXMKICAgICAvLyBpdCwgc28gd2UncmUgc3R1Y2sgd2l0
aCBpdCBmb3Igbm93LgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3Rh
bnRSZWdpc3RlcnM7CisgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxG
dW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRGVjbHM7CiAgICAgVmVjdG9yPFdyaXRlQmFy
cmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRXhwcnM7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMDhj
NzI5NzM2NTI5YjEzN2JkYzNiNGE5MDQzYTk5Y2Q3YzYxMDVmNi4uYzdkMmRhNTUxZTM3OTgwYjJi
MGE3MzEyMzRkNGQ4YWNlZDU1ZGYwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTMxOCwxMSArMzE4LDEyIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8SWRlbnRpZmllcj4mIGlkZW50aWZpZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyczsgfQogCiAgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRSZWdp
c3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgfQotICAg
IHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikKKyAgICB1bnNpZ25lZCBhZGRDb25zdGFu
dChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKQogICAgIHsKICAgICAgICAg
dW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKICAgICAg
ICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCptX3ZtLCB0aGlzLCB2KTsKKyAgICAg
ICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKHNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHVuc2ln
bmVkIGFkZE9yRmluZENvbnN0YW50KEpTVmFsdWUpOwpAQCAtMzMwLDYgKzMzMSw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29u
c3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4
IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgY29uc3QgVmVjdG9y
PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAK
ICAgICAvLyBKdW1wcwogICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KQEAgLTM0Nyw2ICszNDksNyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9pZGVudGlm
aWVycy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlu
a1RvRml0KCk7CiAgICAgICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOwogICAgICAg
ICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwpAQCAtNTQ0LDYgKzU0Nyw3IEBAIHByaXZhdGU6
CiAgICAgLy8gQ29uc3RhbnQgUG9vbHMKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlm
aWVyczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0
ZXJzOworICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKICAg
ICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwogICAgIEZ1bmN0aW9u
RXhwcmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRXhwcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDIx
NDAyZWJlZWQxNTFhNWFmZDAyNTVmNDNlMjgzYzBiZTgwYWZmZjMuLmMwYjBiYmM5MzZmY2IwMTdm
YzE3NjA5MWY3MzhiYWIyYWNjYmVkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC05ODIsMTcgKzk4
MiwxOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRFbXB0eVZh
bHVlKCkKICAgICByZXR1cm4gbV9lbXB0eVZhbHVlUmVnaXN0ZXI7CiB9CiAKLVJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKK1JlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdiwgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBpZiAo
IXYpCiAgICAgICAgIHJldHVybiBhZGRDb25zdGFudEVtcHR5VmFsdWUoKTsKIAogICAgIGludCBp
bmRleCA9IG1fbmV4dENvbnN0YW50T2Zmc2V0OwotICAgIEpTVmFsdWVNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2KSwgbV9uZXh0Q29uc3Rh
bnRPZmZzZXQpOworCisgICAgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24gdmFsdWVN
YXBLZXkgeyBKU1ZhbHVlOjplbmNvZGUodiksIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiB9Owor
ICAgIEpTVmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2pzVmFsdWVNYXAuYWRkKHZhbHVl
TWFwS2V5LCBtX25leHRDb25zdGFudE9mZnNldCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KSB7CiAgICAgICAgIG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzLmFwcGVuZChGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIG1fbmV4dENvbnN0YW50T2Zmc2V0KTsKICAgICAgICAgKyttX25leHRD
b25zdGFudE9mZnNldDsKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50KHYpOworICAg
ICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQodiwgc291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KTsKICAgICB9IGVsc2UKICAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIHJldHVybiAmbV9jb25zdGFudFBvb2xSZWdpc3RlcnNbaW5kZXhdOwpAQCAtMTE2NSw5ICsx
MTY3LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQKICAgICByZXR1cm4gZW1pdExvYWQoZHN0
LCBKU1ZhbHVlKHN0cmluZ0luTWFwKSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdikKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdiwgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKLSAgICBS
ZWdpc3RlcklEKiBjb25zdGFudElEID0gYWRkQ29uc3RhbnRWYWx1ZSh2KTsKKyAgICBSZWdpc3Rl
cklEKiBjb25zdGFudElEID0gYWRkQ29uc3RhbnRWYWx1ZSh2LCBzb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pOwogICAgIGlmIChkc3QpCiAgICAgICAgIHJldHVybiBlbWl0TW92ZShkc3QsIGNvbnN0
YW50SUQpOwogICAgIHJldHVybiBjb25zdGFudElEOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGU0YzMxMTE1
ZmRiYzkzNDYwZTgzYjQ1NjhkMTY3NjZmODlmNTlmMWMuLjI1NDZiYmY4Y2RiNTMxNjBjN2JiZjhl
ZjUyZjViNTBiNzcyOTM1YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTQ0Myw3ICs0NDMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBk
c3QsIGJvb2wpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3Qs
IGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBKU1ZhbHVlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBKU1ZhbHVlLCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246Ok90aGVyKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWRHbG9i
YWxPYmplY3QoUmVnaXN0ZXJJRCogZHN0KTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VW5h
cnlPcChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwpAQCAtNjU0
LDcgKzY1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaGFzQ29uc3RhbnQo
Y29uc3QgSWRlbnRpZmllciYpIGNvbnN0OwogICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChj
b25zdCBJZGVudGlmaWVyJik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGFkZENvbnN0YW50VmFsdWUo
SlNWYWx1ZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSwg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhl
cik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGFkZENvbnN0YW50RW1wdHlWYWx1ZSgpOwogICAgICAg
ICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKik7CiAKQEAgLTgwMCw2ICs4MDAsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIC8vIENvbnN0YW50IHBvb2wKICAgICAgICAg
SWRlbnRpZmllck1hcCBtX2lkZW50aWZpZXJNYXA7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PEVuY29kZWRKU1ZhbHVlV2l0aFJlcHJlc2VudGF0aW9uLCB1bnNpZ25lZCwgRW5jb2RlZEpTVmFs
dWVXaXRoUmVwcmVzZW50YXRpb25IYXNoLCBFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlv
bkhhc2hUcmFpdHM+IEpTVmFsdWVNYXA7CiAgICAgICAgIEpTVmFsdWVNYXAgbV9qc1ZhbHVlTWFw
OwogICAgICAgICBJZGVudGlmaWVyU3RyaW5nTWFwIG1fc3RyaW5nTWFwOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXgg
MDBhY2NmOWYwNGJjYzcyMGQ1YjBiZjk0ZmY2MmQ1ZTA3MjFlOTg2NC4uYjQyZWNiNzVkOTI0MjQ1
YjVlZjdjM2IwOWYwOTgxNDNmZDFlNGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMTIyLDYgKzEyMiwxNSBAQCBK
U1ZhbHVlIFN0cmluZ05vZGU6OmpzVmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikg
Y29uc3QKICAgICByZXR1cm4gZ2VuZXJhdG9yLmFkZFN0cmluZ0NvbnN0YW50KG1fdmFsdWUpOwog
fQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIE51bWJlck5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
Cit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNWYWx1
ZShnZW5lcmF0b3IpLCBpc0ludGVnZXJOb2RlKCkgPyBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkludGVnZXIgOiBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZSk7Cit9CisKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWdFeHBOb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmNwcAppbmRleCA4NTg1OWQyOGIyZDhhNDI4ODVlZDg0ZmEwOTdhNTY2NzU4MTRlZmE0
Li40N2Q0YTVjMDBiOTU5N2VhYThlZDExNWU5NWE2YjA3MTg4OGIxYzUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxpbnQgcG93
ZXI+CiAgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgIGlm
ICghbm9kZS0+aXNOdW1iZXJDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQ8cG93ZXI+KG5vZGUp
OwogICAgIH0KQEAgLTEwNCw3ICsxMDQsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNXaXRoaW5Q
b3dlck9mVHdvKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKLSAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CisgICAgICAgIGNhc2UgRG91YmxlQ29uc3Rh
bnQ6CisgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50
OiB7CiAgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQ8cG93
ZXI+KG5vZGUpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEyOCw3ICsxMzAsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKLSAgICAg
ICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICAgICAg
aWYgKCFub2RlLT5pc051bWJlckNvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LT5h
c0pTVmFsdWUoKTsKICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCAyYzg1YTg2MTBjZDQ0MzM2MGI4YTM5YjM3MjRkOTZkMjMzMmYxNTBlLi5hNTEzZDdhYTFjMTNh
YWE1ZGJiOGVhZWFkMzUyOTExNmVlNjUzNzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMjUyLDE0ICsyNTIsMjEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBvcGVyYW5kLnRvQ29uc3Rh
bnRJbmRleCgpOwogICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3RhbnRzLnNp
emUoKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwgIW1fY29u
c3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kLm9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICptX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBj
b2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSkgewogICAg
ICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93KGNvbnN0YW50SW5kZXggKyAxKTsKICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsgaSA8IG1fY29uc3Rh
bnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFudHNbaV0g
PSBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2NvbnN0YW50
c1tjb25zdGFudEluZGV4XSA9Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKHZhbHVlKSkpOworCisgICAgICAgICAg
ICAgICAgTm9kZSogY29uc3RhbnROb2RlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBpZiAo
c291cmNlQ29kZVJlcHJlc2VudGF0aW9uID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91
YmxlKQorICAgICAgICAgICAgICAgICAgICBjb25zdGFudE5vZGUgPSBhZGRUb0dyYXBoKERvdWJs
ZUNvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmcoanNEb3VibGVOdW1iZXIodmFs
dWUuYXNOdW1iZXIoKSkpKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBjb25zdGFudE5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBo
LmZyZWV6ZVN0cm9uZyh2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnN0YW50c1tjb25z
dGFudEluZGV4XSA9IGNvbnN0YW50Tm9kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFT
U0VSVChtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSk7CiAgICAgICAgICAgICByZXR1cm4gbV9j
b25zdGFudHNbY29uc3RhbnRJbmRleF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAppbmRleCBlOTEyNzRkM2UyMGNjNTVkYTAzYmVmNDE3MDQyMDY1OTQ1YTcyMmYxLi44ODdjOTM5
ZTdlZjQ0NTk0MTJmMzhmOGYyNjU5ZWJkNzY3OWIyZmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgKQEAgLTI1Niw2ICsyNTYsMTEgQEAgaW5saW5lIEtpbGxTdGF0dXMga2ls
bFN0YXR1c0ZvckRvZXNLaWxsKGJvb2wgZG9lc0tpbGwpCiAgICAgcmV0dXJuIGRvZXNLaWxsID8g
RG9lc0tpbGwgOiBEb2VzTm90S2lsbDsKIH0KIAorZW51bSBjbGFzcyBQbGFuU3RhZ2UgeworICAg
IEluaXRpYWwsCisgICAgQWZ0ZXJGaXh1cAorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KIGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGE1Mzc0NTVjNWViNjcy
NjhmZTQxZjY2OWNiNTdhOGQ0NGZiYmNlNGQuLjhkY2MyYWQ4NGFhODliNTYzZjhlYjE0MTk5M2Jm
OGE2MTFhYzVlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcApAQCAtNjcsNyArNjcsOSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBpbmplY3RUeXBlQ29udmVyc2lvbnNJbkJsb2Nr
KG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCkpOwotICAgICAgICAKKworICAgICAgICBtX2dyYXBo
Lm1fcGxhblN0YWdlID0gUGxhblN0YWdlOjpBZnRlckZpeHVwOworCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtMTA0OSw3ICsxMDUxLDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBEb3VibGVSZXA6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6CiAgICAgICAgIGNhc2UgSW50NTJS
ZXA6Ci0gICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSW50NTJDb25z
dGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0eTogLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNs
ZWFuZWQgdXAuCiAgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgpAQCAtMTIxMiw2ICsxMjEz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRv
IGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29k
ZXMuCiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoK
KyAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAg
ICAgICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgICAgIGNhc2UgRmx1c2g6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGU3OTAxZDhiNTNiNDM5Y2Q5YTU5YmZmMzk3MTI0
NmFhMTc4N2NiNjAuLmE1ZTllNWU1YjFjNDFhOGI1MGQ0ZTM4MDU3OTBlNzIyMTcwMGZkMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0xMDUzLDYgKzEwNTMsNyBA
QCBKU0FycmF5QnVmZmVyVmlldyogR3JhcGg6OnRyeUdldEZvbGRhYmxlVmlld0ZvckNoaWxkMShO
b2RlKiBub2RlKQogdm9pZCBHcmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogewogICAgIG1f
Y29kZUJsb2NrLT5jb25zdGFudHMoKS5yZXNpemUoMCk7CisgICAgbV9jb2RlQmxvY2stPmNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpLnJlc2l6ZSgwKTsKICAgICBmb3IgKEZyb3pl
blZhbHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+c3Ry
dWN0dXJlKCkpCiAgICAgICAgICAgICBBU1NFUlQobV9wbGFuLndlYWtSZWZlcmVuY2VzLmNvbnRh
aW5zKHZhbHVlLT5zdHJ1Y3R1cmUoKSkpOwpAQCAtMTA3OCw2ICsxMDc5LDcgQEAgdm9pZCBHcmFw
aDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgICAgICB9IH0KICAgICB9CiAgICAgbV9jb2Rl
QmxvY2stPmNvbnN0YW50cygpLnNocmlua1RvRml0KCk7CisgICAgbV9jb2RlQmxvY2stPmNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpLnNocmlua1RvRml0KCk7CiB9CiAKIHZvaWQg
R3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggMDFkMWFhNmYzM2U2OTU1ZTk5MzhiZTc1MDUyNGU1NDRi
OTEzYzM3ZC4uYWVjZTFkNTIwZWZmMTRlYjk0MmI4MjJmNWYyZWVmZjk5MTQxYWM5ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtMjE3LDkgKzIxNyw5IEBAIHB1YmxpYzoK
ICAgICAgICAgTm9kZSogcmlnaHQgPSBhZGQtPmNoaWxkMigpLm5vZGUoKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChsZWZ0LT5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKGFkZCwgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnQz
MiwgbGVmdCwgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRT
cGVjdWxhdGVJbnQzMihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIsIHJpZ2h0LCBsZWZ0
LCBzb3VyY2UpOwogICAgICAgICBpZiAocmlnaHQtPmhhc0NvbnN0YW50KCkpCi0gICAgICAgICAg
ICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIoYWRkLCBsZWZ0U2hvdWxk
U3BlY3VsYXRlSW50MzIsIHJpZ2h0LCBzb3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIGFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKGFkZCwgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMy
LCBsZWZ0LCByaWdodCwgc291cmNlKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiAobGVmdFNo
b3VsZFNwZWN1bGF0ZUludDMyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIgJiYgYWRkLT5j
YW5TcGVjdWxhdGVJbnQzMihzb3VyY2UpKSA/IFNwZWN1bGF0ZUludDMyIDogRG9udFNwZWN1bGF0
ZUludDMyOwogICAgIH0KQEAgLTg0NiwxMiArODQ2LDEzIEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1
cmVSZWdpc3RyYXRpb25TdGF0ZSBtX3N0cnVjdHVyZVJlZ2lzdHJhdGlvblN0YXRlOwogICAgIEdy
YXBoRm9ybSBtX2Zvcm07CiAgICAgVW5pZmljYXRpb25TdGF0ZSBtX3VuaWZpY2F0aW9uU3RhdGU7
CisgICAgUGxhblN0YWdlIG1fcGxhblN0YWdlIHsgUGxhblN0YWdlOjpJbml0aWFsIH07CiAgICAg
UmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3RhdGU7CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNC
bG9jayosIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcik7CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25N
b2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKE5vZGUqIGFkZCwgYm9vbCB2YXJp
YWJsZVNob3VsZFNwZWN1bGF0ZUludDMyLCBOb2RlKiBpbW1lZGlhdGUsIFJhcmVDYXNlUHJvZmls
aW5nU291cmNlIHNvdXJjZSkKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hv
dWxkU3BlY3VsYXRlSW50MzIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRl
SW50MzIsIE5vZGUqIG9wZXJhbmQsIE5vZGUqaW1tZWRpYXRlLCBSYXJlQ2FzZVByb2ZpbGluZ1Nv
dXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLT5oYXNDb25zdGFu
dCgpKTsKICAgICAgICAgCkBAIC04NjEsOCArODYyLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBpZiAoIXZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50MzIpCiAgICAgICAgICAgICBy
ZXR1cm4gRG9udFNwZWN1bGF0ZUludDMyOworCisgICAgICAgIC8vIEludGVnZXIgY29uc3RhbnRz
IGNhbiBiZSB0eXBlZCBEb3VibGUgaWYgdGhleSBhcmUgd3JpdHRlbiBsaWtlIGEgZG91YmxlIGlu
IHRoZSBzb3VyY2UgY29kZSAoZS5nLiA0Mi4wKS4KKyAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCB3
ZSBzdGF5IGNvbnNlcnZhdGl2ZSB1bmxlc3MgdGhlIG90aGVyIG9wZXJhbmQgd2FzIGV4cGxpY2l0
bHkgdHlwZWQgYXMgaW50ZWdlci4KKyAgICAgICAgTm9kZUZsYWdzIG9wZXJhbmRSZXN1bHRUeXBl
ID0gb3BlcmFuZC0+cmVzdWx0KCk7CisgICAgICAgIGlmIChvcGVyYW5kUmVzdWx0VHlwZSAhPSBO
b2RlUmVzdWx0SW50MzIgJiYgaW1tZWRpYXRlVmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBEb250U3BlY3VsYXRlSW50MzI7CiAgICAgICAgIAotICAgICAgICBpZiAoaW1tZWRp
YXRlVmFsdWUuaXNJbnQzMigpIHx8IGltbWVkaWF0ZVZhbHVlLmlzQm9vbGVhbigpKQorICAgICAg
ICBpZiAoanNOdW1iZXIoaW1tZWRpYXRlVmFsdWUuYXNOdW1iZXIoKSkuaXNJbnQzMigpIHx8IGlt
bWVkaWF0ZVZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICAgICAgcmV0dXJuIGFkZC0+Y2FuU3Bl
Y3VsYXRlSW50MzIoc291cmNlKSA/IFNwZWN1bGF0ZUludDMyIDogRG9udFNwZWN1bGF0ZUludDMy
OwogICAgICAgICAKICAgICAgICAgZG91YmxlIGRvdWJsZUltbWVkaWF0ZSA9IGltbWVkaWF0ZVZh
bHVlLmFzRG91YmxlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IGY1YzllYzQzNjljYmE1
NzZlMWZlYzRmYzg1MmE3NjlhNDM4YTRlMjIuLjY4YWFmZWFjOTk3NjgxNmExNGYyNGEwN2UxMDdh
YmMxMWEwMDljNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xNDgsNiArMTQ4LDExIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24odHlwZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50
OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobm9kZS0+YXNKU1ZhbHVlKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC01MzIsNyArNTM3LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBEb3VibGVSZXA6CiAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6CiAgICAgICAgIGNhc2UgSW50NTJSZXA6Ci0gICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6
CiAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0eToKICAg
ICAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCmluZGV4IDMyOWEwNzY4OTJhODU3M2IyYmY5ZmM2ODc1Y2U5N2QwYWUwNDI0
OGYuLmZiMWI5Mjk4N2UzNWVlM2I0YTllYWIwNmY1Yjc4ZDlkNTdhMWU1NDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC0xMTgsOCArMTE4LDggQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBtX215UmVmQ291bnRzLmZpbmQoZWRnZS5ub2RlKCkp
LT52YWx1ZSsrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSA9PSAoZWRnZS51c2VL
aW5kKCkgPT0gRG91YmxlUmVwVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IERvdWJsZVJlcFJlYWxV
c2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gRG91YmxlUmVwTWFjaGluZUludFVzZSkpOworCisgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRlRWRnZVdpdGhEb3VibGVSZXN1bHRJZk5lY2Vzc2FyeShu
b2RlLCBlZGdlKTsKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBl
ZGdlLT5oYXNJbnQ1MlJlc3VsdCgpID09IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQ1MlJlcFVzZSkp
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSkgewpAQCAtNTQzLDcgKzU0MywxOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgdm9pZCB2YWxpZGF0ZUVkZ2VXaXRo
RG91YmxlUmVzdWx0SWZOZWNlc3NhcnkoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW5TdGFnZSA8IFBsYW5TdGFnZTo6QWZ0ZXJGaXh1
cCkKKyAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBl
ZGdlKSwgZWRnZS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlIHx8IGVkZ2UudXNlS2luZCgpID09
IERvdWJsZVJlcFJlYWxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gRG91YmxlUmVwTWFjaGluZUlu
dFVzZSk7CisgICAgfQorCiAgICAgdm9pZCBjaGVja09wZXJhbmQoCiAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrLCBPcGVyYW5kczxzaXplX3Q+JiBnZXRMb2NhbFBvc2l0aW9ucywKICAgICAgICAg
T3BlcmFuZHM8c2l6ZV90PiYgc2V0TG9jYWxQb3NpdGlvbnMsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCA4ODQx
OGYxNmEyMDAyNmIyYTZjMDFmM2UyNjgxZDYwY2Q1Y2Y3OTk2Li5mYTY0OTUxYTlkZjJiNmI2NDUw
NWZhMWVhMzdhMTAwNGI5YThkOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaApAQCAtMTkyLDEwICsxOTIsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgaW5j
Q29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFycmF5Tm9k
ZShsb2NhdGlvbiwgZWxpc2lvbnMsIGVsZW1zKTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUq
IGNyZWF0ZU51bWJlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91Ymxl
IGQpCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZURvdWJsZUV4cHIoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewogICAgICAgICBpbmNDb25zdGFudHMo
KTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTnVtYmVyTm9kZShsb2NhdGlv
biwgZCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIERvdWJsZU5vZGUobG9j
YXRpb24sIGQpOworICAgIH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlSW50ZWdlckV4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCisgICAgeworICAgICAg
ICBpbmNDb25zdGFudHMoKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgSW50
ZWdlck5vZGUobG9jYXRpb24sIGQpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVTdHJpbmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmll
ciogc3RyaW5nKQpAQCAtNzQ4LDExICs3NTMsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9ldmFs
Q291bnQrKzsKICAgICAgICAgbV9zY29wZS5tX2ZlYXR1cmVzIHw9IEV2YWxGZWF0dXJlOwogICAg
IH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTnVtYmVyKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIGRvdWJsZSBkKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVJbnRlZ2Vy
TGlrZU51bWJlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIE51bWJlck5vZGUobG9jYXRp
b24sIGQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBJbnRlZ2VyTm9kZShs
b2NhdGlvbiwgZCk7CiAgICAgfQotICAgIAorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVEb3Vi
bGVMaWtlTnVtYmVyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSBkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRG91YmxlTm9kZShsb2Nh
dGlvbiwgZCk7CisgICAgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdW1iZXJGcm9tQmlu
YXJ5T3BlcmF0aW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSB2YWx1
ZSwgY29uc3QgTnVtYmVyTm9kZSYgb3JpZ2luYWxOb2RlQSwgY29uc3QgTnVtYmVyTm9kZSYgb3Jp
Z2luYWxOb2RlQikKKyAgICB7CisgICAgICAgIGlmIChvcmlnaW5hbE5vZGVBLmlzSW50ZWdlck5v
ZGUoKSAmJiBvcmlnaW5hbE5vZGVCLmlzSW50ZWdlck5vZGUoKSkKKyAgICAgICAgICAgIHJldHVy
biBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICByZXR1
cm4gY3JlYXRlRG91YmxlTGlrZU51bWJlcihsb2NhdGlvbiwgdmFsdWUpOworICAgIH0KKyAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlTnVtYmVyRnJvbVVuYXJ5T3BlcmF0aW9uKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSB2YWx1ZSwgY29uc3QgTnVtYmVyTm9kZSYgb3Jp
Z2luYWxOb2RlKQorICAgIHsKKyAgICAgICAgaWYgKG9yaWdpbmFsTm9kZS5pc0ludGVnZXJOb2Rl
KCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24s
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZURvdWJsZUxpa2VOdW1iZXIobG9jYXRpb24s
IHZhbHVlKTsKKyAgICB9CisKICAgICBWTSogbV92bTsKICAgICBQYXJzZXJBcmVuYSYgbV9wYXJz
ZXJBcmVuYTsKICAgICBTb3VyY2VDb2RlKiBtX3NvdXJjZUNvZGU7CkBAIC03OTMsOSArODE0LDgg
QEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHIKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjpt
YWtlTmVnYXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogbikKIHsKICAgICBpZiAobi0+aXNOdW1iZXIoKSkgewotICAgICAgICBOdW1iZXJOb2Rl
KiBudW1iZXJOb2RlID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KG4pOwotICAgICAgICBudW1i
ZXJOb2RlLT5zZXRWYWx1ZSgtbnVtYmVyTm9kZS0+dmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBu
dW1iZXJOb2RlOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJOb2RlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgTnVtYmVyTm9kZSY+KCpuKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJl
ckZyb21VbmFyeU9wZXJhdGlvbihsb2NhdGlvbiwgLW51bWJlck5vZGUudmFsdWUoKSwgbnVtYmVy
Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTmVnYXRlTm9k
ZShsb2NhdGlvbiwgbik7CkBAIC04MDQsNyArODI0LDcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1
aWxkZXI6Om1ha2VOZWdhdGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4
cHIKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0d2lzZU5vdE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiB7CiAgICAg
aWYgKGV4cHItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRp
b24sIH50b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByKS0+dmFsdWUoKSkpOwor
ICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIH50b0ludDMy
KHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByKS0+dmFsdWUoKSkpOwogICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEJpdHdpc2VOb3ROb2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIApA
QCAtODEzLDggKzgzMywxMSBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU11bHRO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlcwogICAgIGV4cHIxID0g
ZXhwcjEtPnN0cmlwVW5hcnlQbHVzKCk7CiAgICAgZXhwcjIgPSBleHByMi0+c3RyaXBVbmFyeVBs
dXMoKTsKIAotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8TnVtYmVy
Tm9kZSo+KGV4cHIxKS0+dmFsdWUoKSAqIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMikt
PnZhbHVlKCkpOworICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIo
KSkgeworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0
PE51bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJF
eHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIpOworICAgICAgICByZXR1cm4g
Y3JlYXRlTnVtYmVyRnJvbUJpbmFyeU9wZXJhdGlvbihsb2NhdGlvbiwgbnVtYmVyRXhwcjEudmFs
dWUoKSAqIG51bWJlckV4cHIyLnZhbHVlKCksIG51bWJlckV4cHIxLCBudW1iZXJFeHByMik7Cisg
ICAgfQogCiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIHN0YXRpY19jYXN0PE51bWJlck5v
ZGUqPihleHByMSktPnZhbHVlKCkgPT0gMSkKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgVW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhwcjIpOwpAQCAtODMwLDggKzg1MywxNCBA
QCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURpdk5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzcwogICAgIGV4cHIxID0gZXhwcjEtPnN0cmlwVW5hcnlQ
bHVzKCk7CiAgICAgZXhwcjIgPSBleHByMi0+c3RyaXBVbmFyeVBsdXMoKTsKIAotICAgIGlmIChl
eHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZU51bWJlcihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFs
dWUoKSAvIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpOworICAgIGlm
IChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25z
dCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhw
cjEpOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0
PE51bWJlck5vZGUmPigqZXhwcjIpOworICAgICAgICBkb3VibGUgcmVzdWx0ID0gbnVtYmVyRXhw
cjEudmFsdWUoKSAvIG51bWJlckV4cHIyLnZhbHVlKCk7CisgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxpbnQ2NF90PihyZXN1bHQpID09IHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVO
dW1iZXJGcm9tQmluYXJ5T3BlcmF0aW9uKGxvY2F0aW9uLCByZXN1bHQsIG51bWJlckV4cHIxLCBu
dW1iZXJFeHByMik7CisgICAgICAgIHJldHVybiBjcmVhdGVEb3VibGVMaWtlTnVtYmVyKGxvY2F0
aW9uLCByZXN1bHQpOworICAgIH0KICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBEaXZO
b2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCkBA
IC04MzksMTYgKzg2OCwyMyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU1vZE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzcwogewogICAgIGV4cHIx
ID0gZXhwcjEtPnN0cmlwVW5hcnlQbHVzKCk7CiAgICAgZXhwcjIgPSBleHByMi0+c3RyaXBVbmFy
eVBsdXMoKTsKLSAgICAKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVt
YmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIGZtb2Qoc3RhdGlj
X2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSo+KGV4cHIyKS0+dmFsdWUoKSkpOworCisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4
cHIyLT5pc051bWJlcigpKSB7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIx
ID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJl
ck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihsb2NhdGlvbiwgZm1vZChudW1i
ZXJFeHByMS52YWx1ZSgpLCBudW1iZXJFeHByMi52YWx1ZSgpKSk7CisgICAgfQogICAgIHJldHVy
biBuZXcgKG1fcGFyc2VyQXJlbmEpIE1vZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmln
aHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtl
QWRkTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQog
ewotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+
KGV4cHIxKS0+dmFsdWUoKSArIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVl
KCkpOworCisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKSB7
CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIy
ID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAgIHJldHVybiBjcmVh
dGVOdW1iZXJGcm9tQmluYXJ5T3BlcmF0aW9uKGxvY2F0aW9uLCBudW1iZXJFeHByMS52YWx1ZSgp
ICsgbnVtYmVyRXhwcjIudmFsdWUoKSwgbnVtYmVyRXhwcjEsIG51bWJlckV4cHIyKTsKKyAgICB9
CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQWRkTm9kZShsb2NhdGlvbiwgZXhwcjEs
IGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIApAQCAtODU3LDUwICs4OTMsNzEgQEAg
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VTdWJOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEV4cHJlc3MKICAgICBleHByMSA9IGV4cHIxLT5zdHJpcFVuYXJ5UGx1
cygpOwogICAgIGV4cHIyID0gZXhwcjItPnN0cmlwVW5hcnlQbHVzKCk7CiAKLSAgICBpZiAoZXhw
cjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBjcmVh
dGVOdW1iZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVl
KCkgLSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKKyAgICBpZiAo
ZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3Qg
TnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIx
KTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxO
dW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlckZyb21CaW5h
cnlPcGVyYXRpb24obG9jYXRpb24sIG51bWJlckV4cHIxLnZhbHVlKCkgLSBudW1iZXJFeHByMi52
YWx1ZSgpLCBudW1iZXJFeHByMSwgbnVtYmVyRXhwcjIpOworICAgIH0KICAgICByZXR1cm4gbmV3
IChtX3BhcnNlckFyZW5hKSBTdWJOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFz
QXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUxlZnRT
aGlmdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykK
IHsKLSAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAg
ICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgPDwgKHRvVUludDMyKHN0YXRpY19jYXN0PE51bWJl
ck5vZGUqPihleHByMiktPnZhbHVlKCkpICYgMHgxZikpOworICAgIGlmIChleHByMS0+aXNOdW1i
ZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBu
dW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBj
b25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigq
ZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24s
IHRvSW50MzIobnVtYmVyRXhwcjEudmFsdWUoKSkgPDwgKHRvVUludDMyKG51bWJlckV4cHIyLnZh
bHVlKCkpICYgMHgxZikpOworICAgIH0KICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBM
ZWZ0U2hpZnROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMp
OwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVJpZ2h0U2hpZnROb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7Ci0gICAgaWYg
KGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4g
Y3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihl
eHByMSktPnZhbHVlKCkpID4+ICh0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhw
cjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhw
cjItPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEg
PSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVy
Tm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51
bWJlckV4cHIxLnZhbHVlKCkpID4+ICh0b1VJbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSAmIDB4
MWYpKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUmlnaHRTaGlmdE5v
ZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlVVJpZ2h0U2hpZnROb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7Ci0gICAgaWYgKGV4cHIxLT5p
c051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gY3JlYXRlTnVt
YmVyKGxvY2F0aW9uLCB0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52
YWx1ZSgpKSA+PiAodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFs
dWUoKSkgJiAweDFmKSk7CisgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051
bWJlcigpKSB7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIxID0gc3RhdGlj
X2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMSk7CisgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51
bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CisgICAgICAgIHJl
dHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihsb2NhdGlvbiwgdG9VSW50MzIobnVtYmVyRXhw
cjEudmFsdWUoKSkgPj4gKHRvVUludDMyKG51bWJlckV4cHIyLnZhbHVlKCkpICYgMHgxZikpOwor
ICAgIH0KICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBVbnNpZ25lZFJpZ2h0U2hpZnRO
b2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdE9yTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewotICAgIGlmIChleHByMS0+aXNOdW1i
ZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihs
b2NhdGlvbiwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgp
KSB8IHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOwor
ICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAg
ICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUm
PigqZXhwcjEpOworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRp
Y19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIpOworICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdl
ckxpa2VOdW1iZXIobG9jYXRpb24sIHRvSW50MzIobnVtYmVyRXhwcjEudmFsdWUoKSkgfCB0b0lu
dDMyKG51bWJlckV4cHIyLnZhbHVlKCkpKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgQml0T3JOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBF
eHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKLSAgICBp
ZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVy
biBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+
KGV4cHIxKS0+dmFsdWUoKSkgJiB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHBy
MiktPnZhbHVlKCkpKTsKKyAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVt
YmVyKCkpIHsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVtYmVyRXhwcjEgPSBzdGF0aWNf
Y2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIxKTsKKyAgICAgICAgY29uc3QgTnVtYmVyTm9kZSYgbnVt
YmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKG51bWJlckV4cHIx
LnZhbHVlKCkpICYgdG9JbnQzMihudW1iZXJFeHByMi52YWx1ZSgpKSk7CisgICAgfQogICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdEFuZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHBy
MiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlQml0WE9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzKQogewotICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIo
KSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihzdGF0aWNf
Y2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSBeIHRvSW50MzIoc3RhdGljX2Nhc3Q8
TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOworICAgIGlmIChleHByMS0+aXNOdW1iZXIo
KSAmJiBleHByMi0+aXNOdW1iZXIoKSkgeworICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1i
ZXJFeHByMSA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjEpOworICAgICAgICBjb25z
dCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhw
cjIpOworICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIHRv
SW50MzIobnVtYmVyRXhwcjEudmFsdWUoKSkgXiB0b0ludDMyKG51bWJlckV4cHIyLnZhbHVlKCkp
KTsKKyAgICB9CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQml0WE9yTm9kZShsb2Nh
dGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAppbmRleCBmMTNmZTRkZWFjMGVkZTA0MzdjNDkxN2Jh
NDhmNGYwYjk2NTA5YzBlLi4xZWM2N2RmMWI4ZThjMGQ3MzE5NDliMTI3MmE5YmM3NWZmZjgwMTZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcApAQCAtNDk1LDYgKzQ5NSwx
MyBAQCBMZXhlcjxUPjo6TGV4ZXIoVk0qIHZtLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVz
cykKIHsKIH0KIAorc3RhdGljIGlubGluZSBKU1Rva2VuVHlwZSB0b2tlblR5cGVGb3JJbnRlZ2Vy
TGlrZVRva2VuKGRvdWJsZSBkb3VibGVWYWx1ZSkKK3sKKyAgICBpZiAoKGRvdWJsZVZhbHVlIHx8
ICFzdGQ6OnNpZ25iaXQoZG91YmxlVmFsdWUpKSAmJiBzdGF0aWNfY2FzdDxpbnQ2NF90Pihkb3Vi
bGVWYWx1ZSkgPT0gZG91YmxlVmFsdWUpCisgICAgICAgIHJldHVybiBJTlRFR0VSOworICAgIHJl
dHVybiBET1VCTEU7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogTGV4ZXI8VD46On5MZXhl
cigpCiB7CkBAIC0xNjg3LDcgKzE2OTQsNyBAQCBzdGFydDoKICAgICAgICAgICAgICAgICB0b2tl
biA9IElOVkFMSURfSEVYX05VTUJFUl9FUlJPUlRPSzsKICAgICAgICAgICAgICAgICBnb3RvIHJl
dHVybkVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9rZW4gPSBOVU1CRVI7Cisg
ICAgICAgICAgICB0b2tlbiA9IHRva2VuVHlwZUZvckludGVnZXJMaWtlVG9rZW4odG9rZW5EYXRh
LT5kb3VibGVWYWx1ZSk7CiAgICAgICAgICAgICBtX2J1ZmZlcjgucmVzaXplKDApOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE3MDAsMTcgKzE3MDcsMTkgQEAgc3RhcnQ6CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGlzQVNDSUlPY3RhbERpZ2l0KG1fY3VycmVudCkpIHsKICAg
ICAgICAgICAgIGlmIChwYXJzZU9jdGFsKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpKSB7Ci0gICAg
ICAgICAgICAgICAgdG9rZW4gPSBOVU1CRVI7CisgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tl
blR5cGVGb3JJbnRlZ2VyTGlrZVRva2VuKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgQ2hhcmFj
dGVyTnVtYmVyOgotICAgICAgICBpZiAoTElLRUxZKHRva2VuICE9IE5VTUJFUikpIHsKKyAgICAg
ICAgaWYgKExJS0VMWSh0b2tlbiAhPSBJTlRFR0VSICYmIHRva2VuICE9IERPVUJMRSkpIHsKICAg
ICAgICAgICAgIGlmICghcGFyc2VEZWNpbWFsKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpKSB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gPSBJTlRFR0VSOwogICAgICAgICAgICAgICAgIGlmIChtX2N1
cnJlbnQgPT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgIHNoaWZ0KCk7CiBpbk51bWJlckFm
dGVyRGVjaW1hbFBvaW50OgogICAgICAgICAgICAgICAgICAgICBwYXJzZU51bWJlckFmdGVyRGVj
aW1hbFBvaW50KCk7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gRE9VQkxFOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoKG1fY3VycmVudCB8IDB4MjApID09ICdl
JykgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyQWZ0ZXJFeHBvbmVudElu
ZGljYXRvcigpKSB7CkBAIC0xNzIxLDggKzE3MzAsMTAgQEAgaW5OdW1iZXJBZnRlckRlY2ltYWxQ
b2ludDoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcnNlZExl
bmd0aDsKICAgICAgICAgICAgICAgICB0b2tlbkRhdGEtPmRvdWJsZVZhbHVlID0gcGFyc2VEb3Vi
bGUobV9idWZmZXI4LmRhdGEoKSwgbV9idWZmZXI4LnNpemUoKSwgcGFyc2VkTGVuZ3RoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHRva2VuID0gTlVNQkVSOworICAgICAgICAgICAgICAg
IGlmICh0b2tlbiA9PSBJTlRFR0VSKQorICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vu
VHlwZUZvckludGVnZXJMaWtlVG9rZW4odG9rZW5EYXRhLT5kb3VibGVWYWx1ZSk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuVHlwZUZvckludGVnZXJM
aWtlVG9rZW4odG9rZW5EYXRhLT5kb3VibGVWYWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBObyBpZGVudGlmaWVycyBhbGxvd2VkIGRpcmVjdGx5IGFmdGVyIG51bWVyaWMgbGl0ZXJhbCwg
ZS5nLiAiM2luIiBpcyBiYWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oCmluZGV4IDk1MDQwOWFiODFmZWM5ODk5ZTYxZGE1Yzc4NjhlZDU4MzQ3
M2U5ZWMuLjEyZTNkNGQ2Yjg5NTJhMDAxYjQ2YTMxOGIwMDc0ODNiNzU3NmU3MDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC04NCw2
ICs4NCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCisgICAgaW5saW5lIERv
dWJsZU5vZGU6OkRvdWJsZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91
YmxlIHZhbHVlKQorICAgICAgICA6IE51bWJlck5vZGUobG9jYXRpb24sIHZhbHVlKQorICAgIHsK
KyAgICB9CisKKyAgICBpbmxpbmUgSW50ZWdlck5vZGU6OkludGVnZXJOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBEb3VibGVOb2Rl
KGxvY2F0aW9uLCB2YWx1ZSkKKyAgICB7CisgICAgfQorCiAgICAgaW5saW5lIFN0cmluZ05vZGU6
OlN0cmluZ05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRp
ZmllciYgdmFsdWUpCiAgICAgICAgIDogQ29uc3RhbnROb2RlKGxvY2F0aW9uLCBSZXN1bHRUeXBl
OjpzdHJpbmdUeXBlKCkpCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuaAppbmRleCAyN2JjM2Y4NDM1NGM0NDBjYmE5OGZmMGVkMDAxNzc4NTg2
ZDlmNWI2Li4zMGVkYjBhZTBjMmRhNTNmM2I0MGY4OTQ2MDMzOGYxOWU5MDk5Mjk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0yMzYsMTYgKzIzNiwzMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBOdW1iZXJOb2RlIDogcHVibGljIENvbnN0YW50Tm9kZSB7CiAg
ICAgcHVibGljOgogICAgICAgICBOdW1iZXJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGRv
dWJsZSB2YWx1ZSk7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRWYWx1ZShkb3VibGUgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9
CisgICAgICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAg
ICAgdmlydHVhbCBib29sIGlzSW50ZWdlck5vZGUoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBpc051bWJlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIGlzTnVtYmVyKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUganNWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGpzTnVtYmVyKG1fdmFsdWUpOyB9CiAKICAgICAgICAg
ZG91YmxlIG1fdmFsdWU7CiAgICAgfTsKIAorICAgIGNsYXNzIERvdWJsZU5vZGUgOiBwdWJsaWMg
TnVtYmVyTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBEb3VibGVOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGRvdWJsZSB2YWx1ZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNJbnRlZ2VyTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgfTsKKworICAgIC8vIEFuIGludGVnZXIgbm9kZSByZXByZXNlbnQgYSBudW1iZXIgcmVw
cmVzZW50ZWQgYXMgYW4gaW50ZWdlciAoZS5nLiA0MiBpbnN0ZWFkIG9mIDQyLiwgNDIuMCwgNDJl
MCkKKyAgICBjbGFzcyBJbnRlZ2VyTm9kZSA6IHB1YmxpYyBEb3VibGVOb2RlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIEludGVnZXJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGRvdWJsZSB2
YWx1ZSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJOb2RlKCkgY29uc3Qgb3ZlcnJp
ZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIH07CisKICAgICBjbGFzcyBTdHJpbmdOb2Rl
IDogcHVibGljIENvbnN0YW50Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBTdHJpbmdOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBmNGM0YmM1ZDRlM2Y3MmY2MDUxMmJmYzYw
NzAxNTZkMzE2ZmFhYmFjLi42MzE4ZmQ2MzZiZWIzZTdiOTFkMjhmNjQ5NmFlZDlhZjdiZDg3MThj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC02MjksNyArNjI5
LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0
ZXJuIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUQKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgSlNUb2tlblR5cGUgdG9rZW5UeXBlID0gbV90b2tlbi5tX3R5cGU7CiAgICAg
ICAgICAgICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewotICAgICAgICAgICAgICAgIGNh
c2UgTlVNQkVSOgorICAgICAgICAgICAgICAgIGNhc2UgRE9VQkxFOgorICAgICAgICAgICAgICAg
IGNhc2UgSU5URUdFUjoKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbShtX3ZtLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU1RSSU5HOgpAQCAtMTk0NSw3
ICsxOTQ2LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlUHJvcGVydHkoVHJlZUIKICAgICAgICAgICAgIGZhaWxXaXRo
TWVzc2FnZSgiRXhwZWN0ZWQgYSAnOicgZm9sbG93aW5nIHRoZSBwcm9wZXJ0eSBuYW1lICciLCBp
ZGVudC0+aW1wbCgpLCAiJyIpOwogICAgICAgICByZXR1cm4gcGFyc2VHZXR0ZXJTZXR0ZXIoY29u
dGV4dCwgY29tcGxldGUsIHR5cGUsIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwogICAgIH0K
LSAgICBjYXNlIE5VTUJFUjogeworICAgIGNhc2UgRE9VQkxFOgorICAgIGNhc2UgSU5URUdFUjog
ewogICAgICAgICBkb3VibGUgcHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFs
dWU7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgY29uc3VtZU9yRmFpbChDT0xPTiwgIkV4cGVj
dGVkICc6JyBhZnRlciBwcm9wZXJ0eSBuYW1lIik7CkBAIC0xOTc5LDcgKzE5ODEsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VHZXR0ZXJTZXR0ZXIoVAogICAgIGRvdWJsZSBudW1lcmljUHJvcGVydHlOYW1lID0gMDsK
ICAgICBpZiAobV90b2tlbi5tX3R5cGUgPT0gSURFTlQgfHwgbV90b2tlbi5tX3R5cGUgPT0gU1RS
SU5HKQogICAgICAgICBzdHJpbmdQcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsK
LSAgICBlbHNlIGlmIChtX3Rva2VuLm1fdHlwZSA9PSBOVU1CRVIpCisgICAgZWxzZSBpZiAobV90
b2tlbi5tX3R5cGUgPT0gRE9VQkxFIHx8IG1fdG9rZW4ubV90eXBlID09IElOVEVHRVIpCiAgICAg
ICAgIG51bWVyaWNQcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZTsKICAg
ICBlbHNlCiAgICAgICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOwpAQCAtMjIyMSwxMSAr
MjIyMywxNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZVByaW1hcnlFeHByZQogICAgICAgICBuZXh0KCk7CiAgICAg
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVN0cmluZyhsb2NhdGlvbiwgaWRlbnQpOwogICAgIH0K
LSAgICBjYXNlIE5VTUJFUjogeworICAgIGNhc2UgRE9VQkxFOiB7CiAgICAgICAgIGRvdWJsZSBk
ID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBs
b2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZU51bWJlckV4cHIobG9jYXRpb24sIGQpOworICAgICAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVEb3VibGVFeHByKGxvY2F0aW9uLCBkKTsKKyAgICB9CisgICAgY2FzZSBJ
TlRFR0VSOiB7CisgICAgICAgIGRvdWJsZSBkID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7
CisgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOworICAg
ICAgICBuZXh0KCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUludGVnZXJFeHByKGxv
Y2F0aW9uLCBkKTsKICAgICB9CiAgICAgY2FzZSBOVUxMVE9LRU46IHsKICAgICAgICAgSlNUb2tl
bkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CkBAIC0yNTc3LDcgKzI1ODUsOCBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPiB2b2lkIFBhcnNlcjxMZXhlclR5cGU+Ojpw
cmludFVuZXhwZWN0ZWRUb2tlblRleHQoVwogICAgIGNhc2UgU1RSSU5HOgogICAgICAgICBvdXQu
cHJpbnQoIlVuZXhwZWN0ZWQgc3RyaW5nIGxpdGVyYWwgIiwgZ2V0VG9rZW4oKSk7CiAgICAgICAg
IHJldHVybjsKLSAgICBjYXNlIE5VTUJFUjoKKyAgICBjYXNlIElOVEVHRVI6CisgICAgY2FzZSBE
T1VCTEU6CiAgICAgICAgIG91dC5wcmludCgiVW5leHBlY3RlZCBudW1iZXIgJyIsIGdldFRva2Vu
KCksICInIik7CiAgICAgICAgIHJldHVybjsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlclRva2Vucy5oCmluZGV4IDY1MjA1NWE1OGVkNGViM2RlYzhlYWRjZGFiYzQx
YmNlYWJhZjA5MWUuLjNmZjI3OTg2NmFmNmUyODY5MGJjMDdjNWY3MjFiYzdhMzgwNTZlYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaApAQCAtOTQsNyAr
OTQsOCBAQCBlbnVtIEpTVG9rZW5UeXBlIHsKICAgICBDTE9TRUJSQUNLRVQsCiAgICAgQ09NTUEs
CiAgICAgUVVFU1RJT04sCi0gICAgTlVNQkVSLAorICAgIElOVEVHRVIsCisgICAgRE9VQkxFLAog
ICAgIElERU5ULAogICAgIFNUUklORywKICAgICBTRU1JQ09MT04sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmluZGV4IDYzYjEzNDhmZTMwNWRjNDY5YTYx
MWZiY2M0MTA2YWIzODgzZjBkYTIuLjU4ODRmYjI4MmU3NTYxYTY1ODZkMGY2ZTFkYTU5MTUxYjhk
NTRhNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hl
Y2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5o
CkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgU3ludGF4Q2hlY2tlciBG
dW5jdGlvbkJvZHlCdWlsZGVyOwogICAgIGVudW0geyBOb25lRXhwciA9IDAsCi0gICAgICAgIFJl
c29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4cHIsIE51bWJlckV4cHIsIFN0cmluZ0V4cHIsCisgICAg
ICAgIFJlc29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4cHIsIEludGVnZXJFeHByLCBEb3VibGVFeHBy
LCBTdHJpbmdFeHByLAogICAgICAgICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHByLCBSZWdF
eHBFeHByLCBPYmplY3RMaXRlcmFsRXhwciwKICAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4
cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKICAgICAgICAgTmV3RXhwciwgUHJl
RXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKQEAgLTE1MSw3ICsxNTEsOCBA
QCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9CiAgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7
IHJldHVybiBBcnJheUxpdGVyYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXJy
YXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIEFycmF5TGl0ZXJh
bEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOdW1iZXJFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGRvdWJsZSkgeyByZXR1cm4gTnVtYmVyRXhwcjsgfQorICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZURvdWJsZUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgZG91YmxlKSB7
IHJldHVybiBEb3VibGVFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlSW50ZWdlckV4
cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgZG91YmxlKSB7IHJldHVybiBJbnRlZ2VyRXhwcjsg
fQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVN0cmluZyhjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBjb25zdCBJZGVudGlmaWVyKikgeyByZXR1cm4gU3RyaW5nRXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZUJvb2xlYW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9vbCkgeyByZXR1
cm4gQm9vbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVOdWxsKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIE51bGxFeHByOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmgKaW5kZXggYWNhYjNmYTYyNDBhMTExMmFhMTBlMjkzMWU2ZmRj
MTE1YTAzYmRmMS4uOGEyNjFlM2JhMzk3MWU5MWQzZTAxOGZiZmVjNGZlMWE2ODJjZDE2MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaApAQCAtMTI0LDggKzEy
NCwxNSBAQCBpbmxpbmUgdWludDMyX3QgdG9VSW50MzIoZG91YmxlIG51bWJlcikKIGludDY0X3Qg
dHJ5Q29udmVydFRvSW50NTIoZG91YmxlKTsKIGJvb2wgaXNJbnQ1Mihkb3VibGUpOwogCitlbnVt
IGNsYXNzIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiB7CisgICAgT3RoZXIsCisgICAgSW50ZWdl
ciwKKyAgICBEb3VibGUKK307CisKIGNsYXNzIEpTVmFsdWUgewogICAgIGZyaWVuZCBzdHJ1Y3Qg
RW5jb2RlZEpTVmFsdWVIYXNoVHJhaXRzOworICAgIGZyaWVuZCBzdHJ1Y3QgRW5jb2RlZEpTVmFs
dWVXaXRoUmVwcmVzZW50YXRpb25IYXNoVHJhaXRzOwogICAgIGZyaWVuZCBjbGFzcyBBc3NlbWJs
eUhlbHBlcnM7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3MgSklUU2xv
d1BhdGhDYWxsOwpAQCAtNDQ4LDcgKzQ1NSwyNiBAQCBzdHJ1Y3QgRW5jb2RlZEpTVmFsdWVIYXNo
VHJhaXRzIDogSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4gewogfTsKICNlbmRpZgogCi10eXBl
ZGVmIEhhc2hNYXA8RW5jb2RlZEpTVmFsdWUsIHVuc2lnbmVkLCBFbmNvZGVkSlNWYWx1ZUhhc2gs
IEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0cz4gSlNWYWx1ZU1hcDsKK3R5cGVkZWYgc3RkOjpwYWly
PEVuY29kZWRKU1ZhbHVlLCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IEVuY29kZWRKU1ZhbHVl
V2l0aFJlcHJlc2VudGF0aW9uOworCitzdHJ1Y3QgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50
YXRpb25IYXNoVHJhaXRzIDogSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRh
dGlvbj4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsK
KyAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24gZW1wdHlWYWx1ZSgp
IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpLCBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZVdpdGhSZXByZXNlbnRhdGlvbiYgc2xvdCkgeyBz
bG90ID0gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKSksIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOyB9
CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVz
ZW50YXRpb24gdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkpLCBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsgfQorfTsKKworc3RydWN0IEVuY29kZWRKU1ZhbHVl
V2l0aFJlcHJlc2VudGF0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
RW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRpb24mIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURjo6cGFpckludEhhc2goRW5jb2RlZEpTVmFsdWVIYXNoOjpoYXNoKHZhbHVlLmZp
cnN0KSwgSW50SGFzaDxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+OjpoYXNoKHZhbHVlLnNlY29u
ZCkpOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBFbmNvZGVkSlNWYWx1ZVdp
dGhSZXByZXNlbnRhdGlvbiYgYSwgY29uc3QgRW5jb2RlZEpTVmFsdWVXaXRoUmVwcmVzZW50YXRp
b24mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OwogCiAv
LyBTdGFuZC1hbG9uZSBoZWxwZXIgZnVuY3Rpb25zLgogaW5saW5lIEpTVmFsdWUganNOdWxsKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJpdGgtYWRk
LXdpdGgtY29uc3RhbnRzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9h
cml0aC1hZGQtd2l0aC1jb25zdGFudHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdiZTQyODJlODA4OTE4NDIx
YzIzZTYzOGVmNTQwZjZhMzc1YzZlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJpdGgtYWRkLXdpdGgtY29uc3RhbnRzLmpzCkBAIC0wLDAg
KzEsMjIyIEBACisvLyBUZXN0IHZhbHVlICsgMC4KK2Z1bmN0aW9uIGFyaXRoQWRkSWRlbnRpdHlX
cml0dGVuQXNJbnRlZ2VyKHgpIHsKKyAgICB2YXIgYSA9IHggKyAwOworICAgIHZhciBiID0gMCAr
IHg7CisgICAgaWYgKCEoaXNOYU4oeCkgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpICYmIGEgIT09
IGIpCisgICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvciBvbiBhcml0aEFkZElkZW50aXR5V3Jp
dHRlbkFzSW50ZWdlciwgYSA9ICIgKyBhICsgIiBiID0gIiArIGI7CisgICAgcmV0dXJuIGE7Cit9
Citub0lubGluZShhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcik7CisKK2Z1bmN0aW9u
IHRlc3RBcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigpIHsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50
aXR5V3JpdHRlbkFzSW50ZWdlcihpKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gaSkgeworICAg
ICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKGkpID0gIiAr
IHJlc3VsdCArICIsIGV4cGVjdGVkICIgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhB
ZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoLTApOworICAgICAgICBpZiAocmVzdWx0ICE9PSAt
MCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2Vy
KC0wKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtMCI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciB0ZXN0VmFs
dWUgPSBpICsgLjU7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRl
bkFzSW50ZWdlcih0ZXN0VmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICE9PSB0ZXN0VmFsdWUp
IHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihp
KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAiICsgdGVzdFZhbHVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKE5hTik7CisgICAgICAg
IGlmICghaXNOYU4ocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkSWRlbnRp
dHlXcml0dGVuQXNJbnRlZ2VyKE5hTikgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgTmFOIjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7
CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihJ
bmZpbml0eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0
aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpID0gIiArIHJl
c3VsdCArICIsIGV4cGVjdGVkIEluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0
aEFkZElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigtSW5maW5pdHkpOworICAgICAgICBpZiAoaXNG
aW5pdGUocmVzdWx0KSB8fCByZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRo
QWRkSWRlbnRpdHlXcml0dGVuQXNJbnRlZ2VyKC1JbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwg
ZXhwZWN0ZWQgLUluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RBcml0aEFkZElk
ZW50aXR5V3JpdHRlbkFzSW50ZWdlcigpOworCisKK2Z1bmN0aW9uIGFyaXRoQWRkSWRlbnRpdHlX
cml0dGVuQXNEb3VibGUoeCkgeworICAgIHZhciBhID0geCArIDAuMDsKKyAgICB2YXIgYiA9IDAu
ICsgeDsKKyAgICBpZiAoIShpc05hTih4KSAmJiBpc05hTihhKSAmJiBpc05hTihiKSkgJiYgYSAh
PT0gYikKKyAgICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yIG9uIGFyaXRoQWRkSWRlbnRpdHlX
cml0dGVuQXNEb3VibGUsIGEgPSAiICsgYSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOwor
fQorbm9JbmxpbmUoYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSk7CisKK2Z1bmN0aW9u
IHRlc3RBcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKCkgeworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRp
dHlXcml0dGVuQXNEb3VibGUoaSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IGkpIHsKKyAgICAg
ICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5V3JpdHRlbkFzRG91YmxlKGkpID0gIiArIHJl
c3VsdCArICIsIGV4cGVjdGVkICIgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJ
ZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IC0wKSB7
CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgtMCkg
PSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLTAgIjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHRlc3RWYWx1ZSA9
IGkgKyAuNTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNE
b3VibGUodGVzdFZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gdGVzdFZhbHVlKSB7Cisg
ICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShpKSA9ICIg
KyByZXN1bHQgKyAiLCBleHBlY3RlZCAiICsgdGVzdFZhbHVlOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGFyaXRoQWRkSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoTmFOKTsKKyAgICAgICAgaWYgKCFp
c05hTihyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhBZGRJZGVudGl0eVdyaXR0
ZW5Bc0RvdWJsZShOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAg
ICB2YXIgcmVzdWx0ID0gYXJpdGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSk7
CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJp
dGhBZGRJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShJbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwg
ZXhwZWN0ZWQgSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkSWRlbnRp
dHlXcml0dGVuQXNEb3VibGUoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3Vs
dCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZElkZW50aXR5
V3JpdHRlbkFzRG91YmxlKC1JbmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLUlu
ZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RBcml0aEFkZElkZW50aXR5V3JpdHRl
bkFzRG91YmxlKCk7CisKKworLy8gVGVzdCAidmFsdWUgKyA0MiIuCitmdW5jdGlvbiBhcml0aEFk
ZDQyV3JpdHRlbkFzSW50ZWdlcih4KSB7CisgICAgdmFyIGEgPSB4ICsgNDI7CisgICAgdmFyIGIg
PSA0MiArIHg7CisgICAgaWYgKCEoaXNOYU4oeCkgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpICYm
IGEgIT09IGIpCisgICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvciBvbiBhcml0aEFkZDQyV3Jp
dHRlbkFzSW50ZWdlciwgYSA9ICIgKyBhICsgIiBiID0gIiArIGI7CisgICAgcmV0dXJuIGE7Cit9
Citub0lubGluZShhcml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcik7CisKK2Z1bmN0aW9uIHRlc3RB
cml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQyV3JpdHRlbkFzSW50ZWdl
cigxMyk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDU1KSB7CisgICAgICAgICAgICB0aHJvdyAi
YXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoMTMpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVk
IDU1IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKC0w
KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNDIpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0
aEFkZDQyV3JpdHRlbkFzSW50ZWdlcigtMCkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNDIi
OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIoMTMuMyk7
CisgICAgICAgIGlmIChyZXN1bHQgIT09IDU1LjMpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0
aEFkZDQyV3JpdHRlbkFzSW50ZWdlcigxMy4zKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCA1
NS4zIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcihO
YU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRocm93ICJh
cml0aEFkZDQyV3JpdHRlbkFzSW50ZWdlcihOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVk
IE5hTiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsg
KytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIo
SW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSkgeworICAgICAgICAgICAg
dGhyb3cgImFyaXRoQWRkNDJXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5KSA9ICIgKyByZXN1bHQg
KyAiLCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0
MldyaXR0ZW5Bc0ludGVnZXIoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3Vs
dCkgfHwgcmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRl
bkFzSW50ZWdlcigtSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0
eSI7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhBZGQ0MldyaXR0ZW5Bc0ludGVnZXIo
KTsKKworCitmdW5jdGlvbiBhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKHgpIHsKKyAgICB2YXIg
YSA9IHggKyA0Mi4wOworICAgIHZhciBiID0gNDIuICsgeDsKKyAgICBpZiAoIShpc05hTih4KSAm
JiBpc05hTihhKSAmJiBpc05hTihiKSkgJiYgYSAhPT0gYikKKyAgICAgICAgdGhyb3cgIkludGVy
bmFsIGVycm9yIG9uIGFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUsIGEgPSAiICsgYSArICIgYiA9
ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhBZGQ0MldyaXR0ZW5Bc0Rv
dWJsZSk7CisKK2Z1bmN0aW9uIHRlc3RBcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKCkgeworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFy
aXRoQWRkNDJXcml0dGVuQXNEb3VibGUoMTMpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1NSkg
eworICAgICAgICAgICAgdGhyb3cgImFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoaSkgPSAiICsg
cmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTUiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0
MldyaXR0ZW5Bc0RvdWJsZSgtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDQyKSB7CisgICAg
ICAgICAgICB0aHJvdyAiYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZSgtMCkgPSAiICsgcmVzdWx0
ICsgIiwgZXhwZWN0ZWQgNDIiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0MldyaXR0
ZW5Bc0RvdWJsZSgxMy4zKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNTUuMykgeworICAgICAg
ICAgICAgdGhyb3cgImFyaXRoQWRkNDJXcml0dGVuQXNEb3VibGUoMTMuMykgPSAiICsgcmVzdWx0
ICsgIiwgZXhwZWN0ZWQgNTUuMyI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhBZGQ0Mldy
aXR0ZW5Bc0RvdWJsZShOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAg
ICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKE5hTikgPSAiICsgcmVzdWx0
ICsgIiwgZXhwZWN0ZWQgTmFOIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aEFkZDQyV3Jp
dHRlbkFzRG91YmxlKEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkpIHsK
KyAgICAgICAgICAgIHRocm93ICJhcml0aEFkZDQyV3JpdHRlbkFzRG91YmxlKEluZmluaXR5KSA9
ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0
ID0gYXJpdGhBZGQ0MldyaXR0ZW5Bc0RvdWJsZSgtSW5maW5pdHkpOworICAgICAgICBpZiAoaXNG
aW5pdGUocmVzdWx0KSB8fCByZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRo
QWRkNDJXcml0dGVuQXNEb3VibGUoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3Rl
ZCAtSW5maW5pdHkiOworICAgICAgICB9CisgICAgfQorfQordGVzdEFyaXRoQWRkNDJXcml0dGVu
QXNEb3VibGUoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FyaXRoLW11bC13aXRoLWNvbnN0YW50cy5q
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJpdGgtbXVsLXdpdGgtY29u
c3RhbnRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1NmFiNzllNGUzNjVmNzRjZjRhMmYyMDdmNGY1MzMyYTMw
NzBkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2FyaXRoLW11bC13aXRoLWNvbnN0YW50cy5qcwpAQCAtMCwwICsxLDIyMiBAQAorLy8gVGVz
dCB2YWx1ZSAqIDEuCitmdW5jdGlvbiBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcih4
KSB7CisgICAgdmFyIGEgPSB4ICogMTsKKyAgICB2YXIgYiA9IDEgKiB4OworICAgIGlmICghKGlz
TmFOKHgpICYmIGlzTmFOKGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJv
dyAiSW50ZXJuYWwgZXJyb3Igb24gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIsIGEg
PSAiICsgYSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhN
dWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhNdWxJZGVu
dGl0eVdyaXR0ZW5Bc0ludGVnZXIoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsr
aSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVn
ZXIoaSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJh
cml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihpKSA9ICIgKyByZXN1bHQgKyAiLCBleHBl
Y3RlZCAiICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVu
QXNJbnRlZ2VyKC0wKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gLTApIHsKKyAgICAgICAgICAg
IHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcigtMCkgPSAiICsgcmVzdWx0
ICsgIiwgZXhwZWN0ZWQgLTAiOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgdGVzdFZhbHVlID0gaSArIC41OworICAg
ICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIodGVzdFZh
bHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gdGVzdFZhbHVlKSB7CisgICAgICAgICAgICB0
aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoaSkgPSAiICsgcmVzdWx0ICsg
IiwgZXhwZWN0ZWQgIiArIHRlc3RWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11
bElkZW50aXR5V3JpdHRlbkFzSW50ZWdlcihOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3Vs
dCkpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRlbkFzSW50ZWdl
cihOYU4pID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIE5hTiI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVz
dWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpOworICAgICAg
ICBpZiAoaXNGaW5pdGUocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRl
bnRpdHlXcml0dGVuQXNJbnRlZ2VyKEluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3Rl
ZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWxJZGVudGl0eVdyaXR0
ZW5Bc0ludGVnZXIoLUluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkgfHwg
cmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bElkZW50aXR5V3JpdHRl
bkFzSW50ZWdlcigtSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0
eSI7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0lu
dGVnZXIoKTsKKworCitmdW5jdGlvbiBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKHgp
IHsKKyAgICB2YXIgYSA9IHggKiAxLjA7CisgICAgdmFyIGIgPSAxLiAqIHg7CisgICAgaWYgKCEo
aXNOYU4oeCkgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpICYmIGEgIT09IGIpCisgICAgICAgIHRo
cm93ICJJbnRlcm5hbCBlcnJvciBvbiBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlLCBh
ID0gIiArIGEgKyAiIGIgPSAiICsgYjsKKyAgICByZXR1cm4gYTsKK30KK25vSW5saW5lKGFyaXRo
TXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhNdWxJZGVu
dGl0eVdyaXR0ZW5Bc0RvdWJsZSgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91Ymxl
KGkpOworICAgICAgICBpZiAocmVzdWx0ICE9PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJp
dGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZShpKSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3Rl
ZCAiICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0
OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNE
b3VibGUoLTApOworICAgICAgICBpZiAocmVzdWx0ICE9PSAtMCkgeworICAgICAgICAgICAgdGhy
b3cgImFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoLTApID0gIiArIHJlc3VsdCArICIs
IGV4cGVjdGVkIC0wICI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciB0ZXN0VmFsdWUgPSBpICsgLjU7CisgICAgICAg
IHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91YmxlKHRlc3RWYWx1ZSk7
CisgICAgICAgIGlmIChyZXN1bHQgIT09IHRlc3RWYWx1ZSkgeworICAgICAgICAgICAgdGhyb3cg
ImFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoaSkgPSAiICsgcmVzdWx0ICsgIiwgZXhw
ZWN0ZWQgIiArIHRlc3RWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50
aXR5V3JpdHRlbkFzRG91YmxlKE5hTik7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkgewor
ICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoTmFOKSA9
ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCBOYU4iOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFy
aXRoTXVsSWRlbnRpdHlXcml0dGVuQXNEb3VibGUoSW5maW5pdHkpOworICAgICAgICBpZiAoaXNG
aW5pdGUocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsSWRlbnRpdHlXcml0
dGVuQXNEb3VibGUoSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIEluZmluaXR5
IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kp
IHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bElkZW50aXR5V3JpdHRlbkFzRG91Ymxl
KC1JbmZpbml0eSk7CisgICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpIHx8IHJlc3VsdCA+PSAw
KSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgt
SW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVkIC1JbmZpbml0eSI7CisgICAgICAg
IH0KKyAgICB9Cit9Cit0ZXN0QXJpdGhNdWxJZGVudGl0eVdyaXR0ZW5Bc0RvdWJsZSgpOworCisK
Ky8vIFRlc3QgInZhbHVlICogNDIiLgorZnVuY3Rpb24gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVn
ZXIoeCkgeworICAgIHZhciBhID0geCAqIDQyOworICAgIHZhciBiID0gNDIgKiB4OworICAgIGlm
ICghKGlzTmFOKHgpICYmIGlzTmFOKGEpICYmIGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAg
ICB0aHJvdyAiSW50ZXJuYWwgZXJyb3Igb24gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIsIGEg
PSAiICsgYSArICIgYiA9ICIgKyBiOworICAgIHJldHVybiBhOworfQorbm9JbmxpbmUoYXJpdGhN
dWw0MldyaXR0ZW5Bc0ludGVnZXIpOworCitmdW5jdGlvbiB0ZXN0QXJpdGhNdWw0MldyaXR0ZW5B
c0ludGVnZXIoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAg
ICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoMTMpOworICAgICAgICBp
ZiAocmVzdWx0ICE9PSA1NDYpIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRl
bkFzSW50ZWdlcigxMykgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTQ2IjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKC0wKTsKKyAgICAgICAgaWYg
KHJlc3VsdCAhPT0gLTApIHsKKyAgICAgICAgICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFz
SW50ZWdlcigtMCkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLTAiOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0ludGVnZXIoMTMuMyk7CisgICAgICAgIGlmIChy
ZXN1bHQgIT09IDU1OC42KSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhNdWw0MldyaXR0ZW5B
c0ludGVnZXIoMTMuMykgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgNTU4LjYiOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgezsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKE5hTik7CisgICAgICAg
IGlmICghaXNOYU4ocmVzdWx0KSkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0
dGVuQXNJbnRlZ2VyKE5hTikgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgTmFOIjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHs7CisgICAg
ICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcihJbmZpbml0eSk7Cisg
ICAgICAgIGlmIChpc0Zpbml0ZShyZXN1bHQpKSB7CisgICAgICAgICAgICB0aHJvdyAiYXJpdGhN
dWw0MldyaXR0ZW5Bc0ludGVnZXIoSW5maW5pdHkpID0gIiArIHJlc3VsdCArICIsIGV4cGVjdGVk
IEluZmluaXR5IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzSW50
ZWdlcigtSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVzdWx0KSB8fCByZXN1bHQg
Pj0gMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNJbnRlZ2VyKC1J
bmZpbml0eSkgPSAiICsgcmVzdWx0ICsgIiwgZXhwZWN0ZWQgLUluZmluaXR5IjsKKyAgICAgICAg
fQorICAgIH0KK30KK3Rlc3RBcml0aE11bDQyV3JpdHRlbkFzSW50ZWdlcigpOworCisKK2Z1bmN0
aW9uIGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoeCkgeworICAgIHZhciBhID0geCAqIDQyLjA7
CisgICAgdmFyIGIgPSA0Mi4gKiB4OworICAgIGlmICghKGlzTmFOKHgpICYmIGlzTmFOKGEpICYm
IGlzTmFOKGIpKSAmJiBhICE9PSBiKQorICAgICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3Igb24g
YXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJsZSwgYSA9ICIgKyBhICsgIiBiID0gIiArIGI7CisgICAg
cmV0dXJuIGE7Cit9Citub0lubGluZShhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKTsKKworZnVu
Y3Rpb24gdGVzdEFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoKSB7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0
ZW5Bc0RvdWJsZSgxMyk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDU0NikgeworICAgICAgICAg
ICAgdGhyb3cgImFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoaSkgPSAiICsgcmVzdWx0ICsgIiwg
ZXhwZWN0ZWQgNTQ2IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMWU0OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNE
b3VibGUoLTApOworICAgICAgICBpZiAocmVzdWx0ICE9PSAtMCkgeworICAgICAgICAgICAgdGhy
b3cgImFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUoLTApID0gIiArIHJlc3VsdCArICIsIGV4cGVj
dGVkIC0wIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0
OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUo
MTMuMyk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDU1OC42KSB7CisgICAgICAgICAgICB0aHJv
dyAiYXJpdGhNdWw0MldyaXR0ZW5Bc0RvdWJsZSgxMy4zKSA9ICIgKyByZXN1bHQgKyAiLCBleHBl
Y3RlZCA1NTguNiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhNdWw0MldyaXR0ZW5Bc0Rv
dWJsZShOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRo
cm93ICJhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKE5hTikgPSAiICsgcmVzdWx0ICsgIiwgZXhw
ZWN0ZWQgTmFOIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU0OyArK2kpIHs7CisgICAgICAgIHZhciByZXN1bHQgPSBhcml0aE11bDQyV3JpdHRlbkFzRG91
YmxlKEluZmluaXR5KTsKKyAgICAgICAgaWYgKGlzRmluaXRlKHJlc3VsdCkpIHsKKyAgICAgICAg
ICAgIHRocm93ICJhcml0aE11bDQyV3JpdHRlbkFzRG91YmxlKEluZmluaXR5KSA9ICIgKyByZXN1
bHQgKyAiLCBleHBlY3RlZCBJbmZpbml0eSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7OworICAgICAgICB2YXIgcmVzdWx0ID0gYXJpdGhN
dWw0MldyaXR0ZW5Bc0RvdWJsZSgtSW5maW5pdHkpOworICAgICAgICBpZiAoaXNGaW5pdGUocmVz
dWx0KSB8fCByZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgdGhyb3cgImFyaXRoTXVsNDJXcml0
dGVuQXNEb3VibGUoLUluZmluaXR5KSA9ICIgKyByZXN1bHQgKyAiLCBleHBlY3RlZCAtSW5maW5p
dHkiOworICAgICAgICB9CisgICAgfQorfQordGVzdEFyaXRoTXVsNDJXcml0dGVuQXNEb3VibGUo
KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>